|
@@ -69,9 +69,7 @@ static unsigned int hw_read(struct snd_soc_codec *codec, unsigned int reg)
|
|
|
* snd_soc_codec_set_cache_io: Set up standard I/O functions.
|
|
|
*
|
|
|
* @codec: CODEC to configure.
|
|
|
- * @addr_bits: Number of bits of register address data.
|
|
|
- * @data_bits: Number of bits of data per register.
|
|
|
- * @control: Control bus used.
|
|
|
+ * @map: Register map to write to
|
|
|
*
|
|
|
* Register formats are frequently shared between many I2C and SPI
|
|
|
* devices. In order to promote code reuse the ASoC core provides
|
|
@@ -85,41 +83,36 @@ static unsigned int hw_read(struct snd_soc_codec *codec, unsigned int reg)
|
|
|
* volatile registers.
|
|
|
*/
|
|
|
int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
|
|
|
- int addr_bits, int data_bits,
|
|
|
- enum snd_soc_control_type control)
|
|
|
+ struct regmap *regmap)
|
|
|
{
|
|
|
int ret;
|
|
|
|
|
|
+ /* Device has made its own regmap arrangements */
|
|
|
+ if (!regmap)
|
|
|
+ codec->control_data = dev_get_regmap(codec->dev, NULL);
|
|
|
+ else
|
|
|
+ codec->control_data = regmap;
|
|
|
+
|
|
|
+ if (IS_ERR(codec->control_data))
|
|
|
+ return PTR_ERR(codec->control_data);
|
|
|
+
|
|
|
codec->write = hw_write;
|
|
|
codec->read = hw_read;
|
|
|
|
|
|
- switch (control) {
|
|
|
- case SND_SOC_REGMAP:
|
|
|
- /* Device has made its own regmap arrangements */
|
|
|
- codec->using_regmap = true;
|
|
|
- if (!codec->control_data)
|
|
|
- codec->control_data = dev_get_regmap(codec->dev, NULL);
|
|
|
-
|
|
|
- if (codec->control_data) {
|
|
|
- ret = regmap_get_val_bytes(codec->control_data);
|
|
|
- /* Errors are legitimate for non-integer byte
|
|
|
- * multiples */
|
|
|
- if (ret > 0)
|
|
|
- codec->val_bytes = ret;
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
- default:
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
+ ret = regmap_get_val_bytes(codec->control_data);
|
|
|
+ /* Errors are legitimate for non-integer byte
|
|
|
+ * multiples */
|
|
|
+ if (ret > 0)
|
|
|
+ codec->val_bytes = ret;
|
|
|
+
|
|
|
+ codec->using_regmap = true;
|
|
|
|
|
|
- return PTR_ERR_OR_ZERO(codec->control_data);
|
|
|
+ return 0;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(snd_soc_codec_set_cache_io);
|
|
|
#else
|
|
|
int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
|
|
|
- int addr_bits, int data_bits,
|
|
|
- enum snd_soc_control_type control)
|
|
|
+ struct regmap *regmap)
|
|
|
{
|
|
|
return -ENOTSUPP;
|
|
|
}
|