servo v3: add atmega pty

Add servod and xml hooks for uart4 routed to the atmega USB
keyboard emulator on servo v3. Allow usbkm232 init after other gpio init
to preserve settings. Ensure USB routing is correct.

BUG=chromium:551926
TEST=servod --board=panther --usbkm232=atmega &; dut-control kb_press:d_key

Change-Id: Iea0abc378e13ddb77b274246cd1a470747b83647
Reviewed-on: https://chromium-review.googlesource.com/317120
Commit-Ready: Nick Sanders <nsanders@chromium.org>
Tested-by: Nick Sanders <nsanders@chromium.org>
Reviewed-by: Richard Barnette <jrbarnette@chromium.org>
Reviewed-by: Todd Broch <tbroch@chromium.org>
diff --git a/servo/servo_server.py b/servo/servo_server.py
index bb646ab..3498c8e 100755
--- a/servo/servo_server.py
+++ b/servo/servo_server.py
@@ -118,9 +118,6 @@
       else:
         self._interface_list.append(result)
 
-    # Init keyboard after all the intefaces are up.
-    self._keyboard = self._init_keyboard_handler(self, self._board)
-
 
   def _init_keyboard_handler(self, servo, board=''):
     """Initialize the correct keyboard handler for board.
@@ -145,6 +142,7 @@
       if self._usbkm232 == 'atmega':
         # Use servo onboard keyboard emulator.
         self.set('atmega_rst', 'on')
+        self.set('at_hwb', 'off')
         self.set('atmega_rst', 'off')
         self._usbkm232 = self.get('atmega_pty')
         self.set('atmega_baudrate', '9600')
@@ -152,6 +150,7 @@
         self.set('atmega_parity', 'none')
         self.set('atmega_sbits', 'one')
         self.set('usb_mux_sel4', 'on')
+        self.set('usb_mux_oe4', 'on')
         # Allow atmega bootup time.
         time.sleep(1.0)
       self._logger.info('USBKM232: %s', self._usbkm232)
@@ -711,6 +710,9 @@
                            control_name, value, str(e))
       if verbose:
         self._logger.info('Initialized %s to %s', control_name, value)
+
+    # Init keyboard after all the intefaces are up.
+    self._keyboard = self._init_keyboard_handler(self, self._board)
     return True
 
   def echo(self, echo):