2015-11-12 17:53:36

by Felipe Balbi

[permalink] [raw]
Subject: [PATCH 0/2] arm: beaglex15: fix USB Gadget

Hi,

with the following patches I can get USB Gadget working
with my beagle x15 with today's Linus' tree.

regards

Felipe Balbi (2):
arm: boot: dts: beaglex15: Remove ID GPIO
arm: boot: beaglex15: pass correct interrupt

arch/arm/boot/dts/am57xx-beagle-x15.dts | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

--
2.6.2


2015-11-12 17:54:03

by Felipe Balbi

[permalink] [raw]
Subject: [PATCH 1/2] arm: boot: dts: beaglex15: Remove ID GPIO

According to latest schematics [1], this board
leaves ID pin floating. It's not connected to
anything at all.

So let's remove it.

[1] https://github.com/beagleboard/beagleboard-x15/blob/master/BeagleBoard-X15_RevA2.pdf

Signed-off-by: Felipe Balbi <[email protected]>
---
arch/arm/boot/dts/am57xx-beagle-x15.dts | 2 --
1 file changed, 2 deletions(-)

diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts
index 00352e761b8c..6f3a1a7ec5f9 100644
--- a/arch/arm/boot/dts/am57xx-beagle-x15.dts
+++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts
@@ -560,8 +560,6 @@
extcon_usb2: tps659038_usb {
compatible = "ti,palmas-usb-vid";
ti,enable-vbus-detection;
- ti,enable-id-detection;
- id-gpios = <&gpio7 24 GPIO_ACTIVE_HIGH>;
};

};
--
2.6.2

2015-11-12 17:53:35

by Felipe Balbi

[permalink] [raw]
Subject: [PATCH 2/2] arm: boot: beaglex15: pass correct interrupt

According to latest schematics [1], GPIO_1/VBUSDET
on TPS659038 is tied to AM57x GPIO4_21. We can use
that as a VBUS interrupt, instead of relying on
PMIC's VBUS interrupts which don't seem to be firing
on x15 at all.

A follow up patch will add support for using this
GPIO-based interrupt mechanism for notifying about
VBUS.

[1] https://github.com/beagleboard/beagleboard-x15/blob/master/BeagleBoard-X15_RevA2.pdf

Signed-off-by: Felipe Balbi <[email protected]>
---
arch/arm/boot/dts/am57xx-beagle-x15.dts | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts
index 6f3a1a7ec5f9..5e47162f7883 100644
--- a/arch/arm/boot/dts/am57xx-beagle-x15.dts
+++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts
@@ -560,6 +560,7 @@
extcon_usb2: tps659038_usb {
compatible = "ti,palmas-usb-vid";
ti,enable-vbus-detection;
+ interrupts-extended = <&gpio4 21 IRQ_TYPE_EDGE_RISING>;
};

};
--
2.6.2

2015-11-12 17:55:10

by Felipe Balbi

[permalink] [raw]
Subject: Re: [PATCH 0/2] arm: beaglex15: fix USB Gadget


Hi,

Felipe Balbi <[email protected]> writes:
> Hi,
>
> with the following patches I can get USB Gadget working
> with my beagle x15 with today's Linus' tree.
>
> regards
>
> Felipe Balbi (2):
> arm: boot: dts: beaglex15: Remove ID GPIO
> arm: boot: beaglex15: pass correct interrupt

actually, one patch missing. Didn't generate it with format-patch. I'll
send as a reply to this thread.

--
balbi


Attachments:
signature.asc (818.00 B)

2015-11-12 17:57:48

by Felipe Balbi

[permalink] [raw]
Subject: [PATCH] extcon: palmas: add support for using VBUSDET output

TPS659038 can remux its GPIO_1 as VBUSDET output,
which can be tied to a SoC GPIO and used as a VBUS
interrupt.

Beagle X15 uses that, in fact, and without it, I
could not get USB peripheral working with that
board.

Signed-off-by: Felipe Balbi <[email protected]>
---
drivers/extcon/extcon-palmas.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
index 93c30a885740..7985d092c069 100644
--- a/drivers/extcon/extcon-palmas.c
+++ b/drivers/extcon/extcon-palmas.c
@@ -296,10 +296,28 @@ static int palmas_usb_probe(struct platform_device *pdev)
}

if (palmas_usb->enable_vbus_detection) {
+ int irq = platform_get_irq(pdev, 0);
+
+ if (irq > 0) {
+ /* remux GPIO_1 as VBUSDET */
+ status = palmas_update_bits(palmas, PALMAS_PU_PD_OD_BASE,
+ PALMAS_PRIMARY_SECONDARY_PAD1,
+ PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_MASK,
+ (1 << 3));
+ if (status < 0) {
+ dev_err(&pdev->dev, "can't remux GPIO1\n");
+ return status;
+ }
+
+ palmas_usb->vbus_irq = irq;
+ } else {
+ irq = regmap_irq_get_virq(palmas->irq_data,
+ PALMAS_VBUS_IRQ);
+ palmas_usb->vbus_irq = irq;
+ }
+
palmas_usb->vbus_otg_irq = regmap_irq_get_virq(palmas->irq_data,
PALMAS_VBUS_OTG_IRQ);
- palmas_usb->vbus_irq = regmap_irq_get_virq(palmas->irq_data,
- PALMAS_VBUS_IRQ);
status = devm_request_threaded_irq(palmas_usb->dev,
palmas_usb->vbus_irq, NULL,
palmas_vbus_irq_handler,
--
2.6.2

2015-11-20 05:33:31

by Chanwoo Choi

[permalink] [raw]
Subject: Re: [PATCH] extcon: palmas: add support for using VBUSDET output

Hi Felipe,

Looks good to me. But I have one comment.

On 2015년 11월 13일 02:57, Felipe Balbi wrote:
> TPS659038 can remux its GPIO_1 as VBUSDET output,
> which can be tied to a SoC GPIO and used as a VBUS
> interrupt.
>
> Beagle X15 uses that, in fact, and without it, I
> could not get USB peripheral working with that
> board.
>
> Signed-off-by: Felipe Balbi <[email protected]>
> ---
> drivers/extcon/extcon-palmas.c | 22 ++++++++++++++++++++--
> 1 file changed, 20 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
> index 93c30a885740..7985d092c069 100644
> --- a/drivers/extcon/extcon-palmas.c
> +++ b/drivers/extcon/extcon-palmas.c
> @@ -296,10 +296,28 @@ static int palmas_usb_probe(struct platform_device *pdev)
> }
>
> if (palmas_usb->enable_vbus_detection) {
> + int irq = platform_get_irq(pdev, 0);
> +
> + if (irq > 0) {
> + /* remux GPIO_1 as VBUSDET */
> + status = palmas_update_bits(palmas, PALMAS_PU_PD_OD_BASE,
> + PALMAS_PRIMARY_SECONDARY_PAD1,
> + PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_MASK,
> + (1 << 3));

PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_SHIFT is appropriate instead of using '3'.
Also, I don't recommend the over line 80. The everything else is good


> + if (status < 0) {
> + dev_err(&pdev->dev, "can't remux GPIO1\n");
> + return status;
> + }
> +
> + palmas_usb->vbus_irq = irq;
> + } else {
> + irq = regmap_irq_get_virq(palmas->irq_data,
> + PALMAS_VBUS_IRQ);
> + palmas_usb->vbus_irq = irq;
> + }
> +
> palmas_usb->vbus_otg_irq = regmap_irq_get_virq(palmas->irq_data,
> PALMAS_VBUS_OTG_IRQ);
> - palmas_usb->vbus_irq = regmap_irq_get_virq(palmas->irq_data,
> - PALMAS_VBUS_IRQ);
> status = devm_request_threaded_irq(palmas_usb->dev,
> palmas_usb->vbus_irq, NULL,
> palmas_vbus_irq_handler,
>

Thanks,
Chanwoo Choi

2015-11-20 05:39:37

by Chanwoo Choi

[permalink] [raw]
Subject: Re: [PATCH 2/2] arm: boot: beaglex15: pass correct interrupt

Hi,

On 2015년 11월 13일 02:53, Felipe Balbi wrote:
> According to latest schematics [1], GPIO_1/VBUSDET
> on TPS659038 is tied to AM57x GPIO4_21. We can use
> that as a VBUS interrupt, instead of relying on
> PMIC's VBUS interrupts which don't seem to be firing
> on x15 at all.
>
> A follow up patch will add support for using this
> GPIO-based interrupt mechanism for notifying about
> VBUS.
>
> [1] https://github.com/beagleboard/beagleboard-x15/blob/master/BeagleBoard-X15_RevA2.pdf
>
> Signed-off-by: Felipe Balbi <[email protected]>
> ---
> arch/arm/boot/dts/am57xx-beagle-x15.dts | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts
> index 6f3a1a7ec5f9..5e47162f7883 100644
> --- a/arch/arm/boot/dts/am57xx-beagle-x15.dts
> +++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts
> @@ -560,6 +560,7 @@
> extcon_usb2: tps659038_usb {
> compatible = "ti,palmas-usb-vid";
> ti,enable-vbus-detection;
> + interrupts-extended = <&gpio4 21 IRQ_TYPE_EDGE_RISING>;
> };
>
> };
>

I check the schematic file. The GPIO4_21 pin is connected as following:
- GPIO_1/VBUSDET -> PMIC_VBUS_DET -> VBUS_DET -> AM5728 GPIO4_21 pin

Reviewed-by: Chanwoo Choi <[email protected]>

Thanks,
Chanwoo Choi

2015-11-20 05:44:24

by Chanwoo Choi

[permalink] [raw]
Subject: Re: [PATCH] extcon: palmas: add support for using VBUSDET output

Hi Felipe,

On 2015년 11월 20일 14:33, Chanwoo Choi wrote:
> Hi Felipe,
>
> Looks good to me. But I have one comment.
>
> On 2015년 11월 13일 02:57, Felipe Balbi wrote:
>> TPS659038 can remux its GPIO_1 as VBUSDET output,
>> which can be tied to a SoC GPIO and used as a VBUS
>> interrupt.
>>
>> Beagle X15 uses that, in fact, and without it, I
>> could not get USB peripheral working with that
>> board.
>>
>> Signed-off-by: Felipe Balbi <[email protected]>
>> ---
>> drivers/extcon/extcon-palmas.c | 22 ++++++++++++++++++++--
>> 1 file changed, 20 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
>> index 93c30a885740..7985d092c069 100644
>> --- a/drivers/extcon/extcon-palmas.c
>> +++ b/drivers/extcon/extcon-palmas.c
>> @@ -296,10 +296,28 @@ static int palmas_usb_probe(struct platform_device *pdev)
>> }
>>
>> if (palmas_usb->enable_vbus_detection) {
>> + int irq = platform_get_irq(pdev, 0);
>> +
>> + if (irq > 0) {
>> + /* remux GPIO_1 as VBUSDET */
>> + status = palmas_update_bits(palmas, PALMAS_PU_PD_OD_BASE,
>> + PALMAS_PRIMARY_SECONDARY_PAD1,
>> + PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_MASK,
>> + (1 << 3));
>
> PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_SHIFT is appropriate instead of using '3'.
> Also, I don't recommend the over line 80. The everything else is good
>
>
>> + if (status < 0) {
>> + dev_err(&pdev->dev, "can't remux GPIO1\n");
>> + return status;
>> + }
>> +
>> + palmas_usb->vbus_irq = irq;
>> + } else {
>> + irq = regmap_irq_get_virq(palmas->irq_data,
>> + PALMAS_VBUS_IRQ);
>> + palmas_usb->vbus_irq = irq;
>> + }
>> +
>> palmas_usb->vbus_otg_irq = regmap_irq_get_virq(palmas->irq_data,
>> PALMAS_VBUS_OTG_IRQ);
>> - palmas_usb->vbus_irq = regmap_irq_get_virq(palmas->irq_data,
>> - PALMAS_VBUS_IRQ);
>> status = devm_request_threaded_irq(palmas_usb->dev,
>> palmas_usb->vbus_irq, NULL,
>> palmas_vbus_irq_handler,
>>
>
> Thanks,
> Chanwoo Choi
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

If you are OK about following patch, I'll apply it on extcon branch.

diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
index 93c30a885740..f601370c9466 100644
--- a/drivers/extcon/extcon-palmas.c
+++ b/drivers/extcon/extcon-palmas.c
@@ -296,10 +296,29 @@ static int palmas_usb_probe(struct platform_device *pdev)
}

if (palmas_usb->enable_vbus_detection) {
+ int irq = platform_get_irq(pdev, 0);
+
+ if (irq > 0) {
+ /* remux GPIO_1 as VBUSDET */
+ status = palmas_update_bits(palmas,
+ PALMAS_PU_PD_OD_BASE,
+ PALMAS_PRIMARY_SECONDARY_PAD1,
+ PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_MASK,
+ (1 << PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_SHIFT));
+ if (status < 0) {
+ dev_err(&pdev->dev, "can't remux GPIO1\n");
+ return status;
+ }
+
+ palmas_usb->vbus_irq = irq;
+ } else {
+ irq = regmap_irq_get_virq(palmas->irq_data,
+ PALMAS_VBUS_IRQ);
+ palmas_usb->vbus_irq = irq;
+ }
+
palmas_usb->vbus_otg_irq = regmap_irq_get_virq(palmas->irq_data,
PALMAS_VBUS_OTG_IRQ);
- palmas_usb->vbus_irq = regmap_irq_get_virq(palmas->irq_data,
- PALMAS_VBUS_IRQ);
status = devm_request_threaded_irq(palmas_usb->dev,
palmas_usb->vbus_irq, NULL,
palmas_vbus_irq_handler,
--
1.9.1


Thanks,
Chanwoo Choi

2015-11-20 14:37:59

by Felipe Balbi

[permalink] [raw]
Subject: Re: [PATCH] extcon: palmas: add support for using VBUSDET output


Hi Chanwoo,

Chanwoo Choi <[email protected]> writes:
> Hi Felipe,
>
> On 2015년 11월 20일 14:33, Chanwoo Choi wrote:
>> Hi Felipe,
>>
>> Looks good to me. But I have one comment.
>>
>> On 2015년 11월 13일 02:57, Felipe Balbi wrote:
>>> TPS659038 can remux its GPIO_1 as VBUSDET output,
>>> which can be tied to a SoC GPIO and used as a VBUS
>>> interrupt.
>>>
>>> Beagle X15 uses that, in fact, and without it, I
>>> could not get USB peripheral working with that
>>> board.
>>>
>>> Signed-off-by: Felipe Balbi <[email protected]>
>>> ---
>>> drivers/extcon/extcon-palmas.c | 22 ++++++++++++++++++++--
>>> 1 file changed, 20 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
>>> index 93c30a885740..7985d092c069 100644
>>> --- a/drivers/extcon/extcon-palmas.c
>>> +++ b/drivers/extcon/extcon-palmas.c
>>> @@ -296,10 +296,28 @@ static int palmas_usb_probe(struct platform_device *pdev)
>>> }
>>>
>>> if (palmas_usb->enable_vbus_detection) {
>>> + int irq = platform_get_irq(pdev, 0);
>>> +
>>> + if (irq > 0) {
>>> + /* remux GPIO_1 as VBUSDET */
>>> + status = palmas_update_bits(palmas, PALMAS_PU_PD_OD_BASE,
>>> + PALMAS_PRIMARY_SECONDARY_PAD1,
>>> + PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_MASK,
>>> + (1 << 3));
>>
>> PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_SHIFT is appropriate instead of
>> using '3'.

good point :-)

>>> + if (status < 0) {
>>> + dev_err(&pdev->dev, "can't remux GPIO1\n");
>>> + return status;
>>> + }
>>> +
>>> + palmas_usb->vbus_irq = irq;
>>> + } else {
>>> + irq = regmap_irq_get_virq(palmas->irq_data,
>>> + PALMAS_VBUS_IRQ);
>>> + palmas_usb->vbus_irq = irq;
>>> + }
>>> +
>>> palmas_usb->vbus_otg_irq = regmap_irq_get_virq(palmas->irq_data,
>>> PALMAS_VBUS_OTG_IRQ);
>>> - palmas_usb->vbus_irq = regmap_irq_get_virq(palmas->irq_data,
>>> - PALMAS_VBUS_IRQ);
>>> status = devm_request_threaded_irq(palmas_usb->dev,
>>> palmas_usb->vbus_irq, NULL,
>>> palmas_vbus_irq_handler,
>>>
>>
>> Thanks,
>> Chanwoo Choi
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
>>
>
> If you are OK about following patch, I'll apply it on extcon branch.

that's perfect, thanks for fixing it :-)

--
balbi


Attachments:
signature.asc (818.00 B)

2015-11-20 15:05:15

by Chanwoo Choi

[permalink] [raw]
Subject: Re: [PATCH] extcon: palmas: add support for using VBUSDET output

Hi Felipe,

On Fri, Nov 20, 2015 at 11:37 PM, Felipe Balbi <[email protected]> wrote:
>
> Hi Chanwoo,
>
> Chanwoo Choi <[email protected]> writes:
>> Hi Felipe,
>>
>> On 2015년 11월 20일 14:33, Chanwoo Choi wrote:
>>> Hi Felipe,
>>>
>>> Looks good to me. But I have one comment.
>>>
>>> On 2015년 11월 13일 02:57, Felipe Balbi wrote:
>>>> TPS659038 can remux its GPIO_1 as VBUSDET output,
>>>> which can be tied to a SoC GPIO and used as a VBUS
>>>> interrupt.
>>>>
>>>> Beagle X15 uses that, in fact, and without it, I
>>>> could not get USB peripheral working with that
>>>> board.
>>>>
>>>> Signed-off-by: Felipe Balbi <[email protected]>
>>>> ---
>>>> drivers/extcon/extcon-palmas.c | 22 ++++++++++++++++++++--
>>>> 1 file changed, 20 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
>>>> index 93c30a885740..7985d092c069 100644
>>>> --- a/drivers/extcon/extcon-palmas.c
>>>> +++ b/drivers/extcon/extcon-palmas.c
>>>> @@ -296,10 +296,28 @@ static int palmas_usb_probe(struct platform_device *pdev)
>>>> }
>>>>
>>>> if (palmas_usb->enable_vbus_detection) {
>>>> + int irq = platform_get_irq(pdev, 0);
>>>> +
>>>> + if (irq > 0) {
>>>> + /* remux GPIO_1 as VBUSDET */
>>>> + status = palmas_update_bits(palmas, PALMAS_PU_PD_OD_BASE,
>>>> + PALMAS_PRIMARY_SECONDARY_PAD1,
>>>> + PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_MASK,
>>>> + (1 << 3));
>>>
>>> PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_SHIFT is appropriate instead of
>>> using '3'.
>
> good point :-)
>
>>>> + if (status < 0) {
>>>> + dev_err(&pdev->dev, "can't remux GPIO1\n");
>>>> + return status;
>>>> + }
>>>> +
>>>> + palmas_usb->vbus_irq = irq;
>>>> + } else {
>>>> + irq = regmap_irq_get_virq(palmas->irq_data,
>>>> + PALMAS_VBUS_IRQ);
>>>> + palmas_usb->vbus_irq = irq;
>>>> + }
>>>> +
>>>> palmas_usb->vbus_otg_irq = regmap_irq_get_virq(palmas->irq_data,
>>>> PALMAS_VBUS_OTG_IRQ);
>>>> - palmas_usb->vbus_irq = regmap_irq_get_virq(palmas->irq_data,
>>>> - PALMAS_VBUS_IRQ);
>>>> status = devm_request_threaded_irq(palmas_usb->dev,
>>>> palmas_usb->vbus_irq, NULL,
>>>> palmas_vbus_irq_handler,
>>>>
>>>
>>> Thanks,
>>> Chanwoo Choi
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>> the body of a message to [email protected]
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>> Please read the FAQ at http://www.tux.org/lkml/
>>>
>>
>> If you are OK about following patch, I'll apply it on extcon branch.
>
> that's perfect, thanks for fixing it :-)

Applied it.

Thanks,
Chanwoo Choi

2015-11-20 16:34:47

by Chanwoo Choi

[permalink] [raw]
Subject: Re: [PATCH] extcon: palmas: add support for using VBUSDET output

Hi Felipe,

On 2015. 11. 20. 오후 11:37, Felipe Balbi wrote:
>
> Hi Chanwoo,
>
> Chanwoo Choi <[email protected]> writes:
>> Hi Felipe,
>>
>> On 2015년 11월 20일 14:33, Chanwoo Choi wrote:
>>> Hi Felipe,
>>>
>>> Looks good to me. But I have one comment.
>>>
>>> On 2015년 11월 13일 02:57, Felipe Balbi wrote:
>>>> TPS659038 can remux its GPIO_1 as VBUSDET output,
>>>> which can be tied to a SoC GPIO and used as a VBUS
>>>> interrupt.
>>>>
>>>> Beagle X15 uses that, in fact, and without it, I
>>>> could not get USB peripheral working with that
>>>> board.
>>>>
>>>> Signed-off-by: Felipe Balbi <[email protected]>
>>>> ---
>>>> drivers/extcon/extcon-palmas.c | 22 ++++++++++++++++++++--
>>>> 1 file changed, 20 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
>>>> index 93c30a885740..7985d092c069 100644
>>>> --- a/drivers/extcon/extcon-palmas.c
>>>> +++ b/drivers/extcon/extcon-palmas.c
>>>> @@ -296,10 +296,28 @@ static int palmas_usb_probe(struct platform_device *pdev)
>>>> }
>>>>
>>>> if (palmas_usb->enable_vbus_detection) {
>>>> + int irq = platform_get_irq(pdev, 0);
>>>> +
>>>> + if (irq > 0) {
>>>> + /* remux GPIO_1 as VBUSDET */
>>>> + status = palmas_update_bits(palmas, PALMAS_PU_PD_OD_BASE,
>>>> + PALMAS_PRIMARY_SECONDARY_PAD1,
>>>> + PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_MASK,
>>>> + (1 << 3));
>>>
>>> PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_SHIFT is appropriate instead of
>>> using '3'.
>
> good point :-)
>
>>>> + if (status < 0) {
>>>> + dev_err(&pdev->dev, "can't remux GPIO1\n");
>>>> + return status;
>>>> + }
>>>> +
>>>> + palmas_usb->vbus_irq = irq;
>>>> + } else {
>>>> + irq = regmap_irq_get_virq(palmas->irq_data,
>>>> + PALMAS_VBUS_IRQ);
>>>> + palmas_usb->vbus_irq = irq;
>>>> + }
>>>> +
>>>> palmas_usb->vbus_otg_irq = regmap_irq_get_virq(palmas->irq_data,
>>>> PALMAS_VBUS_OTG_IRQ);
>>>> - palmas_usb->vbus_irq = regmap_irq_get_virq(palmas->irq_data,
>>>> - PALMAS_VBUS_IRQ);
>>>> status = devm_request_threaded_irq(palmas_usb->dev,
>>>> palmas_usb->vbus_irq, NULL,
>>>> palmas_vbus_irq_handler,
>>>>
>>>
>>> Thanks,
>>> Chanwoo Choi
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>> the body of a message to [email protected]
>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>> Please read the FAQ at http://www.tux.org/lkml/
>>>
>>
>> If you are OK about following patch, I'll apply it on extcon branch.
>
> that's perfect, thanks for fixing it :-)
>

Before applying this patch, I think that there are more generic method?
So, I check the extcon-palmas.c driver again. There is similiar case for id detection.

In some case, id detection use whether 'enable_id_detection' with own interrupt
or 'enable_gpio_id_dectection' with specific h/w gpio like this case of vbus.

In result, I implement the following patch for vbus gpio detection.
But, I'm not sure because I have not any H/W board for test.

If you possible, could you test it with following patch?

Thanks,
Chanwoo Choi

diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
index 93c30a8..885ee95 100644
--- a/drivers/extcon/extcon-palmas.c
+++ b/drivers/extcon/extcon-palmas.c
@@ -216,11 +216,23 @@ static int palmas_usb_probe(struct platform_device *pdev)
return PTR_ERR(palmas_usb->id_gpiod);
}

+ palmas_usb->vbus_gpiod = devm_gpiod_get_optional(&pdev->dev, "vbus",
+ GPIOD_IN);
+ if (IS_ERR(palmas_usb->vbus_gpiod)) {
+ dev_err(&pdev->dev, "failed to get vbus gpio\n");
+ return PTR_ERR(palmas_usb->vbus_gpiod);
+ }
+
if (palmas_usb->enable_id_detection && palmas_usb->id_gpiod) {
palmas_usb->enable_id_detection = false;
palmas_usb->enable_gpio_id_detection = true;
}

+ if (palmas_usb->enable_vbus_detection && palmas_usb->vbus_gpiod) {
+ palmas_usb->enable_vbus_detection = false;
+ palmas_usb->enable_gpio_vbus_detection = true;
+ }
+
if (palmas_usb->enable_gpio_id_detection) {
u32 debounce;

@@ -311,6 +323,40 @@ static int palmas_usb_probe(struct platform_device *pdev)
palmas_usb->vbus_irq, status);
return status;
}
+ } else if (palmas_usb->enable_gpio_vbus_detection) {
+ /* remux GPIO_1 as VBUSDET */
+ status = palmas_update_bits(palmas,
+ PALMAS_PU_PD_OD_BASE,
+ PALMAS_PRIMARY_SECONDARY_PAD1,
+ PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_MASK,
+ (1 << PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_SHIFT));
+ if (status < 0) {
+ dev_err(&pdev->dev, "can't remux GPIO1\n");
+ return status;
+ }
+
+ palmas_usb->vbus_otg_irq = regmap_irq_get_virq(palmas->irq_data,
+ PALMAS_VBUS_OTG_IRQ);
+ palmas_usb->gpio_vbus_irq = gpiod_to_irq(palmas_usb->vbus_gpiod);
+ if (palmas_usb->gpio_vbus_irq < 0) {
+ dev_err(&pdev->dev, "failed to get vbus irq\n");
+ return palmas_usb->gpio_vbus_irq;
+ }
+ status = devm_request_threaded_irq(&pdev->dev,
+ palmas_usb->gpio_vbus_irq,
+ NULL,
+ palmas_vbus_irq_handler,
+ IRQF_TRIGGER_FALLING |
+ IRQF_TRIGGER_RISING |
+ IRQF_ONESHOT |
+ IRQF_EARLY_RESUME,
+ "palmas_usb_vbus",
+ palmas_usb);
+ if (status < 0) {
+ dev_err(&pdev->dev,
+ "failed to request handler for vbus irq\n");
+ return status;
+ }
}

palmas_enable_irq(palmas_usb);
@@ -337,6 +383,8 @@ static int palmas_usb_suspend(struct device *dev)
if (device_may_wakeup(dev)) {
if (palmas_usb->enable_vbus_detection)
enable_irq_wake(palmas_usb->vbus_irq);
+ if (palmas_usb->enable_gpio_vbus_detection)
+ enable_irq_wake(palmas_usb->gpio_vbus_irq);
if (palmas_usb->enable_id_detection)
enable_irq_wake(palmas_usb->id_irq);
if (palmas_usb->enable_gpio_id_detection)
@@ -352,6 +400,8 @@ static int palmas_usb_resume(struct device *dev)
if (device_may_wakeup(dev)) {
if (palmas_usb->enable_vbus_detection)
disable_irq_wake(palmas_usb->vbus_irq);
+ if (palmas_usb->enable_gpio_vbus_detection)
+ disable_irq_wake(palmas_usb->gpio_vbus_irq);
if (palmas_usb->enable_id_detection)
disable_irq_wake(palmas_usb->id_irq);
if (palmas_usb->enable_gpio_id_detection)
diff --git a/include/linux/mfd/palmas.h b/include/linux/mfd/palmas.h
index 13e1d96..7b2526f 100644
--- a/include/linux/mfd/palmas.h
+++ b/include/linux/mfd/palmas.h
@@ -553,7 +553,9 @@ struct palmas_usb {
int vbus_irq;

int gpio_id_irq;
+ int gpio_vbus_irq;
struct gpio_desc *id_gpiod;
+ struct gpio_desc *vbus_gpiod;
unsigned long sw_debounce_jiffies;
struct delayed_work wq_detectid;

@@ -562,6 +564,7 @@ struct palmas_usb {
bool enable_vbus_detection;
bool enable_id_detection;
bool enable_gpio_id_detection;
+ bool enable_gpio_vbus_detection;
};

#define comparator_to_palmas(x) container_of((x), struct palmas_usb, comparator)

2015-11-20 16:37:07

by Chanwoo Choi

[permalink] [raw]
Subject: Re: [PATCH] extcon: palmas: add support for using VBUSDET output

Hi,

On Sat, Nov 21, 2015 at 12:05 AM, Chanwoo Choi <[email protected]> wrote:
> Hi Felipe,
>
> On Fri, Nov 20, 2015 at 11:37 PM, Felipe Balbi <[email protected]> wrote:
>>
>> Hi Chanwoo,
>>
>> Chanwoo Choi <[email protected]> writes:
>>> Hi Felipe,
>>>
>>> On 2015년 11월 20일 14:33, Chanwoo Choi wrote:
>>>> Hi Felipe,
>>>>
>>>> Looks good to me. But I have one comment.
>>>>
>>>> On 2015년 11월 13일 02:57, Felipe Balbi wrote:
>>>>> TPS659038 can remux its GPIO_1 as VBUSDET output,
>>>>> which can be tied to a SoC GPIO and used as a VBUS
>>>>> interrupt.
>>>>>
>>>>> Beagle X15 uses that, in fact, and without it, I
>>>>> could not get USB peripheral working with that
>>>>> board.
>>>>>
>>>>> Signed-off-by: Felipe Balbi <[email protected]>
>>>>> ---
>>>>> drivers/extcon/extcon-palmas.c | 22 ++++++++++++++++++++--
>>>>> 1 file changed, 20 insertions(+), 2 deletions(-)
>>>>>
>>>>> diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
>>>>> index 93c30a885740..7985d092c069 100644
>>>>> --- a/drivers/extcon/extcon-palmas.c
>>>>> +++ b/drivers/extcon/extcon-palmas.c
>>>>> @@ -296,10 +296,28 @@ static int palmas_usb_probe(struct platform_device *pdev)
>>>>> }
>>>>>
>>>>> if (palmas_usb->enable_vbus_detection) {
>>>>> + int irq = platform_get_irq(pdev, 0);
>>>>> +
>>>>> + if (irq > 0) {
>>>>> + /* remux GPIO_1 as VBUSDET */
>>>>> + status = palmas_update_bits(palmas, PALMAS_PU_PD_OD_BASE,
>>>>> + PALMAS_PRIMARY_SECONDARY_PAD1,
>>>>> + PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_MASK,
>>>>> + (1 << 3));
>>>>
>>>> PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_SHIFT is appropriate instead of
>>>> using '3'.
>>
>> good point :-)
>>
>>>>> + if (status < 0) {
>>>>> + dev_err(&pdev->dev, "can't remux GPIO1\n");
>>>>> + return status;
>>>>> + }
>>>>> +
>>>>> + palmas_usb->vbus_irq = irq;
>>>>> + } else {
>>>>> + irq = regmap_irq_get_virq(palmas->irq_data,
>>>>> + PALMAS_VBUS_IRQ);
>>>>> + palmas_usb->vbus_irq = irq;
>>>>> + }
>>>>> +
>>>>> palmas_usb->vbus_otg_irq = regmap_irq_get_virq(palmas->irq_data,
>>>>> PALMAS_VBUS_OTG_IRQ);
>>>>> - palmas_usb->vbus_irq = regmap_irq_get_virq(palmas->irq_data,
>>>>> - PALMAS_VBUS_IRQ);
>>>>> status = devm_request_threaded_irq(palmas_usb->dev,
>>>>> palmas_usb->vbus_irq, NULL,
>>>>> palmas_vbus_irq_handler,
>>>>>
>>>>
>>>> Thanks,
>>>> Chanwoo Choi
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>>> the body of a message to [email protected]
>>>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>>> Please read the FAQ at http://www.tux.org/lkml/
>>>>
>>>
>>> If you are OK about following patch, I'll apply it on extcon branch.
>>
>> that's perfect, thanks for fixing it :-)
>
> Applied it.

Please ignore this reply about applies because I need to discuss about it.

Thanks,
Chanwoo Choi

2015-11-20 16:55:24

by Chanwoo Choi

[permalink] [raw]
Subject: Re: [PATCH 2/2] arm: boot: beaglex15: pass correct interrupt

Hi,

On Sat, Nov 21, 2015 at 1:42 AM, Chanwoo Choi <[email protected]> wrote:
> Hi,
>
> On 2015. 11. 20. 오후 2:39, Chanwoo Choi wrote:
>> Hi,
>>
>> On 2015년 11월 13일 02:53, Felipe Balbi wrote:
>>> According to latest schematics [1], GPIO_1/VBUSDET
>>> on TPS659038 is tied to AM57x GPIO4_21. We can use
>>> that as a VBUS interrupt, instead of relying on
>>> PMIC's VBUS interrupts which don't seem to be firing
>>> on x15 at all.
>>>
>>> A follow up patch will add support for using this
>>> GPIO-based interrupt mechanism for notifying about
>>> VBUS.
>>>
>>> [1] https://github.com/beagleboard/beagleboard-x15/blob/master/BeagleBoard-X15_RevA2.pdf
>>>
>>> Signed-off-by: Felipe Balbi <[email protected]>
>>> ---
>>> arch/arm/boot/dts/am57xx-beagle-x15.dts | 1 +
>>> 1 file changed, 1 insertion(+)
>>>
>>> diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts
>>> index 6f3a1a7ec5f9..5e47162f7883 100644
>>> --- a/arch/arm/boot/dts/am57xx-beagle-x15.dts
>>> +++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts
>>> @@ -560,6 +560,7 @@
>>> extcon_usb2: tps659038_usb {
>>> compatible = "ti,palmas-usb-vid";
>>> ti,enable-vbus-detection;
>>> + interrupts-extended = <&gpio4 21 IRQ_TYPE_EDGE_RISING>;
>
> vbus-gpio = <&gpio4 21>;

I'm sorry. I'm sending the missing email without writing completion.

I agree the Felipe's opinion. Just I think that we can use the
following property
instead of 'interrupt-extended'. Because I think 'vbus-gpio' is more
readability than before. The following property mean the attribute of
GPIO pin as VBUS.
- vbus-gpio = <&gpio4 21>;

Thanks,
Chanwoo Choi

>
>>> };
>>>
>>> };
>>>
>>
>> I check the schematic file. The GPIO4_21 pin is connected as following:
>> - GPIO_1/VBUSDET -> PMIC_VBUS_DET -> VBUS_DET -> AM5728 GPIO4_21 pin
>>
>> Reviewed-by: Chanwoo Choi <[email protected]>
>>
>> Thanks,
>> Chanwoo Choi
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
>>

2015-11-25 19:01:52

by Tony Lindgren

[permalink] [raw]
Subject: Re: [PATCH 2/2] arm: boot: beaglex15: pass correct interrupt

* Chanwoo Choi <[email protected]> [151120 08:56]:
> Hi,
>
> On Sat, Nov 21, 2015 at 1:42 AM, Chanwoo Choi <[email protected]> wrote:
> > Hi,
> >
> > On 2015. 11. 20. 오후 2:39, Chanwoo Choi wrote:
> >> Hi,
> >>
> >> On 2015년 11월 13일 02:53, Felipe Balbi wrote:
> >>> According to latest schematics [1], GPIO_1/VBUSDET
> >>> on TPS659038 is tied to AM57x GPIO4_21. We can use
> >>> that as a VBUS interrupt, instead of relying on
> >>> PMIC's VBUS interrupts which don't seem to be firing
> >>> on x15 at all.
> >>>
> >>> A follow up patch will add support for using this
> >>> GPIO-based interrupt mechanism for notifying about
> >>> VBUS.
> >>>
> >>> [1] https://github.com/beagleboard/beagleboard-x15/blob/master/BeagleBoard-X15_RevA2.pdf
> >>>
> >>> Signed-off-by: Felipe Balbi <[email protected]>
> >>> ---
> >>> arch/arm/boot/dts/am57xx-beagle-x15.dts | 1 +
> >>> 1 file changed, 1 insertion(+)
> >>>
> >>> diff --git a/arch/arm/boot/dts/am57xx-beagle-x15.dts b/arch/arm/boot/dts/am57xx-beagle-x15.dts
> >>> index 6f3a1a7ec5f9..5e47162f7883 100644
> >>> --- a/arch/arm/boot/dts/am57xx-beagle-x15.dts
> >>> +++ b/arch/arm/boot/dts/am57xx-beagle-x15.dts
> >>> @@ -560,6 +560,7 @@
> >>> extcon_usb2: tps659038_usb {
> >>> compatible = "ti,palmas-usb-vid";
> >>> ti,enable-vbus-detection;
> >>> + interrupts-extended = <&gpio4 21 IRQ_TYPE_EDGE_RISING>;
> >
> > vbus-gpio = <&gpio4 21>;
>
> I'm sorry. I'm sending the missing email without writing completion.
>
> I agree the Felipe's opinion. Just I think that we can use the
> following property
> instead of 'interrupt-extended'. Because I think 'vbus-gpio' is more
> readability than before. The following property mean the attribute of
> GPIO pin as VBUS.
> - vbus-gpio = <&gpio4 21>;

Hmm OK not applying the first two patches yet then as it seems changes
are needed. Felipe can you please repost the missing ones after you guys
have figured out which dts changes are needed?

Regards,

Tony