&rb532_wdt
};
+#define GPIOBASE 0x050000
+
+static struct resource rb532_gpio_reg0_res[] = {
+ {
+ .name = "gpio_reg0",
+ .start = REGBASE + GPIOBASE,
+ .end = REGBASE + GPIOBASE + sizeof(struct rb532_gpio_reg) - 1,
+ .flags = IORESOURCE_MEM,
+ }
+};
+
+static struct platform_device_info rb532_gpio_devinfo = {
+ .name = "rb532-gpio",
+ .id = PLATFORM_DEVID_NONE,
+ .res = rb532_gpio_reg0_res,
+ .num_res = ARRAY_SIZE(rb532_gpio_reg0_res),
+ .swnode = &rb532_gpio0_node,
+};
+
static const struct property_entry rb532_button_properties[] = {
PROPERTY_ENTRY_GPIO("button-gpios", &rb532_gpio0_node,
GPIO_BTN_S1, GPIO_ACTIVE_LOW),
/* set the uart clock to the current cpu frequency */
rb532_uart_res[0].uartclk = idt_cpu_freq;
+ pd = platform_device_register_full(&rb532_gpio_devinfo);
+ ret = PTR_ERR_OR_ZERO(pd);
+ if (ret) {
+ pr_err("failed to create the GPIO device: %d\n", ret);
+ return ret;
+ }
+
gpiod_add_lookup_table(&cf_slot0_gpio_table);
ret = platform_add_devices(rb532_devs, ARRAY_SIZE(rb532_devs));
if (ret)
return ret;
- /*
- * Stack devices using full info and properties here, after we
- * register the node for the GPIO chip.
- */
- software_node_register(&rb532_gpio0_node);
-
pd = platform_device_register_full(&nand0_info);
ret = PTR_ERR_OR_ZERO(pd);
if (ret) {
#include <asm/mach-rc32434/rb.h>
#include <asm/mach-rc32434/gpio.h>
-#define GPIOBASE 0x050000
/* Offsets relative to GPIOBASE */
#define GPIOFUNC 0x00
#define GPIOCFG 0x04
void __iomem *regbase;
};
-static struct resource rb532_gpio_reg0_res[] = {
- {
- .name = "gpio_reg0",
- .start = REGBASE + GPIOBASE,
- .end = REGBASE + GPIOBASE + sizeof(struct rb532_gpio_reg) - 1,
- .flags = IORESOURCE_MEM,
- }
-};
-
/* rb532_set_bit - sanely set a bit
*
* bitval: new value for the bit
}
EXPORT_SYMBOL(rb532_gpio_set_func);
-static int __init rb532_gpio_init(void)
+static int rb532_gpio_probe(struct platform_device *pdev)
{
- struct resource *r;
+ struct device *dev = &pdev->dev;
+ struct resource *res;
- r = rb532_gpio_reg0_res;
- rb532_gpio_chip->regbase = ioremap(r->start, resource_size(r));
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res)
+ return -EINVAL;
- if (!rb532_gpio_chip->regbase) {
- printk(KERN_ERR "rb532: cannot remap GPIO register 0\n");
- return -ENXIO;
- }
+ rb532_gpio_chip->regbase = devm_ioremap_resource(dev, res);
+ if (IS_ERR(rb532_gpio_chip->regbase))
+ return PTR_ERR(rb532_gpio_chip->regbase);
/* Register our GPIO chip */
- gpiochip_add_data(&rb532_gpio_chip->chip, rb532_gpio_chip);
+ return devm_gpiochip_add_data(dev, &rb532_gpio_chip->chip, rb532_gpio_chip);
+}
- return 0;
+static struct platform_driver rb532_gpio_driver = {
+ .driver = {
+ .name = "rb532-gpio",
+ },
+ .probe = rb532_gpio_probe,
+};
+
+static int __init rb532_gpio_init(void)
+{
+ return platform_driver_register(&rb532_gpio_driver);
}
arch_initcall(rb532_gpio_init);