@ -1696,13 +1696,19 @@ static struct snd_soc_dai_driver max98088_dai[] = {
}
} ;
static int max98088_get_channel ( const char * name )
static const char * eq_mode_name [ ] = { " EQ1 Mode " , " EQ2 Mode " } ;
static int max98088_get_channel ( struct snd_soc_codec * codec , const char * name )
{
if ( strcmp ( name , " EQ1 Mode " ) = = 0 )
return 0 ;
if ( strcmp ( name , " EQ2 Mode " ) = = 0 )
return 1 ;
return - EINVAL ;
int i ;
for ( i = 0 ; i < ARRAY_SIZE ( eq_mode_name ) ; i + + )
if ( strcmp ( name , eq_mode_name [ i ] ) = = 0 )
return i ;
/* Shouldn't happen */
dev_err ( codec - > dev , " Bad EQ channel name '%s' \n " , name ) ;
return - EINVAL ;
}
static void max98088_setup_eq1 ( struct snd_soc_codec * codec )
@ -1806,10 +1812,13 @@ static int max98088_put_eq_enum(struct snd_kcontrol *kcontrol,
struct snd_soc_codec * codec = snd_kcontrol_chip ( kcontrol ) ;
struct max98088_priv * max98088 = snd_soc_codec_get_drvdata ( codec ) ;
struct max98088_pdata * pdata = max98088 - > pdata ;
int channel = max98088_get_channel ( kcontrol - > id . name ) ;
int channel = max98088_get_channel ( codec , kcontrol - > id . name ) ;
struct max98088_cdata * cdata ;
int sel = ucontrol - > value . integer . value [ 0 ] ;
if ( channel < 0 )
return channel ;
cdata = & max98088 - > dai [ channel ] ;
if ( sel > = pdata - > eq_cfgcnt )
@ -1834,9 +1843,12 @@ static int max98088_get_eq_enum(struct snd_kcontrol *kcontrol,
{
struct snd_soc_codec * codec = snd_kcontrol_chip ( kcontrol ) ;
struct max98088_priv * max98088 = snd_soc_codec_get_drvdata ( codec ) ;
int channel = max98088_get_channel ( kcontrol - > id . name ) ;
int channel = max98088_get_channel ( codec , kcontrol - > id . name ) ;
struct max98088_cdata * cdata ;
if ( channel < 0 )
return channel ;
cdata = & max98088 - > dai [ channel ] ;
ucontrol - > value . enumerated . item [ 0 ] = cdata - > eq_sel ;
return 0 ;
@ -1851,17 +1863,17 @@ static void max98088_handle_eq_pdata(struct snd_soc_codec *codec)
int i , j ;
const char * * t ;
int ret ;
struct snd_kcontrol_new controls [ ] = {
SOC_ENUM_EXT ( " EQ1 Mode " ,
SOC_ENUM_EXT ( ( char * ) eq_mode_name [ 0 ] ,
max98088 - > eq_enum ,
max98088_get_eq_enum ,
max98088_put_eq_enum ) ,
SOC_ENUM_EXT ( " EQ2 Mode " ,
SOC_ENUM_EXT ( ( char * ) eq_mode_name [ 1 ] ,
max98088 - > eq_enum ,
max98088_get_eq_enum ,
max98088_put_eq_enum ) ,
} ;
BUILD_BUG_ON ( ARRAY_SIZE ( controls ) ! = ARRAY_SIZE ( eq_mode_name ) ) ;
cfg = pdata - > eq_cfg ;
cfgcnt = pdata - > eq_cfgcnt ;