aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/fsl
diff options
context:
space:
mode:
authorTimur Tabi <timur@freescale.com>2011-12-01 20:52:47 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2011-12-02 05:37:18 -0500
commit6132725eac521b89dee3d58df3c6d04a1e50844c (patch)
tree994019cc02aacabc13f06353b91ee3525c47b0c6 /sound/soc/fsl
parenta806aa9207ad59933464efbe6009394723713c0d (diff)
ASoC: fsl/powerpc: don't rely on the cell-index property
Instead of using the 'cell-index' property in the I2C adapter node to determine the adapter number, just query the i2c_adapter object directly. Previously, the I2C nodes always appeared in cell-index order, so the dynamic numbering coincided with the cell-index property. With commit ab827d97 ("powerpc/85xx: Rework P1022DS device tree"), the I2C nodes are unintentionally reversed in the device tree, and so the machine driver guesses the wrong I2C adapter number. Signed-off-by: Timur Tabi <timur@freescale.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/fsl')
-rw-r--r--sound/soc/fsl/mpc8610_hpcd.c13
-rw-r--r--sound/soc/fsl/p1022_ds.c13
2 files changed, 16 insertions, 10 deletions
diff --git a/sound/soc/fsl/mpc8610_hpcd.c b/sound/soc/fsl/mpc8610_hpcd.c
index ae49f1c78c6d..0ea4a5a96e06 100644
--- a/sound/soc/fsl/mpc8610_hpcd.c
+++ b/sound/soc/fsl/mpc8610_hpcd.c
@@ -14,6 +14,7 @@
14#include <linux/interrupt.h> 14#include <linux/interrupt.h>
15#include <linux/of_device.h> 15#include <linux/of_device.h>
16#include <linux/slab.h> 16#include <linux/slab.h>
17#include <linux/of_i2c.h>
17#include <sound/soc.h> 18#include <sound/soc.h>
18#include <asm/fsl_guts.h> 19#include <asm/fsl_guts.h>
19 20
@@ -249,8 +250,9 @@ static int get_parent_cell_index(struct device_node *np)
249static int codec_node_dev_name(struct device_node *np, char *buf, size_t len) 250static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
250{ 251{
251 const u32 *iprop; 252 const u32 *iprop;
252 int bus, addr; 253 int addr;
253 char temp[DAI_NAME_SIZE]; 254 char temp[DAI_NAME_SIZE];
255 struct i2c_client *i2c;
254 256
255 of_modalias_node(np, temp, DAI_NAME_SIZE); 257 of_modalias_node(np, temp, DAI_NAME_SIZE);
256 258
@@ -260,11 +262,12 @@ static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
260 262
261 addr = be32_to_cpup(iprop); 263 addr = be32_to_cpup(iprop);
262 264
263 bus = get_parent_cell_index(np); 265 /* We need the adapter number */
264 if (bus < 0) 266 i2c = of_find_i2c_device_by_node(np);
265 return bus; 267 if (!i2c)
268 return -ENODEV;
266 269
267 snprintf(buf, len, "%s-codec.%u-%04x", temp, bus, addr); 270 snprintf(buf, len, "%s-codec.%u-%04x", temp, i2c->adapter->nr, addr);
268 271
269 return 0; 272 return 0;
270} 273}
diff --git a/sound/soc/fsl/p1022_ds.c b/sound/soc/fsl/p1022_ds.c
index 309162652287..a5d4e80a9cf4 100644
--- a/sound/soc/fsl/p1022_ds.c
+++ b/sound/soc/fsl/p1022_ds.c
@@ -14,6 +14,7 @@
14#include <linux/interrupt.h> 14#include <linux/interrupt.h>
15#include <linux/of_device.h> 15#include <linux/of_device.h>
16#include <linux/slab.h> 16#include <linux/slab.h>
17#include <linux/of_i2c.h>
17#include <sound/soc.h> 18#include <sound/soc.h>
18#include <asm/fsl_guts.h> 19#include <asm/fsl_guts.h>
19 20
@@ -252,8 +253,9 @@ static int get_parent_cell_index(struct device_node *np)
252static int codec_node_dev_name(struct device_node *np, char *buf, size_t len) 253static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
253{ 254{
254 const u32 *iprop; 255 const u32 *iprop;
255 int bus, addr; 256 int addr;
256 char temp[DAI_NAME_SIZE]; 257 char temp[DAI_NAME_SIZE];
258 struct i2c_client *i2c;
257 259
258 of_modalias_node(np, temp, DAI_NAME_SIZE); 260 of_modalias_node(np, temp, DAI_NAME_SIZE);
259 261
@@ -263,11 +265,12 @@ static int codec_node_dev_name(struct device_node *np, char *buf, size_t len)
263 265
264 addr = be32_to_cpup(iprop); 266 addr = be32_to_cpup(iprop);
265 267
266 bus = get_parent_cell_index(np); 268 /* We need the adapter number */
267 if (bus < 0) 269 i2c = of_find_i2c_device_by_node(np);
268 return bus; 270 if (!i2c)
271 return -ENODEV;
269 272
270 snprintf(buf, len, "%s.%u-%04x", temp, bus, addr); 273 snprintf(buf, len, "%s.%u-%04x", temp, i2c->adapter->nr, addr);
271 274
272 return 0; 275 return 0;
273} 276}