static int __init ltq_wdt_probe(struct platform_device *pdev) { struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); struct clk *clk; if (!res) { dev_err(&pdev->dev, "cannot obtain I/O memory region"); return -ENOENT; } res = devm_request_mem_region(&pdev->dev, res->start, resource_size(res), dev_name(&pdev->dev)); if (!res) { dev_err(&pdev->dev, "cannot request I/O memory region"); return -EBUSY; } ltq_wdt_membase = devm_ioremap_nocache(&pdev->dev, res->start, resource_size(res)); if (!ltq_wdt_membase) { dev_err(&pdev->dev, "cannot remap I/O memory region\n"); return -ENOMEM; } /* we do not need to enable the clock as it is always running */ clk = clk_get(&pdev->dev, "io"); WARN_ON(!clk); ltq_io_region_clk_rate = clk_get_rate(clk); clk_put(clk); if (ltq_reset_cause() == LTQ_RST_CAUSE_WDTRST) ltq_wdt_bootstatus = WDIOF_CARDRESET; return misc_register(<q_wdt_miscdev); }
static int ltq_wdt_probe(struct platform_device *pdev) { struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); struct clk *clk; ltq_wdt_membase = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(ltq_wdt_membase)) return PTR_ERR(ltq_wdt_membase); /* we do not need to enable the clock as it is always running */ clk = clk_get_io(); if (IS_ERR(clk)) { dev_err(&pdev->dev, "Failed to get clock\n"); return -ENOENT; } ltq_io_region_clk_rate = clk_get_rate(clk); clk_put(clk); /* find out if the watchdog caused the last reboot */ if (ltq_reset_cause() == LTQ_RST_CAUSE_WDTRST) ltq_wdt_bootstatus = WDIOF_CARDRESET; dev_info(&pdev->dev, "Init done\n"); return misc_register(<q_wdt_miscdev); }