aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/sysdev
diff options
context:
space:
mode:
authorTimur Tabi <timur@freescale.com>2008-06-02 16:09:35 -0400
committerKumar Gala <galak@kernel.crashing.org>2008-06-03 00:57:07 -0400
commite026892c85571e12f11abffde5a90bcc704d663e (patch)
tree14c70174ef2d2c9ef8f57a84be0d9b7d54521f32 /arch/powerpc/sysdev
parentfca622c5b21a259950a2964ceca7b6c2a23c849f (diff)
[POWERPC] fsl: Update fsl_soc to use cell-index property of I2C nodes
Currently, fsl_i2c_of_init() uses the order of the I2C adapter nodes in the device tree to enumerate the I2C adapters. Instead, let's check for the cell-index property and use it if it exists. This is handy for device drivers that need to identify the I2C adapters by specific numbers. The Freescale MPC8610 ASoC V2 sound drivers are an example. Signed-off-by: Timur Tabi <timur@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/sysdev')
-rw-r--r--arch/powerpc/sysdev/fsl_soc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c
index 167523e9e41c..14616d5d12d5 100644
--- a/arch/powerpc/sysdev/fsl_soc.c
+++ b/arch/powerpc/sysdev/fsl_soc.c
@@ -496,6 +496,8 @@ static int __init fsl_i2c_of_init(void)
496 struct resource r[2]; 496 struct resource r[2];
497 struct fsl_i2c_platform_data i2c_data; 497 struct fsl_i2c_platform_data i2c_data;
498 const unsigned char *flags = NULL; 498 const unsigned char *flags = NULL;
499 int idx;
500 const u32 *iprop;
499 501
500 memset(&r, 0, sizeof(r)); 502 memset(&r, 0, sizeof(r));
501 memset(&i2c_data, 0, sizeof(i2c_data)); 503 memset(&i2c_data, 0, sizeof(i2c_data));
@@ -506,7 +508,10 @@ static int __init fsl_i2c_of_init(void)
506 508
507 of_irq_to_resource(np, 0, &r[1]); 509 of_irq_to_resource(np, 0, &r[1]);
508 510
509 i2c_dev = platform_device_register_simple("fsl-i2c", i, r, 2); 511 iprop = of_get_property(np, "cell-index", NULL);
512 idx = iprop ? *iprop : i;
513
514 i2c_dev = platform_device_register_simple("fsl-i2c", idx, r, 2);
510 if (IS_ERR(i2c_dev)) { 515 if (IS_ERR(i2c_dev)) {
511 ret = PTR_ERR(i2c_dev); 516 ret = PTR_ERR(i2c_dev);
512 goto err; 517 goto err;
@@ -528,7 +533,8 @@ static int __init fsl_i2c_of_init(void)
528 if (ret) 533 if (ret)
529 goto unreg; 534 goto unreg;
530 535
531 of_register_i2c_devices(np, i++); 536 of_register_i2c_devices(np, idx);
537 i++;
532 } 538 }
533 539
534 return 0; 540 return 0;