diff options
-rw-r--r-- | drivers/media/common/siano/smscoreapi.c | 91 |
1 files changed, 54 insertions, 37 deletions
diff --git a/drivers/media/common/siano/smscoreapi.c b/drivers/media/common/siano/smscoreapi.c index 8c576a6e3829..9b2f2b42bfbb 100644 --- a/drivers/media/common/siano/smscoreapi.c +++ b/drivers/media/common/siano/smscoreapi.c | |||
@@ -1063,9 +1063,11 @@ static int smscore_load_firmware_from_file(struct smscore_device_t *coredev, | |||
1063 | const struct firmware *fw; | 1063 | const struct firmware *fw; |
1064 | 1064 | ||
1065 | char *fw_filename = smscore_get_fw_filename(coredev, mode, lookup); | 1065 | char *fw_filename = smscore_get_fw_filename(coredev, mode, lookup); |
1066 | sms_debug("Firmware name: %s\n", fw_filename); | 1066 | if (!fw_filename) { |
1067 | if (!strcmp(fw_filename, "none")) | 1067 | sms_info("mode %d not supported on this device", mode); |
1068 | return -ENOENT; | 1068 | return -ENOENT; |
1069 | } | ||
1070 | sms_debug("Firmware name: %s", fw_filename); | ||
1069 | 1071 | ||
1070 | if (loadfirmware_handler == NULL && !(coredev->device_flags | 1072 | if (loadfirmware_handler == NULL && !(coredev->device_flags |
1071 | & SMS_DEVICE_FAMILY2)) | 1073 | & SMS_DEVICE_FAMILY2)) |
@@ -1198,32 +1200,53 @@ static int smscore_detect_mode(struct smscore_device_t *coredev) | |||
1198 | return rc; | 1200 | return rc; |
1199 | } | 1201 | } |
1200 | 1202 | ||
1201 | static char *smscore_fw_lkup[][SMS_NUM_OF_DEVICE_TYPES] = { | 1203 | static char *smscore_fw_lkup[][DEVICE_MODE_MAX] = { |
1202 | /*Stellar, NOVA A0, Nova B0, VEGA, VENICE, MING, PELE, RIO, DENVER_1530, DENVER_2160 */ | 1204 | [SMS_NOVA_A0] = { |
1203 | /*DVBT*/ | 1205 | [DEVICE_MODE_DVBT] = "dvb_nova_12mhz.inp", |
1204 | { "none", "dvb_nova_12mhz.inp", "dvb_nova_12mhz_b0.inp", "none", "none", "none", "none", "dvb_rio.inp", "none", "none" }, | 1206 | [DEVICE_MODE_DVBH] = "dvb_nova_12mhz.inp", |
1205 | /*DVBH*/ | 1207 | [DEVICE_MODE_DAB_TDMB] = "tdmb_nova_12mhz.inp", |
1206 | { "none", "dvb_nova_12mhz.inp", "dvb_nova_12mhz_b0.inp", "none", "none", "none", "none", "dvbh_rio.inp", "none", "none" }, | 1208 | [DEVICE_MODE_DVBT_BDA] = "dvb_nova_12mhz.inp", |
1207 | /*TDMB*/ | 1209 | [DEVICE_MODE_ISDBT] = "isdbt_nova_12mhz.inp", |
1208 | { "none", "tdmb_nova_12mhz.inp", "tdmb_nova_12mhz_b0.inp", "none", "none", "none", "none", "none", "none", "tdmb_denver.inp" }, | 1210 | [DEVICE_MODE_ISDBT_BDA] = "isdbt_nova_12mhz.inp", |
1209 | /*DABIP*/ | 1211 | }, |
1210 | { "none", "none", "none", "none", "none", "none", "none", "none", "none", "none" }, | 1212 | [SMS_NOVA_B0] = { |
1211 | /*DVBT_BDA*/ | 1213 | [DEVICE_MODE_DVBT] = "dvb_nova_12mhz_b0.inp", |
1212 | { "none", "dvb_nova_12mhz.inp", "dvb_nova_12mhz_b0.inp", "none", "none", "none", "none", "dvb_rio.inp", "none", "none" }, | 1214 | [DEVICE_MODE_DVBH] = "dvb_nova_12mhz_b0.inp", |
1213 | /*ISDBT*/ | 1215 | [DEVICE_MODE_DAB_TDMB] = "tdmb_nova_12mhz_b0.inp", |
1214 | { "none", "isdbt_nova_12mhz.inp", "isdbt_nova_12mhz_b0.inp", "none", "none", "none", "isdbt_pele.inp", "isdbt_rio.inp", "none", "none" }, | 1216 | [DEVICE_MODE_DVBT_BDA] = "dvb_nova_12mhz_b0.inp", |
1215 | /*ISDBT_BDA*/ | 1217 | [DEVICE_MODE_ISDBT] = "isdbt_nova_12mhz_b0.inp", |
1216 | { "none", "isdbt_nova_12mhz.inp", "isdbt_nova_12mhz_b0.inp", "none", "none", "none", "isdbt_pele.inp", "isdbt_rio.inp", "none", "none" }, | 1218 | [DEVICE_MODE_ISDBT_BDA] = "isdbt_nova_12mhz_b0.inp", |
1217 | /*CMMB*/ | 1219 | [DEVICE_MODE_FM_RADIO] = "fm_radio.inp", |
1218 | { "none", "none", "none", "cmmb_vega_12mhz.inp", "cmmb_venice_12mhz.inp", "cmmb_ming_app.inp", "none", "none", "none", "none" }, | 1220 | [DEVICE_MODE_FM_RADIO_BDA] = "fm_radio.inp", |
1219 | /*RAW - not supported*/ | 1221 | }, |
1220 | { "none", "none", "none", "none", "none", "none", "none", "none", "none", "none" }, | 1222 | [SMS_VEGA] = { |
1221 | /*FM*/ | 1223 | [DEVICE_MODE_CMMB] = "cmmb_vega_12mhz.inp", |
1222 | { "none", "none", "fm_radio.inp", "none", "none", "none", "none", "fm_radio_rio.inp", "none", "none" }, | 1224 | }, |
1223 | /*FM_BDA*/ | 1225 | [SMS_VENICE] = { |
1224 | { "none", "none", "fm_radio.inp", "none", "none", "none", "none", "fm_radio_rio.inp", "none", "none" }, | 1226 | [DEVICE_MODE_CMMB] = "cmmb_venice_12mhz.inp", |
1225 | /*ATSC*/ | 1227 | }, |
1226 | { "none", "none", "none", "none", "none", "none", "none", "none", "atsc_denver.inp", "none" } | 1228 | [SMS_MING] = { |
1229 | [DEVICE_MODE_CMMB] = "cmmb_ming_app.inp", | ||
1230 | }, | ||
1231 | [SMS_PELE] = { | ||
1232 | [DEVICE_MODE_ISDBT] = "isdbt_pele.inp", | ||
1233 | [DEVICE_MODE_ISDBT_BDA] = "isdbt_pele.inp", | ||
1234 | }, | ||
1235 | [SMS_RIO] = { | ||
1236 | [DEVICE_MODE_DVBT] = "dvb_rio.inp", | ||
1237 | [DEVICE_MODE_DVBH] = "dvbh_rio.inp", | ||
1238 | [DEVICE_MODE_DVBT_BDA] = "dvb_rio.inp", | ||
1239 | [DEVICE_MODE_ISDBT] = "isdbt_rio.inp", | ||
1240 | [DEVICE_MODE_ISDBT_BDA] = "isdbt_rio.inp", | ||
1241 | [DEVICE_MODE_FM_RADIO] = "fm_radio_rio.inp", | ||
1242 | [DEVICE_MODE_FM_RADIO_BDA] = "fm_radio_rio.inp", | ||
1243 | }, | ||
1244 | [SMS_DENVER_1530] = { | ||
1245 | [DEVICE_MODE_ATSC] = "atsc_denver.inp", | ||
1246 | }, | ||
1247 | [SMS_DENVER_2160] = { | ||
1248 | [DEVICE_MODE_DAB_TDMB] = "tdmb_denver.inp", | ||
1249 | }, | ||
1227 | }; | 1250 | }; |
1228 | 1251 | ||
1229 | /** | 1252 | /** |
@@ -1249,22 +1272,16 @@ static char *smscore_get_fw_filename(struct smscore_device_t *coredev, | |||
1249 | if ((board_id == SMS_BOARD_UNKNOWN) || (lookup == 1)) { | 1272 | if ((board_id == SMS_BOARD_UNKNOWN) || (lookup == 1)) { |
1250 | sms_debug("trying to get fw name from lookup table mode %d type %d", | 1273 | sms_debug("trying to get fw name from lookup table mode %d type %d", |
1251 | mode, type); | 1274 | mode, type); |
1252 | return smscore_fw_lkup[mode][type]; | 1275 | return smscore_fw_lkup[type][mode]; |
1253 | } | 1276 | } |
1254 | 1277 | ||
1255 | sms_debug("trying to get fw name from sms_boards board_id %d mode %d", | 1278 | sms_debug("trying to get fw name from sms_boards board_id %d mode %d", |
1256 | board_id, mode); | 1279 | board_id, mode); |
1257 | fw = sms_get_board(board_id)->fw; | 1280 | fw = sms_get_board(board_id)->fw; |
1258 | if (fw == NULL) { | 1281 | if (!fw || !fw[mode]) { |
1259 | sms_debug("cannot find fw name in sms_boards, getting from lookup table mode %d type %d", | ||
1260 | mode, type); | ||
1261 | return smscore_fw_lkup[mode][type]; | ||
1262 | } | ||
1263 | |||
1264 | if (fw[mode] == NULL) { | ||
1265 | sms_debug("cannot find fw name in sms_boards, getting from lookup table mode %d type %d", | 1282 | sms_debug("cannot find fw name in sms_boards, getting from lookup table mode %d type %d", |
1266 | mode, type); | 1283 | mode, type); |
1267 | return smscore_fw_lkup[mode][type]; | 1284 | return smscore_fw_lkup[type][mode]; |
1268 | } | 1285 | } |
1269 | 1286 | ||
1270 | return fw[mode]; | 1287 | return fw[mode]; |