[PATCHv3] watchdog: add support for the Synopsys DesignWare WDT
viresh kumar
viresh.linux at gmail.com
Fri Jan 7 12:17:43 EST 2011
On Fri, Jan 7, 2011 at 10:38 PM, Jamie Iles <jamie at jamieiles.com> wrote:
>> > +static int dw_wdt_open(struct inode *inode, struct file *filp)
>> > +{
>> > + /* Make sure we don't get unloaded. */
>> > + __module_get(THIS_MODULE);
>> > +
>> > + spin_lock(&dw_wdt.lock);
>> > + if (!dw_wdt_is_enabled()) {
>> > + /*
>> > + * The watchdog is not currently enabled. Set the timeout to
>> > + * the maximum and then start it.
>> > + */
>> > + dw_wdt_set_top(DW_WDT_MAX_TOP);
>>
>> shouldn't we check return value here??
>
> No, dw_wdt_set_top() can't fail, it just returns the timeout period that
> it set in seconds. We use this when the user changes the timeout period
> as we may not be able to select the exact timeout period they chose, but
> here we just select the maximum timeout.
Sorry, I missed that.
>> > +static int __devinit dw_wdt_drv_probe(struct platform_device *pdev)
>> > +{
>> > + int ret;
>> > + struct resource *mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>> > +
>> > + if (!mem)
>> > + return -EINVAL;
>> > +
>> > + if (!devm_request_mem_region(&pdev->dev, mem->start, resource_size(mem),
>> > + "iomem"))
>> > + return -ENOMEM;
>> > +
>> > + dw_wdt.regs = devm_ioremap(&pdev->dev, mem->start,
>> > + resource_size(mem));
>> > + if (!dw_wdt.regs)
>> > + return -ENOMEM;
>>
>> should release mem_region in case of error.
>>
>> > +
>> > + dw_wdt.clk = clk_get(&pdev->dev, NULL);
>> > + if (IS_ERR_OR_NULL(dw_wdt.clk))
>> > + return -ENODEV;
>>
>> should release mem_region and free ioremaped space.
>
> We're using devres for the ioremap and region request so that takes care
> of the cleanup for us. This also means we don't need to iounmap and
> release in the release method.
ok
>
>> Also, may be we can continue here in case of error too.
>> Some platforms might nor support clock framework. You can enable and
>> disable clk's if dw_wdt.clk is !NULL
>
> The DesignWare watchdog has 16 timeout periods and these are derived
> from the clock frequency input to the WDT. If we don't have a clk then
> we don't know how long the timeout periods. The only alternative would
> be to have a 'struct dw_wdt_platform_data' that includes the input clock
> frequency which we use if we can't get a clk and get the rate.
That will be fine.
--
viresh
More information about the linux-arm-kernel
mailing list