@@ -129,8 +129,9 @@ static int si2157_init(struct dvb_frontend *fe)
129
129
struct dtv_frontend_properties * c = & fe -> dtv_property_cache ;
130
130
struct i2c_client * client = fe -> tuner_priv ;
131
131
struct si2157_dev * dev = i2c_get_clientdata (client );
132
+ bool warn_firmware_not_loaded = false;
132
133
unsigned int chip_id , xtal_trim ;
133
- unsigned int fw_required ;
134
+ bool fw_required = true ;
134
135
struct si2157_cmd cmd ;
135
136
const char * fw_name ;
136
137
int ret ;
@@ -199,10 +200,6 @@ static int si2157_init(struct dvb_frontend *fe)
199
200
#define SI2146_A10 ('A' << 24 | 46 << 16 | '1' << 8 | '0' << 0)
200
201
#define SI2141_A10 ('A' << 24 | 41 << 16 | '1' << 8 | '0' << 0)
201
202
202
- /* assume firmware is required, unless verified not to be */
203
- /* only the SI2157_A30 has been verified not to yet */
204
- fw_required = true;
205
-
206
203
switch (chip_id ) {
207
204
case SI2158_A20 :
208
205
case SI2148_A20 :
@@ -212,9 +209,8 @@ static int si2157_init(struct dvb_frontend *fe)
212
209
fw_name = SI2141_A10_FIRMWARE ;
213
210
break ;
214
211
case SI2157_A30 :
215
- fw_name = SI2157_A30_FIRMWARE ;
216
212
fw_required = false;
217
- break ;
213
+ fallthrough ;
218
214
case SI2177_A30 :
219
215
fw_name = SI2157_A30_FIRMWARE ;
220
216
break ;
@@ -237,12 +233,11 @@ static int si2157_init(struct dvb_frontend *fe)
237
233
goto skip_fw_download ;
238
234
239
235
ret = si2157_load_firmware (fe , fw_name );
240
- if (ret ) {
241
- if (!fw_required )
242
- goto skip_fw_download ;
243
-
244
- dev_err (& client -> dev , "firmware file '%s' not found\n" ,
245
- fw_name );
236
+ if (fw_required && ret == - ENOENT )
237
+ warn_firmware_not_loaded = true;
238
+ else if (ret < 0 ) {
239
+ dev_err (& client -> dev , "error %d when loading firmware file '%s'\n" ,
240
+ ret , fw_name );
246
241
goto err ;
247
242
}
248
243
@@ -263,6 +258,11 @@ static int si2157_init(struct dvb_frontend *fe)
263
258
if (ret )
264
259
goto err ;
265
260
261
+ if (warn_firmware_not_loaded ) {
262
+ dev_warn (& client -> dev , "firmware file '%s' not found. Using firmware from eeprom.\n" ,
263
+ fw_name );
264
+ warn_firmware_not_loaded = false;
265
+ }
266
266
dev_info (& client -> dev , "firmware version: %c.%c.%d\n" ,
267
267
cmd .args [6 ], cmd .args [7 ], cmd .args [8 ]);
268
268
@@ -298,6 +298,11 @@ static int si2157_init(struct dvb_frontend *fe)
298
298
return 0 ;
299
299
300
300
err :
301
+ if (warn_firmware_not_loaded )
302
+ dev_err (& client -> dev ,
303
+ "firmware file '%s' not found. Can't continue without a firmware.\n" ,
304
+ fw_name );
305
+
301
306
dev_dbg (& client -> dev , "failed=%d\n" , ret );
302
307
return ret ;
303
308
}
0 commit comments