Messages in this thread | | | From | Chanwoo Choi <> | Subject | [PATCH 0/2] extcon: Inform the state of both ID and VBUS pin for USB | Date | Fri, 22 May 2015 19:49:48 +0900 |
| |
Previously, I discussed how to inform the changed state of both ID and VBUS pin for USB connector on patch-set[1]. [1] https://lkml.org/lkml/2015/4/2/310
So, this patch adds the extcon_set_cable_line_state() function to inform the additional state of external connectors without additional register/ unregister functions. This function uses the existing notifier chain which is registered by extcon_register_notifier() / extcon_register_interest().
The extcon_set_cable_line_state() can inform the new state of both ID and VBUS pin state through extcon_set_cable_line_state().
For exmaple: - On extcon-usb-gpio.c as extcon provider driver as following: static void usb_extcon_detect_cable(struct work_struct *work) { ... /* check ID and update cable state */ id = gpiod_get_value_cansleep(info->id_gpiod); if (id) { extcon_set_cable_state_(info->edev, EXTCON_USB_HOST, false); extcon_set_cable_state_(info->edev, EXTCON_USB, true);
extcon_set_cable_line_state(info->edev, EXTCON_USB, EXTCON_USB_ID_HIGH); } else { extcon_set_cable_state_(info->edev, EXTCON_USB, false); extcon_set_cable_state_(info->edev, EXTCON_USB_HOST, true);
extcon_set_cable_line_state(info->edev, EXTCON_USB, EXTCON_USB_ID_LOW); } }
- On specific extcon consumder driver as following: static int xxx_probe(struct platform_device *pdev) { struct notifier_chain nh;
nb.notifier_call = extcon_usb_notifier; ret = extcon_register_notifier(edev, EXTCON_USB, &nb); ... }
static int extcon_usb_notifier(struct notifier_block *self, unsigned long event, void *ptr) { switch (event) { case EXTCON_DETACHED: printk("USB is detached\n"); break; case EXTCON_ATTACHED: printk("USB is attached\n"); break;
case EXTCON_USB_ID_LOW: printk("USB's ID pin is low state\n"); break; case EXTCON_USB_ID_HIGH: printk("USB's ID pin is high state\n"); break; case EXTCON_USB_VBUS_LOW: printk("USB's VBUS pin is high state\n"); break; case EXTCON_USB_VBUS_HIGH: printk("USB's VBUS pin is high state\n"); break; default: return -EINVAL; }; }
Chanwoo Choi (2): extcon: Add extcon_set_cable_line_state() to inform the additional state of external connectors extcon: usb-gpio: Update the ID pin state of USB when cable state is changed
drivers/extcon/extcon-usb-gpio.c | 6 ++++ drivers/extcon/extcon.c | 74 +++++++++++++++++++++++++++++++++++++++- include/linux/extcon.h | 24 +++++++++++++ 3 files changed, 103 insertions(+), 1 deletion(-)
-- 1.8.5.5
| |