From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932086AbbA3AL0 (ORCPT ); Thu, 29 Jan 2015 19:11:26 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:36176 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758814AbbA3ALW (ORCPT ); Thu, 29 Jan 2015 19:11:22 -0500 X-AuditID: cbfee68d-f79296d000004278-d5-54cacc28251b Message-id: <54CACC28.3050306@samsung.com> Date: Fri, 30 Jan 2015 09:11:20 +0900 From: Chanwoo Choi User-Agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 MIME-version: 1.0 To: Roger Quadros Cc: myungjoo.ham@samsung.com, balbi@ti.com, tony@atomide.com, george.cherian@ti.com, nsekhar@ti.com, devicetree@vger.kernel.org, linux-usb@vger.kernel.org, linux-omap@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 1/7] extcon: usb-gpio: Introduce gpio usb extcon driver References: <1422274532-9488-1-git-send-email-rogerq@ti.com> <1422274532-9488-2-git-send-email-rogerq@ti.com> <54C8D2F4.9050404@ti.com> In-reply-to: <54C8D2F4.9050404@ti.com> Content-type: text/plain; charset=windows-1252 Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrJIsWRmVeSWpSXmKPExsWyRsSkUFfjzKkQgzn79S0O3q+3mH/kHKvF qYPLWS0u75rDZjF7ST+LxaJlrcwWtxtXsFns793AZNHzSMti/xUvBy6Pb18nsXj0bVnF6HH8 xnYmj8+b5AJYorhsUlJzMstSi/TtErgy2k8eZS/4o1Hx+MA2xgbGtwpdjJwcEgImEpN+/mKD sMUkLtxbD2RzcQgJLGWU6Nt4mqWLkQOs6OuzEoj4dEaJ6/uPsEM4rxklri78zgTSzSugJbHh 5SFmEJtFQFWiee1sMJsNKL7/xQ2wDaICYRIrp19hgagXlPgx+R6YLSKgKHFvJcRmZoFbjBIT dh4EGyos4Cex4fVtFohtnYwS9x5NYgM5iVNATWLOMl4Qk1lAT+L+RS2QcmYBeYnNa94yg5RL CNxilzjweiYLxEECEt8mH4L6RlZi0wFmiI8lJQ6uuMEygVFsFpKTZiFMnYVk6gJG5lWMoqkF yQXFSelFhnrFibnFpXnpesn5uZsYgTF4+t+z3h2Mtw9YH2IU4GBU4uFNaDwZIsSaWFZcmXuI 0RToiInMUqLJ+cBIzyuJNzQ2M7IwNTE1NjK3NFMS51WU+hksJJCeWJKanZpakFoUX1Sak1p8 iJGJg1OqgfFyxN/7/omyMYt/Hlq7cts9hq8hrh/SJ6xS3fr4p0H6ug0XK9OEDbmSDvl96lPf JFS19FTnJZUG5wMh/x8emfJXyOmozbOijXfvnev9d6c0WlfIazL3ncmNfBMWNx113tSVnT2/ bc81zU5mUyZGxi3zIj3s06KFAt+3b+ZgdS9kOXHYegb/FSMlluKMREMt5qLiRAB1QHdcvAIA AA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrMIsWRmVeSWpSXmKPExsVy+t9jQV2NM6dCDJ4sU7c4eL/eYv6Rc6wW pw4uZ7W4vGsOm8XsJf0sFouWtTJb3G5cwWaxv3cDk0XPIy2L/Ve8HLg8vn2dxOLRt2UVo8fx G9uZPD5vkgtgiWpgtMlITUxJLVJIzUvOT8nMS7dV8g6Od443NTMw1DW0tDBXUshLzE21VXLx CdB1y8wBOkdJoSwxpxQoFJBYXKykb4dpQmiIm64FTGOErm9IEFyPkQEaSFjDmNF+8ih7wR+N iscHtjE2ML5V6GLk4JAQMJH4+qyki5ETyBSTuHBvPVsXIxeHkMB0Ronr+4+wQzivGSWuLvzO BFLFK6AlseHlIWYQm0VAVaJ57Wwwmw0ovv/FDTYQW1QgTGLl9CssEPWCEj8m3wOzRQQUJe6t hNjALHCLUWLCzoNgQ4UF/CQ2vL7NArGtk1Hi3qNJbCDncQqoScxZxgtiMgvoSdy/qAVSziwg L7F5zVvmCYwCs5CsmIVQNQtJ1QJG5lWMoqkFyQXFSem5RnrFibnFpXnpesn5uZsYwRH+THoH 46oGi0OMAhyMSjy8CY0nQ4RYE8uKK3MPMUpwMCuJ8OofOxUixJuSWFmVWpQfX1Sak1p8iNEU GAATmaVEk/OBySevJN7Q2MTMyNLI3NDCyNhcSZxXyb4tREggPbEkNTs1tSC1CKaPiYNTqoGx hfmq5Ul39d1M//61fJw7P//rtx1fK9J6bZ4sYuHmELu8TNJuc5tqlJecq0cUj8OlL3uX7/Zr +3WT13ze+48rJ3LFvvbnW5AmNXPlJc3jNR88LLmd/V7HljBnCV7MUS67+VDsvcK5JL73rB/d l72u+cu4haN4Tt3Zdw8r7sn+d18+w3d3rnCEEktxRqKhFnNRcSIAPqv9MAYDAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Roger, On 01/28/2015 09:15 PM, Roger Quadros wrote: > This driver observes the USB ID pin connected over a GPIO and > updates the USB cable extcon states accordingly. > > The existing GPIO extcon driver is not suitable for this purpose > as it needs to be taught to understand USB cable states and it > can't handle more than one cable per instance. > > For the USB case we need to handle 2 cable states. > 1) USB (attach/detach) > 2) USB-Host (attach/detach) > > This driver can be easily updated in the future to handle VBUS > events in case it happens to be available on GPIO for any platform. > > Signed-off-by: Roger Quadros > --- > v3: > - removed IRQF_NO_SUSPEND flag. Added IRQF_TRIGGER_RISING and > IRQF_TRIGGER_FALLING > - Added disable_irq() to suspend() and enable_irq() to resume() > > .../devicetree/bindings/extcon/extcon-usb-gpio.txt | 18 ++ > drivers/extcon/Kconfig | 7 + > drivers/extcon/Makefile | 1 + > drivers/extcon/extcon-usb-gpio.c | 233 +++++++++++++++++++++ > 4 files changed, 259 insertions(+) > create mode 100644 Documentation/devicetree/bindings/extcon/extcon-usb-gpio.txt > create mode 100644 drivers/extcon/extcon-usb-gpio.c > > diff --git a/Documentation/devicetree/bindings/extcon/extcon-usb-gpio.txt b/Documentation/devicetree/bindings/extcon/extcon-usb-gpio.txt > new file mode 100644 > index 0000000..85fe6b0 > --- /dev/null > +++ b/Documentation/devicetree/bindings/extcon/extcon-usb-gpio.txt > @@ -0,0 +1,18 @@ > +USB GPIO Extcon device > + > +This is a virtual device used to generate USB cable states from the USB ID pin > +connected to a GPIO pin. > + > +Required properties: > +- compatible: Should be "linux,extcon-usb-gpio" > +- id-gpio: gpio for USB ID pin. See gpio binding. > + > +Example: > + extcon_usb1 { > + compatible = "linux,extcon-usb-gpio"; > + id-gpio = <&gpio6 1 GPIO_ACTIVE_HIGH>; > + } > + > + &omap_dwc3_1 { > + extcon = <&extcon_usb1>; > + }; > diff --git a/drivers/extcon/Kconfig b/drivers/extcon/Kconfig > index 6a1f7de..fd11536 100644 > --- a/drivers/extcon/Kconfig > +++ b/drivers/extcon/Kconfig > @@ -93,4 +93,11 @@ config EXTCON_SM5502 > Silicon Mitus SM5502. The SM5502 is a USB port accessory > detector and switch. > > +config EXTCON_USB_GPIO > + tristate "USB GPIO extcon support" > + select GPIOLIB > + help > + Say Y here to enable GPIO based USB cable detection extcon support. > + Used typically if GPIO is used for USB ID pin detection. > + > endif # MULTISTATE_SWITCH > diff --git a/drivers/extcon/Makefile b/drivers/extcon/Makefile > index 0370b42..6a08a98 100644 > --- a/drivers/extcon/Makefile > +++ b/drivers/extcon/Makefile > @@ -12,3 +12,4 @@ obj-$(CONFIG_EXTCON_MAX8997) += extcon-max8997.o > obj-$(CONFIG_EXTCON_PALMAS) += extcon-palmas.o > obj-$(CONFIG_EXTCON_RT8973A) += extcon-rt8973a.o > obj-$(CONFIG_EXTCON_SM5502) += extcon-sm5502.o > +obj-$(CONFIG_EXTCON_USB_GPIO) += extcon-usb-gpio.o > diff --git a/drivers/extcon/extcon-usb-gpio.c b/drivers/extcon/extcon-usb-gpio.c > new file mode 100644 > index 0000000..99a58b2 > --- /dev/null > +++ b/drivers/extcon/extcon-usb-gpio.c > @@ -0,0 +1,233 @@ > +/** > + * drivers/extcon/extcon-usb-gpio.c - USB GPIO extcon driver > + * > + * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com > + * Author: Roger Quadros > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#define USB_GPIO_DEBOUNCE_MS 20 /* ms */ > + > +struct usb_extcon_info { > + struct device *dev; > + struct extcon_dev *edev; > + > + struct gpio_desc *id_gpiod; > + int id_irq; > + bool id_irqwake; /* ID wakeup enabled flag */ > + > + unsigned long debounce_jiffies; > + struct delayed_work wq_detcable; > +}; > + > +/* List of detectable cables */ > +enum { > + EXTCON_CABLE_USB = 0, > + EXTCON_CABLE_USB_HOST, > + > + EXTCON_CABLE_END, > +}; > + > +static const char *usb_extcon_cable[] = { > + [EXTCON_CABLE_USB] = "USB", > + [EXTCON_CABLE_USB_HOST] = "USB-Host", I'll use the defined name for extcon cable name as soon because it has potential isseu about the conflict of extcon cable name between subsystems. So, I recommend to use a captical letter as "USB-HOST" instead of "USB-Host". If other extcon driver don't use the captical letter, I'll fix it. [snip] Thanks, Chanwoo Choi