From patchwork Mon Nov 3 16:32:28 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felipe Balbi X-Patchwork-Id: 40040 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-ee0-f71.google.com (mail-ee0-f71.google.com [74.125.83.71]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id 32ECB21894 for ; Mon, 3 Nov 2014 16:34:14 +0000 (UTC) Received: by mail-ee0-f71.google.com with SMTP id e51sf3065112eek.10 for ; Mon, 03 Nov 2014 08:34:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:sender:precedence:list-id :x-original-sender:x-original-authentication-results:mailing-list :list-post:list-help:list-archive:list-unsubscribe:content-type; bh=v9QteSbh8/D+KXX47FGyz9x8HDZJGAe1oKUm3c8CSD0=; b=QtmWNoHfnv8xNLySA7MPJ3I29UDGzrqruC7z86uvDBvfURC5/Jz7bGz2Q9VmWj12cv UwcI4aUQZcW9FLSwxmPa2veL6P6j59Iy3tzWIESO0r85RRM+QZ7pcKFOqMr3yKRey2ZQ qfOqybGzBMxFI+/FPTceqbKU5FWbUeAyRIr74nHRRWvEF/S/iOuTQ0a2bjUmJpjrVXBy Z1ouOGo3pzTsd/pa+HDbtLSZoEmg4bbJq9FP7pvIerhWKLvTfcgbiCU2xkQdB3H2JAUk /MreVd/GrDsfS03Fb9siz9msTdFgK4M9l2OQyUalHcyVCAgKbNmdvJ49dEzHn7BZCESn pE/g== X-Gm-Message-State: ALoCoQlT/JeUSh7OueaXf1y9uEIsdt3fdqjGBlC+YGMkrdKp8lWcD3m+qskglGwRIMNQJyigGk0L X-Received: by 10.180.101.202 with SMTP id fi10mr3077280wib.7.1415032453421; Mon, 03 Nov 2014 08:34:13 -0800 (PST) X-BeenThere: patchwork-forward@linaro.org Received: by 10.152.10.39 with SMTP id f7ls90482lab.75.gmail; Mon, 03 Nov 2014 08:34:13 -0800 (PST) X-Received: by 10.152.25.200 with SMTP id e8mr51591391lag.28.1415032453219; Mon, 03 Nov 2014 08:34:13 -0800 (PST) Received: from mail-la0-f50.google.com (mail-la0-f50.google.com. [209.85.215.50]) by mx.google.com with ESMTPS id vr4si33095339lbb.110.2014.11.03.08.34.13 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 03 Nov 2014 08:34:13 -0800 (PST) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.50 as permitted sender) client-ip=209.85.215.50; Received: by mail-la0-f50.google.com with SMTP id hz20so7368444lab.9 for ; Mon, 03 Nov 2014 08:34:13 -0800 (PST) X-Received: by 10.112.14.69 with SMTP id n5mr51866779lbc.34.1415032453087; Mon, 03 Nov 2014 08:34:13 -0800 (PST) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.112.141.34 with SMTP id rl2csp17553lbb; Mon, 3 Nov 2014 08:34:12 -0800 (PST) X-Received: by 10.68.209.230 with SMTP id mp6mr43784704pbc.27.1415032451287; Mon, 03 Nov 2014 08:34:11 -0800 (PST) Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id oe6si15603095pbc.156.2014.11.03.08.34.10 for ; Mon, 03 Nov 2014 08:34:11 -0800 (PST) Received-SPF: none (google.com: devicetree-owner@vger.kernel.org does not designate permitted sender hosts) client-ip=209.132.180.67; Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752351AbaKCQeH (ORCPT + 4 others); Mon, 3 Nov 2014 11:34:07 -0500 Received: from comal.ext.ti.com ([198.47.26.152]:58712 "EHLO comal.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752091AbaKCQdF (ORCPT ); Mon, 3 Nov 2014 11:33:05 -0500 Received: from dflxv15.itg.ti.com ([128.247.5.124]) by comal.ext.ti.com (8.13.7/8.13.7) with ESMTP id sA3GX0Ml030832; Mon, 3 Nov 2014 10:33:01 -0600 Received: from DLEE70.ent.ti.com (dlee70.ent.ti.com [157.170.170.113]) by dflxv15.itg.ti.com (8.14.3/8.13.8) with ESMTP id sA3GX0Gk008627; Mon, 3 Nov 2014 10:33:00 -0600 Received: from dlep32.itg.ti.com (157.170.170.100) by DLEE70.ent.ti.com (157.170.170.113) with Microsoft SMTP Server id 14.3.174.1; Mon, 3 Nov 2014 10:33:00 -0600 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by dlep32.itg.ti.com (8.14.3/8.13.8) with ESMTP id sA3GWxpX012552; Mon, 3 Nov 2014 10:33:00 -0600 From: Felipe Balbi To: , CC: Linux Kernel Mailing List , Linux OMAP Mailing List , , , George Cherian , , Felipe Balbi Subject: [PATCH 2/4] extcon: gpio: Add dt support for the driver. Date: Mon, 3 Nov 2014 10:32:28 -0600 Message-ID: <1415032350-8459-3-git-send-email-balbi@ti.com> X-Mailer: git-send-email 2.1.0.GIT In-Reply-To: <1415032350-8459-1-git-send-email-balbi@ti.com> References: <1415032350-8459-1-git-send-email-balbi@ti.com> MIME-Version: 1.0 Sender: devicetree-owner@vger.kernel.org Precedence: list List-ID: X-Mailing-List: devicetree@vger.kernel.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: balbi@ti.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.215.50 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , From: George Cherian Add device tree support to extcon-gpio driver. Add devicetree binding documentation Cc: devicetree@vger.kernel.org Signed-off-by: George Cherian Signed-off-by: Sekhar Nori Signed-off-by: Felipe Balbi --- .../devicetree/bindings/extcon/extcon-gpio.txt | 21 ++++++ drivers/extcon/extcon-gpio.c | 75 +++++++++++++++------- 2 files changed, 73 insertions(+), 23 deletions(-) create mode 100644 Documentation/devicetree/bindings/extcon/extcon-gpio.txt diff --git a/Documentation/devicetree/bindings/extcon/extcon-gpio.txt b/Documentation/devicetree/bindings/extcon/extcon-gpio.txt new file mode 100644 index 0000000..5fe6846 --- /dev/null +++ b/Documentation/devicetree/bindings/extcon/extcon-gpio.txt @@ -0,0 +1,21 @@ +GPIO based EXTCON + +EXTCON GPIO +----------- + +Required Properties: + - compatible: should be: + * "linux,extcon-gpio" + - gpios: specifies the gpio pin used. + +Optional Properties: + - debounce: Debounce time for GPIO IRQ in ms + + +Eg: + + extcon1: am43_usbid_extcon1 { + compatible = "linux,extcon-gpio"; + gpios = <&gpio3 12 GPIO_ACTIVE_HIGH>; + debounce = <20>; + }; diff --git a/drivers/extcon/extcon-gpio.c b/drivers/extcon/extcon-gpio.c index 70e3fc7..9571e1f 100644 --- a/drivers/extcon/extcon-gpio.c +++ b/drivers/extcon/extcon-gpio.c @@ -25,8 +25,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -80,16 +82,12 @@ static ssize_t extcon_gpio_print_state(struct extcon_dev *edev, char *buf) static int gpio_extcon_probe(struct platform_device *pdev) { + struct device_node *np = pdev->dev.of_node; struct gpio_extcon_platform_data *pdata = dev_get_platdata(&pdev->dev); struct gpio_extcon_data *extcon_data; int ret; - - if (!pdata) - return -EBUSY; - if (!pdata->irq_flags) { - dev_err(&pdev->dev, "IRQ flag is not specified.\n"); - return -EINVAL; - } + unsigned int irq_flags; + unsigned int debounce = 0; extcon_data = devm_kzalloc(&pdev->dev, sizeof(struct gpio_extcon_data), GFP_KERNEL); @@ -101,26 +99,51 @@ static int gpio_extcon_probe(struct platform_device *pdev) dev_err(&pdev->dev, "failed to allocate extcon device\n"); return -ENOMEM; } - extcon_data->edev->name = pdata->name; - - extcon_data->gpiod = gpio_to_desc(pdata->gpio); - extcon_data->state_on = pdata->state_on; - extcon_data->state_off = pdata->state_off; - extcon_data->check_on_resume = pdata->check_on_resume; - if (pdata->state_on && pdata->state_off) - extcon_data->edev->print_state = extcon_gpio_print_state; - ret = devm_gpio_request_one(&pdev->dev, pdata->gpio, GPIOF_DIR_IN, - pdev->name); - if (ret < 0) - return ret; + if (np) { + int irq; + + extcon_data->gpiod = devm_gpiod_get(&pdev->dev, NULL); + if (IS_ERR(extcon_data->gpiod)) + return PTR_ERR(extcon_data->gpiod); + + extcon_data->edev->name = np->name; + extcon_data->edev->dev.parent = &pdev->dev; + of_property_read_u32(np, "debounce", &debounce); + irq = gpiod_to_irq(extcon_data->gpiod); + irq_flags = irq_get_trigger_type(irq); + } else { + if (!pdata) + return -EBUSY; + + if (!pdata->irq_flags) { + dev_err(&pdev->dev, "IRQ flag is not specified.\n"); + return -EINVAL; + } + + extcon_data->edev->name = pdata->name; + + extcon_data->gpiod = gpio_to_desc(pdata->gpio); + extcon_data->state_on = pdata->state_on; + extcon_data->state_off = pdata->state_off; + extcon_data->check_on_resume = pdata->check_on_resume; + if (pdata->state_on && pdata->state_off) + extcon_data->edev->print_state = extcon_gpio_print_state; + + ret = devm_gpio_request_one(&pdev->dev, pdata->gpio, GPIOF_DIR_IN, + pdev->name); + if (ret < 0) + return ret; + irq_flags = pdata->irq_flags; + debounce = pdata->debounce; + } - if (pdata->debounce) { + if (debounce) { ret = gpiod_set_debounce(extcon_data->gpiod, - pdata->debounce * 1000); + debounce * 1000); if (ret < 0) extcon_data->debounce_jiffies = - msecs_to_jiffies(pdata->debounce); + msecs_to_jiffies(debounce); } ret = devm_extcon_dev_register(&pdev->dev, extcon_data->edev); @@ -134,7 +157,7 @@ static int gpio_extcon_probe(struct platform_device *pdev) return extcon_data->irq; ret = request_any_context_irq(extcon_data->irq, gpio_irq_handler, - pdata->irq_flags, pdev->name, + irq_flags, pdev->name, extcon_data); if (ret < 0) return ret; @@ -172,6 +195,11 @@ static int gpio_extcon_resume(struct device *dev) static SIMPLE_DEV_PM_OPS(gpio_extcon_pm_ops, NULL, gpio_extcon_resume); +static struct of_device_id of_extcon_gpio_match_tbl[] = { + { .compatible = "linux,extcon-gpio", }, + { /* end */ } +}; + static struct platform_driver gpio_extcon_driver = { .probe = gpio_extcon_probe, .remove = gpio_extcon_remove, @@ -179,6 +207,7 @@ static struct platform_driver gpio_extcon_driver = { .name = "extcon-gpio", .owner = THIS_MODULE, .pm = &gpio_extcon_pm_ops, + .of_match_table = of_extcon_gpio_match_tbl, }, };