[FSL P50x0] Keyboard and mouse don't work anymore after the devicetree updates for 5.19
Christian Zigotzky
chzigotzky at xenosoft.de
Fri Jun 10 04:03:04 AEST 2022
On 06 June 2022 at 07:06 pm, Rob Herring wrote:
> On Mon, Jun 6, 2022 at 11:14 AM Christian Zigotzky
> <chzigotzky at xenosoft.de> wrote:
>> On 06 June 2022 at 04:58 pm, Rob Herring wrote:
>>> On Fri, May 27, 2022 at 9:23 AM Rob Herring <robh at kernel.org> wrote:
>>>> On Fri, May 27, 2022 at 3:33 AM Christian Zigotzky
>>>> <chzigotzky at xenosoft.de> wrote:
>>>>> On 27 May 2022 at 10:14 am, Prabhakar Mahadev Lad wrote:
>>>>>> Hi,
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: Christian Zigotzky <chzigotzky at xenosoft.de>
>>>>>>>
>>>>>>> On 27 May 2022 at 09:56 am, Prabhakar Mahadev Lad wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>>> -----Original Message-----
>>>>>>>>> From: Christophe Leroy <christophe.leroy at csgroup.eu>
>>> [...]
>>>
>>>>>>>> Looks like the driver which you are using has not been converted to use
>>>>>>> platform_get_irq(), could you please check that.
>>>>>>>> Cheers,
>>>>>>>> Prabhakar
>>>>>>> Do you mean the mouse and keyboard driver?
>>>>>>>
>>>>>> No it could be your gpio/pinctrl driver assuming the keyboard/mouse are using GPIO's. If you are using interrupts then it might be some hierarchal irqc driver in drivers/irqchip/.
>>>>>>
>>>>>> Cheers,
>>>>>> Prabhakar
>>>>> Good to know. I only use unmodified drivers from the official Linux
>>>>> kernel so it's not an issue of the Cyrus+ board.
>>>> The issue is in drivers/usb/host/fsl-mph-dr-of.c which copies the
>>>> resources to a child platform device. Can you try the following
>>>> change:
>>>>
>>>> diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c
>>>> index 44a7e58a26e3..47d9b7be60da 100644
>>>> --- a/drivers/usb/host/fsl-mph-dr-of.c
>>>> +++ b/drivers/usb/host/fsl-mph-dr-of.c
>>>> @@ -80,8 +80,6 @@ static struct platform_device *fsl_usb2_device_register(
>>>> const char *name, int id)
>>>> {
>>>> struct platform_device *pdev;
>>>> - const struct resource *res = ofdev->resource;
>>>> - unsigned int num = ofdev->num_resources;
>>>> int retval;
>>>>
>>>> pdev = platform_device_alloc(name, id);
>>>> @@ -106,11 +104,7 @@ static struct platform_device *fsl_usb2_device_register(
>>>> if (retval)
>>>> goto error;
>>>>
>>>> - if (num) {
>>>> - retval = platform_device_add_resources(pdev, res, num);
>>>> - if (retval)
>>>> - goto error;
>>>> - }
>>>> + pdev->dev.of_node = ofdev->dev.of_node;
>>> >From the log, I think you also need to add this line:
>>>
>>> pdev->dev.of_node_reused = true;
>>>
>>>> retval = platform_device_add(pdev);
>>>> if (retval)
>> Hello Rob,
>>
>> Thanks a lot for your answer.
>>
>> Is the following patch correct?
> Yes
>
>> --- a/drivers/usb/host/fsl-mph-dr-of.c 2022-05-28 09:10:26.797688422
>> +0200
>> +++ b/drivers/usb/host/fsl-mph-dr-of.c 2022-05-28 09:15:01.668594809
>> +0200
>> @@ -80,8 +80,6 @@ static struct platform_device *fsl_usb2_
>> const char *name, int id)
>> {
>> struct platform_device *pdev;
>> - const struct resource *res = ofdev->resource;
>> - unsigned int num = ofdev->num_resources;
>> int retval;
>>
>> pdev = platform_device_alloc(name, id);
>> @@ -106,11 +104,7 @@ static struct platform_device *fsl_usb2_
>> if (retval)
>> goto error;
>>
>> - if (num) {
>> - retval = platform_device_add_resources(pdev, res, num);
>> - if (retval)
>> - goto error;
>> - }
>> + pdev->dev.of_node = ofdev->dev.of_node;
>> + pdev->dev.of_node_reused = true;
>>
>> retval = platform_device_add(pdev);
>> if (retval)
>>
>> ---
>>
>> Thanks,
>> Christian
Hello Rob,
I tested this patch today and unfortunately the issue still exists.
Do you have another idea?
Thanks,
Christian
Updated patch:
--- a/drivers/usb/host/fsl-mph-dr-of.c 2022-06-06 02:18:54.000000000 +0200
+++ b/drivers/usb/host/fsl-mph-dr-of.c 2022-06-09 19:31:50.135472793 +0200
@@ -80,8 +80,6 @@ static struct platform_device *fsl_usb2_
const char *name, int id)
{
struct platform_device *pdev;
- const struct resource *res = ofdev->resource;
- unsigned int num = ofdev->num_resources;
int retval;
pdev = platform_device_alloc(name, id);
@@ -105,12 +103,8 @@ static struct platform_device *fsl_usb2_
retval = platform_device_add_data(pdev, pdata, sizeof(*pdata));
if (retval)
goto error;
-
- if (num) {
- retval = platform_device_add_resources(pdev, res, num);
- if (retval)
- goto error;
- }
+ pdev->dev.of_node = ofdev->dev.of_node;
+ pdev->dev.of_node_reused = true;
retval = platform_device_add(pdev);
if (retval)
More information about the Linuxppc-dev
mailing list