@@ -53,10 +53,9 @@
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/list.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
#include <linux/mutex.h>
-#include <linux/of.h>
-#include <linux/of_platform.h>
-#include <linux/of_gpio.h>
#include <linux/kernel.h>
#include <linux/property.h>
#include <linux/slab.h>
@@ -64,7 +63,7 @@
#include <linux/watchdog.h>
#include <linux/miscdevice.h>
#include <linux/uaccess.h>
-#include <linux/module.h>
+
#include <asm/div64.h>
#include <asm/mpc52xx.h>
@@ -235,18 +234,17 @@ static const struct irq_domain_ops mpc52xx_gpt_irq_ops = {
.xlate = mpc52xx_gpt_irq_xlate,
};
-static void
-mpc52xx_gpt_irq_setup(struct mpc52xx_gpt_priv *gpt, struct device_node *node)
+static void mpc52xx_gpt_irq_setup(struct mpc52xx_gpt_priv *gpt)
{
int cascade_virq;
unsigned long flags;
u32 mode;
- cascade_virq = irq_of_parse_and_map(node, 0);
- if (!cascade_virq)
+ cascade_virq = platform_get_irq(to_platform_device(gpt->dev), 0);
+ if (cascade_virq < 0)
return;
- gpt->irqhost = irq_domain_add_linear(node, 1, &mpc52xx_gpt_irq_ops, gpt);
+ gpt->irqhost = irq_domain_create_linear(dev_fwnode(gpt->dev), 1, &mpc52xx_gpt_irq_ops, gpt);
if (!gpt->irqhost) {
dev_err(gpt->dev, "irq_domain_add_linear() failed\n");
return;
@@ -670,8 +668,7 @@ static int mpc52xx_gpt_wdt_init(void)
return err;
}
-static int mpc52xx_gpt_wdt_setup(struct mpc52xx_gpt_priv *gpt,
- const u32 *period)
+static int mpc52xx_gpt_wdt_setup(struct mpc52xx_gpt_priv *gpt, const u32 period)
{
u64 real_timeout;
@@ -679,14 +676,14 @@ static int mpc52xx_gpt_wdt_setup(struct mpc52xx_gpt_priv *gpt,
mpc52xx_gpt_wdt = gpt;
/* configure the wdt if the device tree contained a timeout */
- if (!period || *period == 0)
+ if (period == 0)
return 0;
- real_timeout = (u64) *period * 1000000000ULL;
+ real_timeout = (u64)period * 1000000000ULL;
if (mpc52xx_gpt_do_start(gpt, real_timeout, 0, 1))
dev_warn(gpt->dev, "starting as wdt failed\n");
else
- dev_info(gpt->dev, "watchdog set to %us timeout\n", *period);
+ dev_info(gpt->dev, "watchdog set to %us timeout\n", period);
return 0;
}
@@ -697,8 +694,7 @@ static int mpc52xx_gpt_wdt_init(void)
return 0;
}
-static inline int mpc52xx_gpt_wdt_setup(struct mpc52xx_gpt_priv *gpt,
- const u32 *period)
+static inline int mpc52xx_gpt_wdt_setup(struct mpc52xx_gpt_priv *gpt, const u32 period)
{
return 0;
}
@@ -726,25 +722,26 @@ static int mpc52xx_gpt_probe(struct platform_device *ofdev)
dev_set_drvdata(&ofdev->dev, gpt);
mpc52xx_gpt_gpio_setup(gpt);
- mpc52xx_gpt_irq_setup(gpt, ofdev->dev.of_node);
+ mpc52xx_gpt_irq_setup(gpt);
mutex_lock(&mpc52xx_gpt_list_mutex);
list_add(&gpt->list, &mpc52xx_gpt_list);
mutex_unlock(&mpc52xx_gpt_list_mutex);
/* check if this device could be a watchdog */
- if (of_get_property(ofdev->dev.of_node, "fsl,has-wdt", NULL) ||
- of_get_property(ofdev->dev.of_node, "has-wdt", NULL)) {
- const u32 *on_boot_wdt;
+ if (device_property_present(gpt->dev, "fsl,has-wdt") ||
+ device_property_present(gpt->dev, "has-wdt")) {
+ u32 on_boot_wdt = 0;
+ int ret;
gpt->wdt_mode = MPC52xx_GPT_CAN_WDT;
- on_boot_wdt = of_get_property(ofdev->dev.of_node,
- "fsl,wdt-on-boot", NULL);
- if (on_boot_wdt) {
+ ret = device_property_read_u32(gpt->dev, "fsl,wdt-on-boot", &on_boot_wdt);
+ if (ret) {
+ dev_info(gpt->dev, "can function as watchdog\n");
+ } else {
dev_info(gpt->dev, "used as watchdog\n");
gpt->wdt_mode |= MPC52xx_GPT_IS_WDT;
- } else
- dev_info(gpt->dev, "can function as watchdog\n");
+ }
mpc52xx_gpt_wdt_setup(gpt, on_boot_wdt);
}
We may convert the GPT driver to use fwnode API for the sake of consistency of the used APIs inside the driver. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> --- arch/powerpc/platforms/52xx/mpc52xx_gpt.c | 47 +++++++++++------------ 1 file changed, 22 insertions(+), 25 deletions(-)