diff mbox

[v5,7/8] pwm: pwm-omap-dmtimer: Adapt driver to utilize dmtimer pdata ops

Message ID a62814d7-f2d4-8740-92f5-114992ef5db1@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

J, KEERTHY Dec. 19, 2017, 8:25 a.m. UTC
On Tuesday 19 December 2017 10:28 AM, Keerthy wrote:
> 
> 
> On Monday 18 December 2017 06:25 PM, Keerthy wrote:
>>
>>
>> On Monday 18 December 2017 03:01 PM, Ladislav Michl wrote:
>>> Keerthy,
>>>
>>> On Tue, Dec 12, 2017 at 11:42:16AM +0530, Keerthy wrote:
>>>> Adapt driver to utilize dmtimer pdata ops instead of pdata-quirks.
>>>>
>>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>>>> ---
>>>>
>>>> Changes in v4:
>>>>
>>>>   * Switched to dev_get_platdata.
>>>
>>> Where do you expect dev.platform_data to be set? PWM driver is failing
>>> with:
>>> omap-dmtimer-pwm dmtimer-pwm: dmtimer pdata structure NULL
>>> omap-dmtimer-pwm: probe of dmtimer-pwm failed with error -22
>>>
>>> Which I fixed with patch bellow, to be able to test your patchset.
>>
>> Thanks! I will make the below patch part of my series.
>>
>>>
>>> Also I'm running a bit out of time, so I'll send few clean up
>>> patches and event capture code to get some feedback early.
>>>
>>> Regards,
>>> 	ladis
>>>
>>> diff --git a/drivers/clocksource/timer-dm.c b/drivers/clocksource/timer-dm.c
>>> index 39be39e6a8dd..d3d8a49cae0d 100644
>>> --- a/drivers/clocksource/timer-dm.c
>>> +++ b/drivers/clocksource/timer-dm.c
>>> @@ -773,6 +773,7 @@ static int omap_dm_timer_probe(struct platform_device *pdev)
>>>  		dev_err(dev, "%s: no platform data.\n", __func__);
>>>  		return -ENODEV;
>>>  	}
>>> +	dev->platform_data = pdata;
> 
> drivers/clocksource/timer-dm.c: In function 'omap_dm_timer_probe':
> drivers/clocksource/timer-dm.c:744:21: warning: assignment discards
> 'const' qualifier from pointer target type
> 
> This cannot be done as we are assigning a const pointer to a non-const
> pointer.
> 
> I will figure out a different way for this fix.

Ladis,

I fixed that:

                dev_err(dev, "%s: no IRQ resource.\n", __func__);
@@ -946,7 +950,7 @@ static int omap_dm_timer_remove(struct
platform_device *pdev)
        .write_status = omap_dm_timer_write_status,
 };

-static const struct dmtimer_platform_data omap3plus_pdata = {
+static struct dmtimer_platform_data omap3plus_pdata = {
        .timer_errata = OMAP_TIMER_ERRATA_I103_I767,
        .timer_ops = &dmtimer_ops,
 };

Can you check at your end if this works for you?

> 
>>>  
>>>  	irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
>>>  	if (unlikely(!irq)) {
>>>
>>>>
>>>> Changes in v3:
>>>>
>>>>   * Used of_find_platdata_by_node function to fetch platform
>>>>     data for timer node.
>>>>
>>>>  drivers/pwm/pwm-omap-dmtimer.c | 39 ++++++++++++++++++++++-----------------
>>>>  1 file changed, 22 insertions(+), 17 deletions(-)
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/clocksource/timer-dm.c b/drivers/clocksource/timer-dm.c
index 1cbd954..e58f555 100644
--- a/drivers/clocksource/timer-dm.c
+++ b/drivers/clocksource/timer-dm.c
@@ -807,17 +807,21 @@  static int omap_dm_timer_probe(struct
platform_device *pdev)
        struct resource *mem, *irq;
        struct device *dev = &pdev->dev;
        const struct of_device_id *match;
-       const struct dmtimer_platform_data *pdata;
+       struct dmtimer_platform_data *pdata;
        int ret;

        match = of_match_device(of_match_ptr(omap_timer_match), dev);
-       pdata = match ? match->data : dev->platform_data;
+       pdata = match ? (struct dmtimer_platform_data *)match->data :
+               dev->platform_data;

        if (!pdata && !dev->of_node) {
                dev_err(dev, "%s: no platform data.\n", __func__);
                return -ENODEV;
        }

+       if (!dev->platform_data)
+               dev->platform_data = pdata;
+
        irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
        if (unlikely(!irq)) {