[alsa-devel] [PATCH] [ALSA] ASoC: Add max98925 codec driver
anish
yesanishhere at gmail.com
Fri Jan 16 22:00:59 CET 2015
On Fri, Jan 16, 2015 at 9:11 AM, Lars-Peter Clausen <lars at metafoo.de> wrote:
> On 01/15/2015 10:17 PM, Anish Kumar wrote:
>>
>> From: Anish Kumar <anish.kumar at maximintegrated.com>
>>
>> This patch adds the max98925 codec driver.
>>
>> Signed-off-by: Anish Kumar <anish.kumar at maximintegrated.com>
>
>
> Please make sure to submit drivers against the latest development version of
> the ASoC tree
> (http://git.kernel.org/cgit/linux/kernel/git/broonie/sound.git/log/?h=for-next).
> This has a couple of outdated things and won't even compile.
When i checked on IRC i was told that linux-next is good. Anyway will rebase
it against this one.
>
>> +
>> +static const unsigned int max98925_spk_tlv[] = {
>> + TLV_DB_RANGE_HEAD(1),
>> + 1, 31, TLV_DB_SCALE_ITEM(-600, 100, 0),
>> +};
>
>
> DECLARE_TLV_DB_SCALE(...)
ok.
>
>> +static int max98925_add_widgets(struct snd_soc_codec *codec)
>> +{
>> + int ret;
>> +
>> + ret = snd_soc_add_codec_controls(codec, max98925_snd_controls,
>> + ARRAY_SIZE(max98925_snd_controls));
>
>
>
> Assign this to the controls and num_controls fields of the CODEC driver
> instead of manually calling add_codec_controls.
will be taken care.
>
> [...]
>>
>> +static int max98925_set_tdm_slot(struct snd_soc_dai *codec_dai,
>> + unsigned int tx_mask, unsigned int rx_mask, int slots, int
>> slot_width)
>> +{
>> + pr_info("%s: tx_mask 0x%X, rx_mask 0x%X, slots %d, slot width
>> %d\n",
>> + __func__, tx_mask, rx_mask, slots, slot_width);
>> + return 0;
>> +}
>> +
>
> [...]
>>
>> +static int max98925_set_bias_level(struct snd_soc_codec *codec,
>> + enum snd_soc_bias_level level)
>> +{
>> + codec->dapm.bias_level = level;
>> + return 0;
>> +}
>> +
>
>
> Drop all those all empty callbacks
ok.
>
>
>> +static struct snd_soc_dai_ops max98925_dai_ops = {
>
>
> const
>
>> + .set_sysclk = max98925_dai_set_sysclk,
>> + .set_fmt = max98925_dai_set_fmt,
>> + .set_tdm_slot = max98925_set_tdm_slot,
>> + .hw_params = max98925_dai_hw_params,
>> + .digital_mute = max98925_dai_digital_mute,
>> +};
>> +
>
> [...]
>>
>> +static struct snd_soc_codec_driver soc_codec_dev_max98925 = {
>
>
> const
>
>> + .probe = max98925_probe,
>> + .set_bias_level = max98925_set_bias_level,
>
>
> You'll need at least some kind of DAPM, otherwise you CODEC won't do
> anything.
Yes this is most important comment. I wrongly mentioned this as codec
but rather it is just mono Class DG audio amplifier so it doesn't need
any dapm connections. Mixer commands is good enough for this and i will
change this in commit text as well.
>
>> +};
>> +
>
> [...]
>>
>> +/* There should be a second MAX98925 on the board */
>> +static struct i2c_board_info max98925_i2c_second[] = {
>> + {
>> + I2C_BOARD_INFO("max98925R", 0x32),
>> + }
>> +};
>> +
>> +struct i2c_client *add_second_device(int busnum)
>> +{
>> + struct i2c_client *i2c = NULL;
>> + struct i2c_adapter *adapter;
>> +
>> + adapter = i2c_get_adapter(busnum);
>> + if (adapter != NULL)
>> + i2c = i2c_new_device(adapter, max98925_i2c_second);
>> +
>> + return i2c;
>> +}
>
> [...]
>>
>> + /* Check for second MAX98925 */
>> + i2c_r = add_second_device(2);
>
>
> If there are two devices instantiate them properly and create two CODEC
> devices, not some kind of hackery like this.
Ok but this is just audio amplifier do we still need that?
>
>
> [...]
More information about the Alsa-devel
mailing list