From 2790d29b58444c70ac5b911e2a5c30584be071b7 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Sun, 9 Sep 2012 16:52:13 +0200 Subject: cfi-flash: Add devicetree probe support Signed-off-by: Sascha Hauer --- drivers/nor/cfi_flash.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) (limited to 'drivers') diff --git a/drivers/nor/cfi_flash.c b/drivers/nor/cfi_flash.c index 16885c0af9..a8eebf50d7 100644 --- a/drivers/nor/cfi_flash.c +++ b/drivers/nor/cfi_flash.c @@ -982,6 +982,7 @@ static void cfi_init_mtd(struct flash_info *info) static int cfi_probe (struct device_d *dev) { struct flash_info *info = xzalloc(sizeof(*info)); + int cfinum; dev->priv = (void *)info; @@ -1000,7 +1001,12 @@ static int cfi_probe (struct device_d *dev) dev_info(dev, "found cfi flash at %p, size %ld\n", info->base, info->size); - info->cdev.name = asprintf("nor%d", dev->id); + if (dev->id < 0) + cfinum = cdev_find_free_index("nor"); + else + cfinum = dev->id; + + info->cdev.name = asprintf("nor%d", cfinum); info->cdev.size = info->size; info->cdev.dev = dev; info->cdev.ops = &cfi_ops; @@ -1011,19 +1017,30 @@ static int cfi_probe (struct device_d *dev) #endif devfs_create(&info->cdev); + if (dev->device_node) + of_parse_partitions(info->cdev.name, dev->device_node); + return 0; } +static __maybe_unused struct of_device_id cfi_dt_ids[] = { + { + .compatible = "cfi-flash", + }, { + /* sentinel */ + } +}; + static struct driver_d cfi_driver = { - .name = "cfi_flash", - .probe = cfi_probe, - .info = cfi_info, + .name = "cfi_flash", + .probe = cfi_probe, + .info = cfi_info, + .of_compatible = DRV_OF_COMPAT(cfi_dt_ids), }; static int cfi_init(void) { - return register_driver(&cfi_driver); + return register_driver(&cfi_driver); } device_initcall(cfi_init); - -- cgit v1.2.3