From: Chunfeng Yun <chunfeng.yun@mediatek.com>
To: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: <linux-usb@vger.kernel.org>, <linux-samsung-soc@vger.kernel.org>,
<linux-mediatek@lists.infradead.org>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Krzysztof Kozlowski <krzk@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
Maxime Ripard <mripard@kernel.org>, Chen-Yu Tsai <wens@csie.org>,
Andy Gross <agross@kernel.org>,
Bjorn Andersson <bjorn.andersson@linaro.org>,
"Stefan Agner" <stefan@agner.ch>,
Linus Walleij <linus.walleij@linaro.org>,
Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Subject: Re: [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors
Date: Thu, 12 Dec 2019 10:10:00 +0800 [thread overview]
Message-ID: <1576116600.21256.3.camel@mhfsdcap03> (raw)
In-Reply-To: <20191211145226.25074-1-m.szyprowski@samsung.com>
On Wed, 2019-12-11 at 15:52 +0100, Marek Szyprowski wrote:
> From: Linus Walleij <linus.walleij@linaro.org>
>
> This converts the USB3503 to pick GPIO descriptors from the
> device tree instead of iteratively picking out GPIO number
> references and then referencing these from the global GPIO
> numberspace.
>
> The USB3503 is only used from device tree among the in-tree
> platforms. If board files would still desire to use it they can
> provide machine descriptor tables.
>
> Make sure to preserve semantics such as the reset delay
> introduced by Stefan.
>
> Cc: Chunfeng Yun <chunfeng.yun@mediatek.com>
> Cc: Marek Szyprowski <m.szyprowski@samsung.com>
> Cc: Stefan Agner <stefan@agner.ch>
> Cc: Krzysztof Kozlowski <krzk@kernel.org>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> [mszyprow: invert the logic behind reset GPIO line]
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> drivers/usb/misc/usb3503.c | 94 ++++++++++-----------------
> include/linux/platform_data/usb3503.h | 3 -
> 2 files changed, 35 insertions(+), 62 deletions(-)
>
> diff --git a/drivers/usb/misc/usb3503.c b/drivers/usb/misc/usb3503.c
> index 72f39a9751b5..116bd789e568 100644
> --- a/drivers/usb/misc/usb3503.c
> +++ b/drivers/usb/misc/usb3503.c
> @@ -7,11 +7,10 @@
>
> #include <linux/clk.h>
> #include <linux/i2c.h>
> -#include <linux/gpio.h>
> +#include <linux/gpio/consumer.h>
> #include <linux/delay.h>
> #include <linux/slab.h>
> #include <linux/module.h>
> -#include <linux/of_gpio.h>
> #include <linux/platform_device.h>
> #include <linux/platform_data/usb3503.h>
> #include <linux/regmap.h>
> @@ -47,19 +46,19 @@ struct usb3503 {
> struct device *dev;
> struct clk *clk;
> u8 port_off_mask;
> - int gpio_intn;
> - int gpio_reset;
> - int gpio_connect;
> + struct gpio_desc *intn;
> + struct gpio_desc *reset;
> + struct gpio_desc *connect;
> bool secondary_ref_clk;
> };
>
> static int usb3503_reset(struct usb3503 *hub, int state)
> {
> - if (!state && gpio_is_valid(hub->gpio_connect))
> - gpio_set_value_cansleep(hub->gpio_connect, 0);
> + if (!state && hub->connect)
> + gpiod_set_value_cansleep(hub->connect, 0);
>
> - if (gpio_is_valid(hub->gpio_reset))
> - gpio_set_value_cansleep(hub->gpio_reset, state);
> + if (hub->reset)
> + gpiod_set_value_cansleep(hub->reset, !state);
What about preparing another patch for @state before this path?
>
> /* Wait T_HUBINIT == 4ms for hub logic to stabilize */
> if (state)
> @@ -115,8 +114,8 @@ static int usb3503_connect(struct usb3503 *hub)
> }
> }
>
> - if (gpio_is_valid(hub->gpio_connect))
> - gpio_set_value_cansleep(hub->gpio_connect, 1);
> + if (hub->connect)
> + gpiod_set_value_cansleep(hub->connect, 1);
>
> hub->mode = USB3503_MODE_HUB;
> dev_info(dev, "switched to HUB mode\n");
> @@ -163,13 +162,11 @@ static int usb3503_probe(struct usb3503 *hub)
> int err;
> u32 mode = USB3503_MODE_HUB;
> const u32 *property;
> + enum gpiod_flags flags;
> int len;
>
> if (pdata) {
> hub->port_off_mask = pdata->port_off_mask;
> - hub->gpio_intn = pdata->gpio_intn;
> - hub->gpio_connect = pdata->gpio_connect;
> - hub->gpio_reset = pdata->gpio_reset;
> hub->mode = pdata->initial_mode;
> } else if (np) {
> u32 rate = 0;
> @@ -230,59 +227,38 @@ static int usb3503_probe(struct usb3503 *hub)
> }
> }
>
> - hub->gpio_intn = of_get_named_gpio(np, "intn-gpios", 0);
> - if (hub->gpio_intn == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> - hub->gpio_connect = of_get_named_gpio(np, "connect-gpios", 0);
> - if (hub->gpio_connect == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> - hub->gpio_reset = of_get_named_gpio(np, "reset-gpios", 0);
> - if (hub->gpio_reset == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> of_property_read_u32(np, "initial-mode", &mode);
> hub->mode = mode;
> }
>
> - if (hub->port_off_mask && !hub->regmap)
> - dev_err(dev, "Ports disabled with no control interface\n");
> -
> - if (gpio_is_valid(hub->gpio_intn)) {
> - int val = hub->secondary_ref_clk ? GPIOF_OUT_INIT_LOW :
> - GPIOF_OUT_INIT_HIGH;
> - err = devm_gpio_request_one(dev, hub->gpio_intn, val,
> - "usb3503 intn");
> - if (err) {
> - dev_err(dev,
> - "unable to request GPIO %d as interrupt pin (%d)\n",
> - hub->gpio_intn, err);
> - return err;
> - }
> - }
> -
> - if (gpio_is_valid(hub->gpio_connect)) {
> - err = devm_gpio_request_one(dev, hub->gpio_connect,
> - GPIOF_OUT_INIT_LOW, "usb3503 connect");
> - if (err) {
> - dev_err(dev,
> - "unable to request GPIO %d as connect pin (%d)\n",
> - hub->gpio_connect, err);
> - return err;
> - }
> - }
> -
> - if (gpio_is_valid(hub->gpio_reset)) {
> - err = devm_gpio_request_one(dev, hub->gpio_reset,
> - GPIOF_OUT_INIT_LOW, "usb3503 reset");
> + if (hub->secondary_ref_clk)
> + flags = GPIOD_OUT_LOW;
> + else
> + flags = GPIOD_OUT_HIGH;
> + hub->intn = devm_gpiod_get_optional(dev, "intn", flags);
> + if (IS_ERR(hub->intn))
> + return PTR_ERR(hub->intn);
> + if (hub->intn)
> + gpiod_set_consumer_name(hub->intn, "usb3503 intn");
> +
> + hub->connect = devm_gpiod_get_optional(dev, "connect", GPIOD_OUT_LOW);
> + if (IS_ERR(hub->connect))
> + return PTR_ERR(hub->connect);
> + if (hub->connect)
> + gpiod_set_consumer_name(hub->connect, "usb3503 connect");
> +
> + hub->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
> + if (IS_ERR(hub->reset))
> + return PTR_ERR(hub->reset);
> + if (hub->reset) {
> /* Datasheet defines a hardware reset to be at least 100us */
> usleep_range(100, 10000);
> - if (err) {
> - dev_err(dev,
> - "unable to request GPIO %d as reset pin (%d)\n",
> - hub->gpio_reset, err);
> - return err;
> - }
> + gpiod_set_consumer_name(hub->reset, "usb3503 reset");
> }
>
> + if (hub->port_off_mask && !hub->regmap)
> + dev_err(dev, "Ports disabled with no control interface\n");
> +
> usb3503_switch_mode(hub, hub->mode);
>
> dev_info(dev, "%s: probed in %s mode\n", __func__,
> diff --git a/include/linux/platform_data/usb3503.h b/include/linux/platform_data/usb3503.h
> index e049d51c1353..d01ef97ddf36 100644
> --- a/include/linux/platform_data/usb3503.h
> +++ b/include/linux/platform_data/usb3503.h
> @@ -17,9 +17,6 @@ enum usb3503_mode {
> struct usb3503_platform_data {
> enum usb3503_mode initial_mode;
> u8 port_off_mask;
> - int gpio_intn;
> - int gpio_connect;
> - int gpio_reset;
> };
>
> #endif
WARNING: multiple messages have this Message-ID (diff)
From: Chunfeng Yun <chunfeng.yun@mediatek.com>
To: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Stefan Agner <stefan@agner.ch>,
linux-samsung-soc@vger.kernel.org,
Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Linus Walleij <linus.walleij@linaro.org>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Krzysztof Kozlowski <krzk@kernel.org>,
Bjorn Andersson <bjorn.andersson@linaro.org>,
Chen-Yu Tsai <wens@csie.org>, Andy Gross <agross@kernel.org>,
linux-mediatek@lists.infradead.org,
Maxime Ripard <mripard@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors
Date: Thu, 12 Dec 2019 10:10:00 +0800 [thread overview]
Message-ID: <1576116600.21256.3.camel@mhfsdcap03> (raw)
In-Reply-To: <20191211145226.25074-1-m.szyprowski@samsung.com>
On Wed, 2019-12-11 at 15:52 +0100, Marek Szyprowski wrote:
> From: Linus Walleij <linus.walleij@linaro.org>
>
> This converts the USB3503 to pick GPIO descriptors from the
> device tree instead of iteratively picking out GPIO number
> references and then referencing these from the global GPIO
> numberspace.
>
> The USB3503 is only used from device tree among the in-tree
> platforms. If board files would still desire to use it they can
> provide machine descriptor tables.
>
> Make sure to preserve semantics such as the reset delay
> introduced by Stefan.
>
> Cc: Chunfeng Yun <chunfeng.yun@mediatek.com>
> Cc: Marek Szyprowski <m.szyprowski@samsung.com>
> Cc: Stefan Agner <stefan@agner.ch>
> Cc: Krzysztof Kozlowski <krzk@kernel.org>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> [mszyprow: invert the logic behind reset GPIO line]
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> drivers/usb/misc/usb3503.c | 94 ++++++++++-----------------
> include/linux/platform_data/usb3503.h | 3 -
> 2 files changed, 35 insertions(+), 62 deletions(-)
>
> diff --git a/drivers/usb/misc/usb3503.c b/drivers/usb/misc/usb3503.c
> index 72f39a9751b5..116bd789e568 100644
> --- a/drivers/usb/misc/usb3503.c
> +++ b/drivers/usb/misc/usb3503.c
> @@ -7,11 +7,10 @@
>
> #include <linux/clk.h>
> #include <linux/i2c.h>
> -#include <linux/gpio.h>
> +#include <linux/gpio/consumer.h>
> #include <linux/delay.h>
> #include <linux/slab.h>
> #include <linux/module.h>
> -#include <linux/of_gpio.h>
> #include <linux/platform_device.h>
> #include <linux/platform_data/usb3503.h>
> #include <linux/regmap.h>
> @@ -47,19 +46,19 @@ struct usb3503 {
> struct device *dev;
> struct clk *clk;
> u8 port_off_mask;
> - int gpio_intn;
> - int gpio_reset;
> - int gpio_connect;
> + struct gpio_desc *intn;
> + struct gpio_desc *reset;
> + struct gpio_desc *connect;
> bool secondary_ref_clk;
> };
>
> static int usb3503_reset(struct usb3503 *hub, int state)
> {
> - if (!state && gpio_is_valid(hub->gpio_connect))
> - gpio_set_value_cansleep(hub->gpio_connect, 0);
> + if (!state && hub->connect)
> + gpiod_set_value_cansleep(hub->connect, 0);
>
> - if (gpio_is_valid(hub->gpio_reset))
> - gpio_set_value_cansleep(hub->gpio_reset, state);
> + if (hub->reset)
> + gpiod_set_value_cansleep(hub->reset, !state);
What about preparing another patch for @state before this path?
>
> /* Wait T_HUBINIT == 4ms for hub logic to stabilize */
> if (state)
> @@ -115,8 +114,8 @@ static int usb3503_connect(struct usb3503 *hub)
> }
> }
>
> - if (gpio_is_valid(hub->gpio_connect))
> - gpio_set_value_cansleep(hub->gpio_connect, 1);
> + if (hub->connect)
> + gpiod_set_value_cansleep(hub->connect, 1);
>
> hub->mode = USB3503_MODE_HUB;
> dev_info(dev, "switched to HUB mode\n");
> @@ -163,13 +162,11 @@ static int usb3503_probe(struct usb3503 *hub)
> int err;
> u32 mode = USB3503_MODE_HUB;
> const u32 *property;
> + enum gpiod_flags flags;
> int len;
>
> if (pdata) {
> hub->port_off_mask = pdata->port_off_mask;
> - hub->gpio_intn = pdata->gpio_intn;
> - hub->gpio_connect = pdata->gpio_connect;
> - hub->gpio_reset = pdata->gpio_reset;
> hub->mode = pdata->initial_mode;
> } else if (np) {
> u32 rate = 0;
> @@ -230,59 +227,38 @@ static int usb3503_probe(struct usb3503 *hub)
> }
> }
>
> - hub->gpio_intn = of_get_named_gpio(np, "intn-gpios", 0);
> - if (hub->gpio_intn == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> - hub->gpio_connect = of_get_named_gpio(np, "connect-gpios", 0);
> - if (hub->gpio_connect == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> - hub->gpio_reset = of_get_named_gpio(np, "reset-gpios", 0);
> - if (hub->gpio_reset == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> of_property_read_u32(np, "initial-mode", &mode);
> hub->mode = mode;
> }
>
> - if (hub->port_off_mask && !hub->regmap)
> - dev_err(dev, "Ports disabled with no control interface\n");
> -
> - if (gpio_is_valid(hub->gpio_intn)) {
> - int val = hub->secondary_ref_clk ? GPIOF_OUT_INIT_LOW :
> - GPIOF_OUT_INIT_HIGH;
> - err = devm_gpio_request_one(dev, hub->gpio_intn, val,
> - "usb3503 intn");
> - if (err) {
> - dev_err(dev,
> - "unable to request GPIO %d as interrupt pin (%d)\n",
> - hub->gpio_intn, err);
> - return err;
> - }
> - }
> -
> - if (gpio_is_valid(hub->gpio_connect)) {
> - err = devm_gpio_request_one(dev, hub->gpio_connect,
> - GPIOF_OUT_INIT_LOW, "usb3503 connect");
> - if (err) {
> - dev_err(dev,
> - "unable to request GPIO %d as connect pin (%d)\n",
> - hub->gpio_connect, err);
> - return err;
> - }
> - }
> -
> - if (gpio_is_valid(hub->gpio_reset)) {
> - err = devm_gpio_request_one(dev, hub->gpio_reset,
> - GPIOF_OUT_INIT_LOW, "usb3503 reset");
> + if (hub->secondary_ref_clk)
> + flags = GPIOD_OUT_LOW;
> + else
> + flags = GPIOD_OUT_HIGH;
> + hub->intn = devm_gpiod_get_optional(dev, "intn", flags);
> + if (IS_ERR(hub->intn))
> + return PTR_ERR(hub->intn);
> + if (hub->intn)
> + gpiod_set_consumer_name(hub->intn, "usb3503 intn");
> +
> + hub->connect = devm_gpiod_get_optional(dev, "connect", GPIOD_OUT_LOW);
> + if (IS_ERR(hub->connect))
> + return PTR_ERR(hub->connect);
> + if (hub->connect)
> + gpiod_set_consumer_name(hub->connect, "usb3503 connect");
> +
> + hub->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
> + if (IS_ERR(hub->reset))
> + return PTR_ERR(hub->reset);
> + if (hub->reset) {
> /* Datasheet defines a hardware reset to be at least 100us */
> usleep_range(100, 10000);
> - if (err) {
> - dev_err(dev,
> - "unable to request GPIO %d as reset pin (%d)\n",
> - hub->gpio_reset, err);
> - return err;
> - }
> + gpiod_set_consumer_name(hub->reset, "usb3503 reset");
> }
>
> + if (hub->port_off_mask && !hub->regmap)
> + dev_err(dev, "Ports disabled with no control interface\n");
> +
> usb3503_switch_mode(hub, hub->mode);
>
> dev_info(dev, "%s: probed in %s mode\n", __func__,
> diff --git a/include/linux/platform_data/usb3503.h b/include/linux/platform_data/usb3503.h
> index e049d51c1353..d01ef97ddf36 100644
> --- a/include/linux/platform_data/usb3503.h
> +++ b/include/linux/platform_data/usb3503.h
> @@ -17,9 +17,6 @@ enum usb3503_mode {
> struct usb3503_platform_data {
> enum usb3503_mode initial_mode;
> u8 port_off_mask;
> - int gpio_intn;
> - int gpio_connect;
> - int gpio_reset;
> };
>
> #endif
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
WARNING: multiple messages have this Message-ID (diff)
From: Chunfeng Yun <chunfeng.yun@mediatek.com>
To: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: Stefan Agner <stefan@agner.ch>,
linux-samsung-soc@vger.kernel.org,
Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Linus Walleij <linus.walleij@linaro.org>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
Krzysztof Kozlowski <krzk@kernel.org>,
Bjorn Andersson <bjorn.andersson@linaro.org>,
Chen-Yu Tsai <wens@csie.org>, Andy Gross <agross@kernel.org>,
linux-mediatek@lists.infradead.org,
Maxime Ripard <mripard@kernel.org>,
Matthias Brugger <matthias.bgg@gmail.com>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors
Date: Thu, 12 Dec 2019 10:10:00 +0800 [thread overview]
Message-ID: <1576116600.21256.3.camel@mhfsdcap03> (raw)
In-Reply-To: <20191211145226.25074-1-m.szyprowski@samsung.com>
On Wed, 2019-12-11 at 15:52 +0100, Marek Szyprowski wrote:
> From: Linus Walleij <linus.walleij@linaro.org>
>
> This converts the USB3503 to pick GPIO descriptors from the
> device tree instead of iteratively picking out GPIO number
> references and then referencing these from the global GPIO
> numberspace.
>
> The USB3503 is only used from device tree among the in-tree
> platforms. If board files would still desire to use it they can
> provide machine descriptor tables.
>
> Make sure to preserve semantics such as the reset delay
> introduced by Stefan.
>
> Cc: Chunfeng Yun <chunfeng.yun@mediatek.com>
> Cc: Marek Szyprowski <m.szyprowski@samsung.com>
> Cc: Stefan Agner <stefan@agner.ch>
> Cc: Krzysztof Kozlowski <krzk@kernel.org>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> [mszyprow: invert the logic behind reset GPIO line]
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> ---
> drivers/usb/misc/usb3503.c | 94 ++++++++++-----------------
> include/linux/platform_data/usb3503.h | 3 -
> 2 files changed, 35 insertions(+), 62 deletions(-)
>
> diff --git a/drivers/usb/misc/usb3503.c b/drivers/usb/misc/usb3503.c
> index 72f39a9751b5..116bd789e568 100644
> --- a/drivers/usb/misc/usb3503.c
> +++ b/drivers/usb/misc/usb3503.c
> @@ -7,11 +7,10 @@
>
> #include <linux/clk.h>
> #include <linux/i2c.h>
> -#include <linux/gpio.h>
> +#include <linux/gpio/consumer.h>
> #include <linux/delay.h>
> #include <linux/slab.h>
> #include <linux/module.h>
> -#include <linux/of_gpio.h>
> #include <linux/platform_device.h>
> #include <linux/platform_data/usb3503.h>
> #include <linux/regmap.h>
> @@ -47,19 +46,19 @@ struct usb3503 {
> struct device *dev;
> struct clk *clk;
> u8 port_off_mask;
> - int gpio_intn;
> - int gpio_reset;
> - int gpio_connect;
> + struct gpio_desc *intn;
> + struct gpio_desc *reset;
> + struct gpio_desc *connect;
> bool secondary_ref_clk;
> };
>
> static int usb3503_reset(struct usb3503 *hub, int state)
> {
> - if (!state && gpio_is_valid(hub->gpio_connect))
> - gpio_set_value_cansleep(hub->gpio_connect, 0);
> + if (!state && hub->connect)
> + gpiod_set_value_cansleep(hub->connect, 0);
>
> - if (gpio_is_valid(hub->gpio_reset))
> - gpio_set_value_cansleep(hub->gpio_reset, state);
> + if (hub->reset)
> + gpiod_set_value_cansleep(hub->reset, !state);
What about preparing another patch for @state before this path?
>
> /* Wait T_HUBINIT == 4ms for hub logic to stabilize */
> if (state)
> @@ -115,8 +114,8 @@ static int usb3503_connect(struct usb3503 *hub)
> }
> }
>
> - if (gpio_is_valid(hub->gpio_connect))
> - gpio_set_value_cansleep(hub->gpio_connect, 1);
> + if (hub->connect)
> + gpiod_set_value_cansleep(hub->connect, 1);
>
> hub->mode = USB3503_MODE_HUB;
> dev_info(dev, "switched to HUB mode\n");
> @@ -163,13 +162,11 @@ static int usb3503_probe(struct usb3503 *hub)
> int err;
> u32 mode = USB3503_MODE_HUB;
> const u32 *property;
> + enum gpiod_flags flags;
> int len;
>
> if (pdata) {
> hub->port_off_mask = pdata->port_off_mask;
> - hub->gpio_intn = pdata->gpio_intn;
> - hub->gpio_connect = pdata->gpio_connect;
> - hub->gpio_reset = pdata->gpio_reset;
> hub->mode = pdata->initial_mode;
> } else if (np) {
> u32 rate = 0;
> @@ -230,59 +227,38 @@ static int usb3503_probe(struct usb3503 *hub)
> }
> }
>
> - hub->gpio_intn = of_get_named_gpio(np, "intn-gpios", 0);
> - if (hub->gpio_intn == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> - hub->gpio_connect = of_get_named_gpio(np, "connect-gpios", 0);
> - if (hub->gpio_connect == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> - hub->gpio_reset = of_get_named_gpio(np, "reset-gpios", 0);
> - if (hub->gpio_reset == -EPROBE_DEFER)
> - return -EPROBE_DEFER;
> of_property_read_u32(np, "initial-mode", &mode);
> hub->mode = mode;
> }
>
> - if (hub->port_off_mask && !hub->regmap)
> - dev_err(dev, "Ports disabled with no control interface\n");
> -
> - if (gpio_is_valid(hub->gpio_intn)) {
> - int val = hub->secondary_ref_clk ? GPIOF_OUT_INIT_LOW :
> - GPIOF_OUT_INIT_HIGH;
> - err = devm_gpio_request_one(dev, hub->gpio_intn, val,
> - "usb3503 intn");
> - if (err) {
> - dev_err(dev,
> - "unable to request GPIO %d as interrupt pin (%d)\n",
> - hub->gpio_intn, err);
> - return err;
> - }
> - }
> -
> - if (gpio_is_valid(hub->gpio_connect)) {
> - err = devm_gpio_request_one(dev, hub->gpio_connect,
> - GPIOF_OUT_INIT_LOW, "usb3503 connect");
> - if (err) {
> - dev_err(dev,
> - "unable to request GPIO %d as connect pin (%d)\n",
> - hub->gpio_connect, err);
> - return err;
> - }
> - }
> -
> - if (gpio_is_valid(hub->gpio_reset)) {
> - err = devm_gpio_request_one(dev, hub->gpio_reset,
> - GPIOF_OUT_INIT_LOW, "usb3503 reset");
> + if (hub->secondary_ref_clk)
> + flags = GPIOD_OUT_LOW;
> + else
> + flags = GPIOD_OUT_HIGH;
> + hub->intn = devm_gpiod_get_optional(dev, "intn", flags);
> + if (IS_ERR(hub->intn))
> + return PTR_ERR(hub->intn);
> + if (hub->intn)
> + gpiod_set_consumer_name(hub->intn, "usb3503 intn");
> +
> + hub->connect = devm_gpiod_get_optional(dev, "connect", GPIOD_OUT_LOW);
> + if (IS_ERR(hub->connect))
> + return PTR_ERR(hub->connect);
> + if (hub->connect)
> + gpiod_set_consumer_name(hub->connect, "usb3503 connect");
> +
> + hub->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
> + if (IS_ERR(hub->reset))
> + return PTR_ERR(hub->reset);
> + if (hub->reset) {
> /* Datasheet defines a hardware reset to be at least 100us */
> usleep_range(100, 10000);
> - if (err) {
> - dev_err(dev,
> - "unable to request GPIO %d as reset pin (%d)\n",
> - hub->gpio_reset, err);
> - return err;
> - }
> + gpiod_set_consumer_name(hub->reset, "usb3503 reset");
> }
>
> + if (hub->port_off_mask && !hub->regmap)
> + dev_err(dev, "Ports disabled with no control interface\n");
> +
> usb3503_switch_mode(hub, hub->mode);
>
> dev_info(dev, "%s: probed in %s mode\n", __func__,
> diff --git a/include/linux/platform_data/usb3503.h b/include/linux/platform_data/usb3503.h
> index e049d51c1353..d01ef97ddf36 100644
> --- a/include/linux/platform_data/usb3503.h
> +++ b/include/linux/platform_data/usb3503.h
> @@ -17,9 +17,6 @@ enum usb3503_mode {
> struct usb3503_platform_data {
> enum usb3503_mode initial_mode;
> u8 port_off_mask;
> - int gpio_intn;
> - int gpio_connect;
> - int gpio_reset;
> };
>
> #endif
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-12-12 2:10 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20191211145104eucas1p1ce04a26eebcd4c22d72f204e7ae0aa5a@eucas1p1.samsung.com>
2019-12-11 14:50 ` [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver Marek Szyprowski
2019-12-11 14:50 ` Marek Szyprowski
2019-12-11 14:50 ` Marek Szyprowski
[not found] ` <CGME20191211145203eucas1p2aa9445d7b778451ff1da0e552ccdae18@eucas1p2.samsung.com>
2019-12-11 14:51 ` [PATCH v2 1/4] ARM: dts: exynos: Correct USB3503 GPIOs polarity Marek Szyprowski
2019-12-11 14:51 ` Marek Szyprowski
2019-12-11 14:51 ` Marek Szyprowski
[not found] ` <CGME20191211145213eucas1p2c438f848ba705fa407331bb31b03b626@eucas1p2.samsung.com>
2019-12-11 14:52 ` [PATCH v2 2/4] ARM: dts: qcom: " Marek Szyprowski
2019-12-11 14:52 ` Marek Szyprowski
2019-12-11 14:52 ` Marek Szyprowski
2019-12-18 5:42 ` Bjorn Andersson
2019-12-18 5:42 ` Bjorn Andersson
2019-12-18 5:42 ` Bjorn Andersson
[not found] ` <CGME20191211145222eucas1p1d761af59e04017ddadbdbd1cceb59b1f@eucas1p1.samsung.com>
2019-12-11 14:52 ` [PATCH v2 3/4] ARM: dts: sun8i: a83t: " Marek Szyprowski
2019-12-11 14:52 ` Marek Szyprowski
2019-12-11 14:52 ` Marek Szyprowski
2019-12-13 8:08 ` Chen-Yu Tsai
2019-12-13 8:08 ` Chen-Yu Tsai
2019-12-13 8:08 ` Chen-Yu Tsai
2019-12-17 8:37 ` Maxime Ripard
2019-12-17 8:37 ` Maxime Ripard
2019-12-17 8:37 ` Maxime Ripard
[not found] ` <CGME20191211145231eucas1p29d4e0ed105274c79682b48a613b45904@eucas1p2.samsung.com>
2019-12-11 14:52 ` [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors Marek Szyprowski
2019-12-11 14:52 ` Marek Szyprowski
2019-12-11 14:52 ` Marek Szyprowski
2019-12-12 2:10 ` Chunfeng Yun [this message]
2019-12-12 2:10 ` Chunfeng Yun
2019-12-12 2:10 ` Chunfeng Yun
2019-12-12 8:23 ` Marek Szyprowski
2019-12-12 8:23 ` Marek Szyprowski
2019-12-12 8:23 ` Marek Szyprowski
2019-12-13 16:04 ` [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver Linus Walleij
2019-12-13 16:04 ` Linus Walleij
2019-12-13 16:04 ` Linus Walleij
2019-12-11 14:46 [PATCH v2 0/4] " Marek Szyprowski
[not found] ` <CGME20191211144650eucas1p221857c5e96ee4b5730fad80e105933ac@eucas1p2.samsung.com>
2019-12-11 14:46 ` [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors Marek Szyprowski
2019-12-11 14:46 ` Marek Szyprowski
2019-12-11 14:46 ` Marek Szyprowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1576116600.21256.3.camel@mhfsdcap03 \
--to=chunfeng.yun@mediatek.com \
--cc=agross@kernel.org \
--cc=b.zolnierkie@samsung.com \
--cc=bjorn.andersson@linaro.org \
--cc=gregkh@linuxfoundation.org \
--cc=krzk@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=matthias.bgg@gmail.com \
--cc=mripard@kernel.org \
--cc=stefan@agner.ch \
--cc=wens@csie.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.