2020#include "hda_generic.h"
2121#include "hda_component.h"
2222#include "cs35l41_hda.h"
23- #include "hda_cs_dsp_ctl.h"
2423#include "cs35l41_hda_property.h"
2524
2625#define CS35L41_PART "cs35l41"
@@ -74,6 +73,21 @@ static const struct cirrus_amp_cal_controls cs35l41_calibration_controls = {
7473 .checksum = CAL_CHECKSUM_DSP_CTL_NAME ,
7574};
7675
76+ enum cs35l41_hda_fw_id {
77+ CS35L41_HDA_FW_SPK_PROT ,
78+ CS35L41_HDA_FW_SPK_CALI ,
79+ CS35L41_HDA_FW_SPK_DIAG ,
80+ CS35L41_HDA_FW_MISC ,
81+ CS35L41_HDA_NUM_FW
82+ };
83+
84+ static const char * const cs35l41_hda_fw_ids [CS35L41_HDA_NUM_FW ] = {
85+ [CS35L41_HDA_FW_SPK_PROT ] = "spk-prot" ,
86+ [CS35L41_HDA_FW_SPK_CALI ] = "spk-cali" ,
87+ [CS35L41_HDA_FW_SPK_DIAG ] = "spk-diag" ,
88+ [CS35L41_HDA_FW_MISC ] = "misc" ,
89+ };
90+
7791static bool firmware_autostart = 1 ;
7892module_param (firmware_autostart , bool , 0444 );
7993MODULE_PARM_DESC (firmware_autostart , "Allow automatic firmware download on boot"
@@ -169,23 +183,23 @@ static int cs35l41_request_firmware_file(struct cs35l41_hda *cs35l41,
169183
170184 if (spkid > -1 && ssid && amp_name )
171185 * filename = kasprintf (GFP_KERNEL , "cirrus/%s-%s-%s-%s-spkid%d-%s.%s" , CS35L41_PART ,
172- dsp_name , hda_cs_dsp_fw_ids [cs35l41 -> firmware_type ],
186+ dsp_name , cs35l41_hda_fw_ids [cs35l41 -> firmware_type ],
173187 ssid , spkid , amp_name , filetype );
174188 else if (spkid > -1 && ssid )
175189 * filename = kasprintf (GFP_KERNEL , "cirrus/%s-%s-%s-%s-spkid%d.%s" , CS35L41_PART ,
176- dsp_name , hda_cs_dsp_fw_ids [cs35l41 -> firmware_type ],
190+ dsp_name , cs35l41_hda_fw_ids [cs35l41 -> firmware_type ],
177191 ssid , spkid , filetype );
178192 else if (ssid && amp_name )
179193 * filename = kasprintf (GFP_KERNEL , "cirrus/%s-%s-%s-%s-%s.%s" , CS35L41_PART ,
180- dsp_name , hda_cs_dsp_fw_ids [cs35l41 -> firmware_type ],
194+ dsp_name , cs35l41_hda_fw_ids [cs35l41 -> firmware_type ],
181195 ssid , amp_name , filetype );
182196 else if (ssid )
183197 * filename = kasprintf (GFP_KERNEL , "cirrus/%s-%s-%s-%s.%s" , CS35L41_PART ,
184- dsp_name , hda_cs_dsp_fw_ids [cs35l41 -> firmware_type ],
198+ dsp_name , cs35l41_hda_fw_ids [cs35l41 -> firmware_type ],
185199 ssid , filetype );
186200 else
187201 * filename = kasprintf (GFP_KERNEL , "cirrus/%s-%s-%s.%s" , CS35L41_PART ,
188- dsp_name , hda_cs_dsp_fw_ids [cs35l41 -> firmware_type ],
202+ dsp_name , cs35l41_hda_fw_ids [cs35l41 -> firmware_type ],
189203 filetype );
190204
191205 if (* filename == NULL )
@@ -588,7 +602,7 @@ static int cs35l41_init_dsp(struct cs35l41_hda *cs35l41)
588602 }
589603
590604 ret = cs_dsp_power_up (dsp , wmfw_firmware , wmfw_filename , coeff_firmware , coeff_filename ,
591- hda_cs_dsp_fw_ids [cs35l41 -> firmware_type ]);
605+ cs35l41_hda_fw_ids [cs35l41 -> firmware_type ]);
592606 if (ret )
593607 goto err ;
594608
@@ -1108,6 +1122,18 @@ static int cs35l41_runtime_resume(struct device *dev)
11081122 return ret ;
11091123}
11101124
1125+ static int cs35l41_hda_read_ctl (struct cs_dsp * dsp , const char * name , int type ,
1126+ unsigned int alg , void * buf , size_t len )
1127+ {
1128+ int ret ;
1129+
1130+ mutex_lock (& dsp -> pwr_lock );
1131+ ret = cs_dsp_coeff_read_ctrl (cs_dsp_get_ctl (dsp , name , type , alg ), 0 , buf , len );
1132+ mutex_unlock (& dsp -> pwr_lock );
1133+
1134+ return ret ;
1135+ }
1136+
11111137static int cs35l41_smart_amp (struct cs35l41_hda * cs35l41 )
11121138{
11131139 unsigned int fw_status ;
@@ -1137,7 +1163,7 @@ static int cs35l41_smart_amp(struct cs35l41_hda *cs35l41)
11371163 goto clean_dsp ;
11381164 }
11391165
1140- ret = read_poll_timeout (hda_cs_dsp_read_ctl , ret ,
1166+ ret = read_poll_timeout (cs35l41_hda_read_ctl , ret ,
11411167 be32_to_cpu (halo_sts ) == HALO_STATE_CODE_RUN ,
11421168 1000 , 15000 , false, & cs35l41 -> cs_dsp , HALO_STATE_DSP_CTL_NAME ,
11431169 HALO_STATE_DSP_CTL_TYPE , HALO_STATE_DSP_CTL_ALG ,
@@ -1174,7 +1200,7 @@ static int cs35l41_smart_amp(struct cs35l41_hda *cs35l41)
11741200 }
11751201
11761202 dev_info (cs35l41 -> dev , "Firmware Loaded - Type: %s, Gain: %d\n" ,
1177- hda_cs_dsp_fw_ids [cs35l41 -> firmware_type ], cs35l41 -> tuning_gain );
1203+ cs35l41_hda_fw_ids [cs35l41 -> firmware_type ], cs35l41 -> tuning_gain );
11781204
11791205 return 0 ;
11801206
@@ -1276,7 +1302,7 @@ static int cs35l41_fw_type_ctl_put(struct snd_kcontrol *kcontrol,
12761302{
12771303 struct cs35l41_hda * cs35l41 = snd_kcontrol_chip (kcontrol );
12781304
1279- if (ucontrol -> value .enumerated .item [0 ] < HDA_CS_DSP_NUM_FW ) {
1305+ if (ucontrol -> value .enumerated .item [0 ] < CS35L41_HDA_NUM_FW ) {
12801306 if (cs35l41 -> firmware_type != ucontrol -> value .enumerated .item [0 ]) {
12811307 cs35l41 -> firmware_type = ucontrol -> value .enumerated .item [0 ];
12821308 return 1 ;
@@ -1290,7 +1316,7 @@ static int cs35l41_fw_type_ctl_put(struct snd_kcontrol *kcontrol,
12901316
12911317static int cs35l41_fw_type_ctl_info (struct snd_kcontrol * kcontrol , struct snd_ctl_elem_info * uinfo )
12921318{
1293- return snd_ctl_enum_info (uinfo , 1 , ARRAY_SIZE (hda_cs_dsp_fw_ids ), hda_cs_dsp_fw_ids );
1319+ return snd_ctl_enum_info (uinfo , 1 , ARRAY_SIZE (cs35l41_hda_fw_ids ), cs35l41_hda_fw_ids );
12941320}
12951321
12961322static int cs35l41_create_controls (struct cs35l41_hda * cs35l41 )
@@ -1430,7 +1456,7 @@ static int cs35l41_hda_bind(struct device *dev, struct device *master, void *mas
14301456
14311457 strscpy (comp -> name , dev_name (dev ), sizeof (comp -> name ));
14321458
1433- cs35l41 -> firmware_type = HDA_CS_DSP_FW_SPK_PROT ;
1459+ cs35l41 -> firmware_type = CS35L41_HDA_FW_SPK_PROT ;
14341460
14351461 if (firmware_autostart ) {
14361462 dev_dbg (cs35l41 -> dev , "Firmware Autostart.\n" );
@@ -2055,7 +2081,6 @@ const struct dev_pm_ops cs35l41_hda_pm_ops = {
20552081EXPORT_SYMBOL_NS_GPL (cs35l41_hda_pm_ops , "SND_HDA_SCODEC_CS35L41" );
20562082
20572083MODULE_DESCRIPTION ("CS35L41 HDA Driver" );
2058- MODULE_IMPORT_NS ("SND_HDA_CS_DSP_CONTROLS" );
20592084MODULE_IMPORT_NS ("SND_SOC_CS_AMP_LIB" );
20602085MODULE_AUTHOR ("Lucas Tanure, Cirrus Logic Inc, <tanureal@opensource.cirrus.com>" );
20612086MODULE_LICENSE ("GPL" );
0 commit comments