diff options
Diffstat (limited to 'recipes/linux/linux-2.6.31/ben-nanonote/410-soc-32bit-regs.patch')
-rw-r--r-- | recipes/linux/linux-2.6.31/ben-nanonote/410-soc-32bit-regs.patch | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/recipes/linux/linux-2.6.31/ben-nanonote/410-soc-32bit-regs.patch b/recipes/linux/linux-2.6.31/ben-nanonote/410-soc-32bit-regs.patch new file mode 100644 index 0000000000..ef8455bcca --- /dev/null +++ b/recipes/linux/linux-2.6.31/ben-nanonote/410-soc-32bit-regs.patch @@ -0,0 +1,241 @@ +--- a/include/sound/soc.h ++++ b/include/sound/soc.h +@@ -215,10 +215,10 @@ void snd_soc_jack_free_gpios(struct snd_ + #endif + + /* codec register bit access */ +-int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, +- unsigned short mask, unsigned short value); +-int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg, +- unsigned short mask, unsigned short value); ++int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned int reg, ++ unsigned int mask, unsigned int value); ++int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned int reg, ++ unsigned int mask, unsigned int value); + + int snd_soc_new_ac97_codec(struct snd_soc_codec *codec, + struct snd_ac97_bus_ops *ops, int num); +@@ -492,8 +492,8 @@ struct soc_mixer_control { + + /* enumerated kcontrol */ + struct soc_enum { +- unsigned short reg; +- unsigned short reg2; ++ unsigned int reg; ++ unsigned int reg2; + unsigned char shift_l; + unsigned char shift_r; + unsigned int max; +--- a/sound/soc/soc-core.c ++++ b/sound/soc/soc-core.c +@@ -500,8 +500,8 @@ static int soc_pcm_hw_params(struct snd_ + if (cpu_dai->ops->hw_params) { + ret = cpu_dai->ops->hw_params(substream, params, cpu_dai); + if (ret < 0) { +- printk(KERN_ERR "asoc: interface %s hw params failed\n", +- cpu_dai->name); ++ printk(KERN_ERR "asoc: interface %s hw params failed: %d\n", ++ cpu_dai->name, ret); + goto interface_err; + } + } +@@ -842,7 +842,7 @@ static void snd_soc_instantiate_card(str + * DAIs currently; we can't do this per link since some AC97 + * codecs have non-AC97 DAIs. + */ +- if (!ac97) ++ if (!ac97) { + for (i = 0; i < card->num_links; i++) { + found = 0; + list_for_each_entry(dai, &dai_list, list) +@@ -856,6 +856,7 @@ static void snd_soc_instantiate_card(str + return; + } + } ++ } + + /* Note that we do not current check for codec components */ + +@@ -1263,11 +1264,11 @@ EXPORT_SYMBOL_GPL(snd_soc_free_ac97_code + * + * Returns 1 for change else 0. + */ +-int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned short reg, +- unsigned short mask, unsigned short value) ++int snd_soc_update_bits(struct snd_soc_codec *codec, unsigned int reg, ++ unsigned int mask, unsigned int value) + { + int change; +- unsigned short old, new; ++ unsigned int old, new; + + mutex_lock(&io_mutex); + old = snd_soc_read(codec, reg); +@@ -1293,11 +1294,11 @@ EXPORT_SYMBOL_GPL(snd_soc_update_bits); + * + * Returns 1 for change else 0. + */ +-int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned short reg, +- unsigned short mask, unsigned short value) ++int snd_soc_test_bits(struct snd_soc_codec *codec, unsigned int reg, ++ unsigned int mask, unsigned int value) + { + int change; +- unsigned short old, new; ++ unsigned int old, new; + + mutex_lock(&io_mutex); + old = snd_soc_read(codec, reg); +@@ -1586,7 +1587,7 @@ int snd_soc_get_enum_double(struct snd_k + { + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); + struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; +- unsigned short val, bitmask; ++ unsigned int val, bitmask; + + for (bitmask = 1; bitmask < e->max; bitmask <<= 1) + ; +@@ -1615,8 +1616,8 @@ int snd_soc_put_enum_double(struct snd_k + { + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); + struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; +- unsigned short val; +- unsigned short mask, bitmask; ++ unsigned int val; ++ unsigned int mask, bitmask; + + for (bitmask = 1; bitmask < e->max; bitmask <<= 1) + ; +@@ -1652,7 +1653,7 @@ int snd_soc_get_value_enum_double(struct + { + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); + struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; +- unsigned short reg_val, val, mux; ++ unsigned int reg_val, val, mux; + + reg_val = snd_soc_read(codec, e->reg); + val = (reg_val >> e->shift_l) & e->mask; +@@ -1691,8 +1692,8 @@ int snd_soc_put_value_enum_double(struct + { + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); + struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; +- unsigned short val; +- unsigned short mask; ++ unsigned int val; ++ unsigned int mask; + + if (ucontrol->value.enumerated.item[0] > e->max - 1) + return -EINVAL; +@@ -1852,7 +1853,7 @@ int snd_soc_put_volsw(struct snd_kcontro + int max = mc->max; + unsigned int mask = (1 << fls(max)) - 1; + unsigned int invert = mc->invert; +- unsigned short val, val2, val_mask; ++ unsigned int val, val2, val_mask; + + val = (ucontrol->value.integer.value[0] & mask); + if (invert) +@@ -1958,7 +1959,7 @@ int snd_soc_put_volsw_2r(struct snd_kcon + unsigned int mask = (1 << fls(max)) - 1; + unsigned int invert = mc->invert; + int err; +- unsigned short val, val2, val_mask; ++ unsigned int val, val2, val_mask; + + val_mask = mask << shift; + val = (ucontrol->value.integer.value[0] & mask); +@@ -2050,7 +2051,7 @@ int snd_soc_put_volsw_s8(struct snd_kcon + struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); + unsigned int reg = mc->reg; + int min = mc->min; +- unsigned short val; ++ unsigned int val; + + val = (ucontrol->value.integer.value[0]+min) & 0xff; + val |= ((ucontrol->value.integer.value[1]+min) & 0xff) << 8; +@@ -2251,6 +2252,7 @@ int snd_soc_register_dai(struct snd_soc_ + if (!dai->ops) + dai->ops = &null_dai_ops; + ++ + INIT_LIST_HEAD(&dai->list); + + mutex_lock(&client_mutex); +--- a/sound/soc/soc-dapm.c ++++ b/sound/soc/soc-dapm.c +@@ -268,7 +268,7 @@ static int dapm_connect_mixer(struct snd + static int dapm_update_bits(struct snd_soc_dapm_widget *widget) + { + int change, power; +- unsigned short old, new; ++ unsigned int old, new; + struct snd_soc_codec *codec = widget->codec; + + /* check for valid widgets */ +@@ -1246,7 +1246,6 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_add_route + /** + * snd_soc_dapm_new_widgets - add new dapm widgets + * @codec: audio codec +- * + * Checks the codec for any new dapm widgets and creates them if found. + * + * Returns 0 for success. +@@ -1336,7 +1335,8 @@ int snd_soc_dapm_get_volsw(struct snd_kc + + ucontrol->value.integer.value[0] = + (snd_soc_read(widget->codec, reg) >> shift) & mask; +- if (shift != rshift) ++ ++ if (shift != rshift) + ucontrol->value.integer.value[1] = + (snd_soc_read(widget->codec, reg) >> rshift) & mask; + if (invert) { +@@ -1372,7 +1372,7 @@ int snd_soc_dapm_put_volsw(struct snd_kc + int max = mc->max; + unsigned int mask = (1 << fls(max)) - 1; + unsigned int invert = mc->invert; +- unsigned short val, val2, val_mask; ++ unsigned int val, val2, val_mask; + int ret; + + val = (ucontrol->value.integer.value[0] & mask); +@@ -1436,7 +1436,7 @@ int snd_soc_dapm_get_enum_double(struct + { + struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol); + struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; +- unsigned short val, bitmask; ++ unsigned int val, bitmask; + + for (bitmask = 1; bitmask < e->max; bitmask <<= 1) + ; +@@ -1464,8 +1464,8 @@ int snd_soc_dapm_put_enum_double(struct + { + struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol); + struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; +- unsigned short val, mux; +- unsigned short mask, bitmask; ++ unsigned int val, mux; ++ unsigned int mask, bitmask; + int ret = 0; + + for (bitmask = 1; bitmask < e->max; bitmask <<= 1) +@@ -1523,7 +1523,7 @@ int snd_soc_dapm_get_value_enum_double(s + { + struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol); + struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; +- unsigned short reg_val, val, mux; ++ unsigned int reg_val, val, mux; + + reg_val = snd_soc_read(widget->codec, e->reg); + val = (reg_val >> e->shift_l) & e->mask; +@@ -1563,8 +1563,8 @@ int snd_soc_dapm_put_value_enum_double(s + { + struct snd_soc_dapm_widget *widget = snd_kcontrol_chip(kcontrol); + struct soc_enum *e = (struct soc_enum *)kcontrol->private_value; +- unsigned short val, mux; +- unsigned short mask; ++ unsigned int val, mux; ++ unsigned int mask; + int ret = 0; + + if (ucontrol->value.enumerated.item[0] > e->max - 1) |