From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753174AbbE0OT0 (ORCPT ); Wed, 27 May 2015 10:19:26 -0400 Received: from mail-ie0-f171.google.com ([209.85.223.171]:33269 "EHLO mail-ie0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753105AbbE0OTW (ORCPT ); Wed, 27 May 2015 10:19:22 -0400 MIME-Version: 1.0 Reply-To: cw00.choi@samsung.com In-Reply-To: <5565D01C.3060106@ti.com> References: <1432728910-10761-1-git-send-email-cw00.choi@samsung.com> <5565D01C.3060106@ti.com> Date: Wed, 27 May 2015 23:19:21 +0900 Message-ID: Subject: Re: [PATCH v2 0/2] extcon: Inform the state of both ID and VBUS pin for USB From: Chanwoo Choi To: Roger Quadros Cc: linux-kernel , Robert Baldyga , Peter Chen , Kishon Vijay Abraham I , Felipe Balbi , iivanov@mm-sol.com, "myungjoo.ham@samsung.com" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, May 27, 2015 at 11:09 PM, Roger Quadros wrote: > Chanwoo, > > On 27/05/15 15:15, Chanwoo Choi wrote: >> >> 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); > > > Now that all USB line states can be captured by a single cable type > can we get rid of EXTCON_USB_HOST? EXTCON_USB_HOST is necessary to inform the event to the user-space by uevent. For example, when the USB mouse device is attached, extcon have to inform the staet to user-space. The role of extcon should inform the state of all external connectors. > > That way the extcon driver doesn't need to make any decisions as to > what mode we're in (host/cable) and this is best left to the USB driver. The extcon just infrom the new event to the user-space. If the notification of USB_HOST is not necessary in kernel space, both device driver and framework in kernel space cannot register the notifier. Thanks, Chanwoo Choi > > cheers, > -roger > > >> 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; >> }; >> } >> >> Changes from v1: >> - Use dev_warn() instead of dev_info() if set the same extcon_line_state >> value. >> >> 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(-) >> >