* [PATCH v2 1/4] ARM: dts: exynos: Correct USB3503 GPIOs polarity
2019-12-11 14:50 ` [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver Marek Szyprowski
@ 2019-12-11 14:51 ` Marek Szyprowski
2019-12-11 14:52 ` [PATCH v2 2/4] ARM: dts: qcom: " Marek Szyprowski
` (3 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Marek Szyprowski @ 2019-12-11 14:51 UTC (permalink / raw)
To: linux-usb, linux-samsung-soc, linux-mediatek, linux-kernel,
linux-arm-kernel
Cc: Stefan Agner, Bartlomiej Zolnierkiewicz, Greg Kroah-Hartman,
Linus Walleij, Maxime Ripard, Bjorn Andersson, Chunfeng Yun,
Chen-Yu Tsai, Andy Gross, Krzysztof Kozlowski, Matthias Brugger,
Marek Szyprowski
Current USB3503 driver ignores GPIO polarity and always operates as if the
GPIO lines were flagged as ACTIVE_HIGH. Fix the polarity for the existing
USB3503 chip applications to match the chip specification and common
convention for naming the pins. The only pin, which has to be ACTIVE_LOW
is the reset pin. The remaining are ACTIVE_HIGH. This change allows later
to fix the USB3503 driver to properly use generic GPIO bindings and read
polarity from DT.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
arch/arm/boot/dts/exynos4412-odroid-common.dtsi | 2 +-
arch/arm/boot/dts/exynos5250-arndale.dts | 2 +-
arch/arm/boot/dts/exynos5410-odroidxu.dts | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
index ea55f377d17c..9c39e82e4ecb 100644
--- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
+++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi
@@ -267,7 +267,7 @@
intn-gpios = <&gpx3 0 GPIO_ACTIVE_HIGH>;
connect-gpios = <&gpx3 4 GPIO_ACTIVE_HIGH>;
- reset-gpios = <&gpx3 5 GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpx3 5 GPIO_ACTIVE_LOW>;
initial-mode = <1>;
};
diff --git a/arch/arm/boot/dts/exynos5250-arndale.dts b/arch/arm/boot/dts/exynos5250-arndale.dts
index d6c85efdb465..3eddf5dbcf7b 100644
--- a/arch/arm/boot/dts/exynos5250-arndale.dts
+++ b/arch/arm/boot/dts/exynos5250-arndale.dts
@@ -154,7 +154,7 @@
compatible = "smsc,usb3503a";
reset-gpios = <&gpx3 5 GPIO_ACTIVE_LOW>;
- connect-gpios = <&gpd1 7 GPIO_ACTIVE_LOW>;
+ connect-gpios = <&gpd1 7 GPIO_ACTIVE_HIGH>;
};
};
diff --git a/arch/arm/boot/dts/exynos5410-odroidxu.dts b/arch/arm/boot/dts/exynos5410-odroidxu.dts
index e0db251e253f..4f9297ae0763 100644
--- a/arch/arm/boot/dts/exynos5410-odroidxu.dts
+++ b/arch/arm/boot/dts/exynos5410-odroidxu.dts
@@ -170,7 +170,7 @@
intn-gpios = <&gpx0 7 GPIO_ACTIVE_HIGH>;
connect-gpios = <&gpx0 6 GPIO_ACTIVE_HIGH>;
- reset-gpios = <&gpx1 4 GPIO_ACTIVE_HIGH>;
+ reset-gpios = <&gpx1 4 GPIO_ACTIVE_LOW>;
initial-mode = <1>;
clock-names = "refclk";
--
2.17.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH v2 2/4] ARM: dts: qcom: Correct USB3503 GPIOs polarity
2019-12-11 14:50 ` [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver Marek Szyprowski
2019-12-11 14:51 ` [PATCH v2 1/4] ARM: dts: exynos: Correct USB3503 GPIOs polarity Marek Szyprowski
@ 2019-12-11 14:52 ` Marek Szyprowski
2019-12-18 5:42 ` Bjorn Andersson
2019-12-11 14:52 ` [PATCH v2 3/4] ARM: dts: sun8i: a83t: " Marek Szyprowski
` (2 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Marek Szyprowski @ 2019-12-11 14:52 UTC (permalink / raw)
To: linux-usb, linux-samsung-soc, linux-mediatek, linux-kernel,
linux-arm-kernel
Cc: Stefan Agner, Bartlomiej Zolnierkiewicz, Greg Kroah-Hartman,
Linus Walleij, Maxime Ripard, Bjorn Andersson, Chunfeng Yun,
Chen-Yu Tsai, Andy Gross, Krzysztof Kozlowski, Matthias Brugger,
Marek Szyprowski
Current USB3503 driver ignores GPIO polarity and always operates as if the
GPIO lines were flagged as ACTIVE_HIGH. Fix the polarity for the existing
USB3503 chip applications to match the chip specification and common
convention for naming the pins. The only pin, which has to be ACTIVE_LOW
is the reset pin. The remaining are ACTIVE_HIGH. This change allows later
to fix the USB3503 driver to properly use generic GPIO bindings and read
polarity from DT.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts b/arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts
index 26160c324802..942e3a2cac35 100644
--- a/arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts
+++ b/arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts
@@ -143,7 +143,7 @@
compatible = "smsc,usb3503a";
reg = <0x8>;
connect-gpios = <&gpioext2 1 GPIO_ACTIVE_HIGH>;
- intn-gpios = <&gpioext2 0 GPIO_ACTIVE_LOW>;
+ intn-gpios = <&gpioext2 0 GPIO_ACTIVE_HIGH>;
initial-mode = <1>;
};
};
--
2.17.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v2 2/4] ARM: dts: qcom: Correct USB3503 GPIOs polarity
2019-12-11 14:52 ` [PATCH v2 2/4] ARM: dts: qcom: " Marek Szyprowski
@ 2019-12-18 5:42 ` Bjorn Andersson
0 siblings, 0 replies; 12+ messages in thread
From: Bjorn Andersson @ 2019-12-18 5:42 UTC (permalink / raw)
To: Marek Szyprowski
Cc: Stefan Agner, linux-samsung-soc, Bartlomiej Zolnierkiewicz,
Greg Kroah-Hartman, Linus Walleij, linux-usb, linux-kernel,
Krzysztof Kozlowski, Chunfeng Yun, Chen-Yu Tsai, Andy Gross,
linux-mediatek, Maxime Ripard, Matthias Brugger, linux-arm-kernel
On Wed 11 Dec 06:52 PST 2019, Marek Szyprowski wrote:
> Current USB3503 driver ignores GPIO polarity and always operates as if the
> GPIO lines were flagged as ACTIVE_HIGH. Fix the polarity for the existing
> USB3503 chip applications to match the chip specification and common
> convention for naming the pins. The only pin, which has to be ACTIVE_LOW
> is the reset pin. The remaining are ACTIVE_HIGH. This change allows later
> to fix the USB3503 driver to properly use generic GPIO bindings and read
> polarity from DT.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>
> ---
> arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts b/arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts
> index 26160c324802..942e3a2cac35 100644
> --- a/arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts
> +++ b/arch/arm/boot/dts/qcom-mdm9615-wp8548-mangoh-green.dts
> @@ -143,7 +143,7 @@
> compatible = "smsc,usb3503a";
> reg = <0x8>;
> connect-gpios = <&gpioext2 1 GPIO_ACTIVE_HIGH>;
> - intn-gpios = <&gpioext2 0 GPIO_ACTIVE_LOW>;
> + intn-gpios = <&gpioext2 0 GPIO_ACTIVE_HIGH>;
> initial-mode = <1>;
> };
> };
> --
> 2.17.1
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 3/4] ARM: dts: sun8i: a83t: Correct USB3503 GPIOs polarity
2019-12-11 14:50 ` [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver Marek Szyprowski
2019-12-11 14:51 ` [PATCH v2 1/4] ARM: dts: exynos: Correct USB3503 GPIOs polarity Marek Szyprowski
2019-12-11 14:52 ` [PATCH v2 2/4] ARM: dts: qcom: " Marek Szyprowski
@ 2019-12-11 14:52 ` Marek Szyprowski
2019-12-13 8:08 ` Chen-Yu Tsai
2019-12-17 8:37 ` Maxime Ripard
2019-12-11 14:52 ` [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors Marek Szyprowski
2019-12-13 16:04 ` [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver Linus Walleij
4 siblings, 2 replies; 12+ messages in thread
From: Marek Szyprowski @ 2019-12-11 14:52 UTC (permalink / raw)
To: linux-usb, linux-samsung-soc, linux-mediatek, linux-kernel,
linux-arm-kernel
Cc: Stefan Agner, Bartlomiej Zolnierkiewicz, Greg Kroah-Hartman,
Linus Walleij, Maxime Ripard, Bjorn Andersson, Chunfeng Yun,
Chen-Yu Tsai, Andy Gross, Krzysztof Kozlowski, Matthias Brugger,
Marek Szyprowski
Current USB3503 driver ignores GPIO polarity and always operates as if the
GPIO lines were flagged as ACTIVE_HIGH. Fix the polarity for the existing
USB3503 chip applications to match the chip specification and common
convention for naming the pins. The only pin, which has to be ACTIVE_LOW
is the reset pin. The remaining are ACTIVE_HIGH. This change allows later
to fix the USB3503 driver to properly use generic GPIO bindings and read
polarity from DT.
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
---
arch/arm/boot/dts/sun8i-a83t-cubietruck-plus.dts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/boot/dts/sun8i-a83t-cubietruck-plus.dts b/arch/arm/boot/dts/sun8i-a83t-cubietruck-plus.dts
index fb928503ad45..d9be511f054f 100644
--- a/arch/arm/boot/dts/sun8i-a83t-cubietruck-plus.dts
+++ b/arch/arm/boot/dts/sun8i-a83t-cubietruck-plus.dts
@@ -101,7 +101,7 @@
initial-mode = <1>; /* initialize in HUB mode */
disabled-ports = <1>;
intn-gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */
- reset-gpios = <&pio 4 16 GPIO_ACTIVE_HIGH>; /* PE16 */
+ reset-gpios = <&pio 4 16 GPIO_ACTIVE_LOW>; /* PE16 */
connect-gpios = <&pio 4 17 GPIO_ACTIVE_HIGH>; /* PE17 */
refclk-frequency = <19200000>;
};
--
2.17.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v2 3/4] ARM: dts: sun8i: a83t: Correct USB3503 GPIOs polarity
2019-12-11 14:52 ` [PATCH v2 3/4] ARM: dts: sun8i: a83t: " Marek Szyprowski
@ 2019-12-13 8:08 ` Chen-Yu Tsai
2019-12-17 8:37 ` Maxime Ripard
1 sibling, 0 replies; 12+ messages in thread
From: Chen-Yu Tsai @ 2019-12-13 8:08 UTC (permalink / raw)
To: Marek Szyprowski, Maxime Ripard
Cc: moderated list:ARM/SAMSUNG EXYNO..., Bartlomiej Zolnierkiewicz,
Greg Kroah-Hartman, Linus Walleij, linux-usb, linux-kernel,
Krzysztof Kozlowski, Bjorn Andersson, Chunfeng Yun, Andy Gross,
moderated list:ARM/Mediatek SoC..., Stefan Agner,
Matthias Brugger, linux-arm-kernel
On Wed, Dec 11, 2019 at 10:52 PM Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
>
> Current USB3503 driver ignores GPIO polarity and always operates as if the
> GPIO lines were flagged as ACTIVE_HIGH. Fix the polarity for the existing
> USB3503 chip applications to match the chip specification and common
> convention for naming the pins. The only pin, which has to be ACTIVE_LOW
> is the reset pin. The remaining are ACTIVE_HIGH. This change allows later
> to fix the USB3503 driver to properly use generic GPIO bindings and read
> polarity from DT.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Acked-by: Chen-Yu Tsai <wens@csie.org>
I assume the dts patch has to go in before or at the same time as the driver
patch?
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 3/4] ARM: dts: sun8i: a83t: Correct USB3503 GPIOs polarity
2019-12-11 14:52 ` [PATCH v2 3/4] ARM: dts: sun8i: a83t: " Marek Szyprowski
2019-12-13 8:08 ` Chen-Yu Tsai
@ 2019-12-17 8:37 ` Maxime Ripard
1 sibling, 0 replies; 12+ messages in thread
From: Maxime Ripard @ 2019-12-17 8:37 UTC (permalink / raw)
To: Marek Szyprowski
Cc: linux-samsung-soc, Bartlomiej Zolnierkiewicz, Greg Kroah-Hartman,
Linus Walleij, linux-usb, linux-kernel, Krzysztof Kozlowski,
Bjorn Andersson, Chunfeng Yun, Chen-Yu Tsai, Andy Gross,
linux-mediatek, Stefan Agner, Matthias Brugger, linux-arm-kernel
[-- Attachment #1.1: Type: text/plain, Size: 624 bytes --]
On Wed, Dec 11, 2019 at 03:52:17PM +0100, Marek Szyprowski wrote:
> Current USB3503 driver ignores GPIO polarity and always operates as if the
> GPIO lines were flagged as ACTIVE_HIGH. Fix the polarity for the existing
> USB3503 chip applications to match the chip specification and common
> convention for naming the pins. The only pin, which has to be ACTIVE_LOW
> is the reset pin. The remaining are ACTIVE_HIGH. This change allows later
> to fix the USB3503 driver to properly use generic GPIO bindings and read
> polarity from DT.
>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Applied, thanks
Maxime
[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
[-- Attachment #2: Type: text/plain, Size: 176 bytes --]
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors
2019-12-11 14:50 ` [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver Marek Szyprowski
` (2 preceding siblings ...)
2019-12-11 14:52 ` [PATCH v2 3/4] ARM: dts: sun8i: a83t: " Marek Szyprowski
@ 2019-12-11 14:52 ` Marek Szyprowski
2019-12-12 2:10 ` Chunfeng Yun
2019-12-13 16:04 ` [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver Linus Walleij
4 siblings, 1 reply; 12+ messages in thread
From: Marek Szyprowski @ 2019-12-11 14:52 UTC (permalink / raw)
To: linux-usb, linux-samsung-soc, linux-mediatek, linux-kernel,
linux-arm-kernel
Cc: Stefan Agner, Bartlomiej Zolnierkiewicz, Greg Kroah-Hartman,
Linus Walleij, Maxime Ripard, Bjorn Andersson, Chunfeng Yun,
Chen-Yu Tsai, Andy Gross, Krzysztof Kozlowski, Matthias Brugger,
Marek Szyprowski
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);
/* 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
--
2.17.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors
2019-12-11 14:52 ` [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors Marek Szyprowski
@ 2019-12-12 2:10 ` Chunfeng Yun
2019-12-12 8:23 ` Marek Szyprowski
0 siblings, 1 reply; 12+ messages in thread
From: Chunfeng Yun @ 2019-12-12 2:10 UTC (permalink / raw)
To: Marek Szyprowski
Cc: Stefan Agner, linux-samsung-soc, Bartlomiej Zolnierkiewicz,
Greg Kroah-Hartman, Linus Walleij, linux-usb, linux-kernel,
Krzysztof Kozlowski, Bjorn Andersson, Chen-Yu Tsai, Andy Gross,
linux-mediatek, Maxime Ripard, Matthias Brugger, linux-arm-kernel
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
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors
2019-12-12 2:10 ` Chunfeng Yun
@ 2019-12-12 8:23 ` Marek Szyprowski
0 siblings, 0 replies; 12+ messages in thread
From: Marek Szyprowski @ 2019-12-12 8:23 UTC (permalink / raw)
To: Chunfeng Yun
Cc: Stefan Agner, linux-samsung-soc, Bartlomiej Zolnierkiewicz,
Greg Kroah-Hartman, Linus Walleij, linux-usb, linux-kernel,
Krzysztof Kozlowski, Bjorn Andersson, Chen-Yu Tsai, Andy Gross,
linux-mediatek, Maxime Ripard, Matthias Brugger, linux-arm-kernel
Hi Chunfeng,
On 12.12.2019 03:10, Chunfeng Yun wrote:
> 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?
In such case the driver will be broken after such patch until a
conversion to descriptor based GPIO api is done.
...
Best regards
--
Marek Szyprowski, PhD
Samsung R&D Institute Poland
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver
2019-12-11 14:50 ` [PATCH v2 0/4 RESEND] USB3503: correct GPIOs polarity and update the driver Marek Szyprowski
` (3 preceding siblings ...)
2019-12-11 14:52 ` [PATCH v2 4/4] usb: usb3503: Convert to use GPIO descriptors Marek Szyprowski
@ 2019-12-13 16:04 ` Linus Walleij
4 siblings, 0 replies; 12+ messages in thread
From: Linus Walleij @ 2019-12-13 16:04 UTC (permalink / raw)
To: Marek Szyprowski
Cc: Stefan Agner, linux-samsung-soc, Bartlomiej Zolnierkiewicz,
Greg Kroah-Hartman, linux-usb, linux-kernel@vger.kernel.org,
Krzysztof Kozlowski, Bjorn Andersson, Chunfeng Yun, Chen-Yu Tsai,
Andy Gross, moderated list:ARM/Mediatek SoC support,
Maxime Ripard, Matthias Brugger, Linux ARM
On Wed, Dec 11, 2019 at 3:51 PM Marek Szyprowski
<m.szyprowski@samsung.com> wrote:
> Marek Szyprowski (3):
> ARM: dts: exynos: Correct USB3503 GPIOs polarity
> ARM: dts: qcom: Correct USB3503 GPIOs polarity
> ARM: dts: sun8i: a83t: Correct USB3503 GPIOs polarity
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
for all these three.
Yours,
Linus Walleij
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 12+ messages in thread