USB OTG en el LG L3 (E400): modo host con un interruptor de software
En el LG Optimus L3 (E400) con CyanogenMod 7, un pendrive conectado por USB OTG funciona: se monta solo y se lee desde el teléfono. Esto es lo que hizo falta, y lo contrasto con el C660, donde no hubo manera.
Lo que ya traía el teléfono
El kernel 2.6.38 de LG ya incluye el controlador host (msm_hsusb_host.0), usb-storage y un control en debugfs. No hizo falta tocar el kernel. Lo que faltaba:
- Montar el disco. Una entrada
usbdiskenvold.fstabque apunta a/devices/platform/msm_hsusb_host.0y monta el pendrive en/mnt/usbdisk. - Un interruptor. El pin ID del micro-USB no llega al procesador (el registro
OTGSClo da siempre en 1), así que el teléfono nunca se pone en modo host solo. Hay que forzarlo.
El interruptor
El kernel acepta el modo en /sys/kernel/debug/otg/mode. Lo conecté a una propiedad del sistema (sys.otg.mode) mediante init.e0.rc, y escribí una pequeña app, OtgSwitch, con un botón que la cambia entre host y peripheral. Se ejecuta con el usuario del sistema porque solo él puede escribir esa propiedad.
Cómo se usa
- Abre OtgSwitch y activa el modo host antes de enchufar el cable.
- Conecta el adaptador OTG y el pendrive.
- El disco aparece en
/mnt/usbdisk. - Para volver, desactiva el modo host: recuperas adb y la carga por USB.
Qué adaptador usé
Un adaptador micro-USB OTG en ángulo de 90° (ficha en Mercado Libre).
Límites
- El teléfono no entrega 5 V. Hace falta alimentación externa para el dispositivo conectado.
- El modo host desactiva la detección de VBUS y de ID, y se pierde al reiniciar.
- Con el host activo el puerto USB no sirve para adb: usa adb por Wi-Fi (
setprop service.adb.tcp.port 5555). - Un ratón y un teclado aparecen como dispositivos de entrada normales. El ratón lo probé en una compilación de CM10.1.
El código está en el árbol del dispositivo y la app en OtgSwitch.