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
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
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
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
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
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
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
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
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
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
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)
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
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/
>>
* 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