From: Mauro Carvalho Chehab Date: Tue, 19 Mar 2013 15:00:23 +0000 (-0300) Subject: [media] siano: remove the bogus firmware lookup code X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=e584f9d61ea0aefa81ddd3faf53100536ba4057e;p=linux-beck.git [media] siano: remove the bogus firmware lookup code There is an special lookup code that is called when SMS_BOARD_UNKNOWN. The logic there is bogus and will cause an oops, as .type is SMS_UNKNOWN_TYPE (-1). As the code would do: return smscore_fw_lkup[type][mode]; That would mean that it would try to go past the smscore_fw_lkup table. So, just remove that bogus code, simplifying the logic. Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/common/siano/smscoreapi.c b/drivers/media/common/siano/smscoreapi.c index 44040a60cd77..d57df9170ae1 100644 --- a/drivers/media/common/siano/smscoreapi.c +++ b/drivers/media/common/siano/smscoreapi.c @@ -1048,7 +1048,7 @@ exit_fw_download: static char *smscore_get_fw_filename(struct smscore_device_t *coredev, - int mode, int lookup); + int mode); /** * loads specified firmware into a buffer and calls device loadfirmware_handler @@ -1061,7 +1061,7 @@ static char *smscore_get_fw_filename(struct smscore_device_t *coredev, * @return 0 on success, <0 on error. */ static int smscore_load_firmware_from_file(struct smscore_device_t *coredev, - int mode, int lookup, + int mode, loadfirmware_t loadfirmware_handler) { int rc = -ENOENT; @@ -1069,7 +1069,7 @@ static int smscore_load_firmware_from_file(struct smscore_device_t *coredev, u32 fw_buf_size; const struct firmware *fw; - char *fw_filename = smscore_get_fw_filename(coredev, mode, lookup); + char *fw_filename = smscore_get_fw_filename(coredev, mode); if (!fw_filename) { sms_info("mode %d not supported on this device", mode); return -ENOENT; @@ -1268,7 +1268,7 @@ static char *smscore_fw_lkup[][DEVICE_MODE_MAX] = { * @return 0 on success, <0 on error. */ static char *smscore_get_fw_filename(struct smscore_device_t *coredev, - int mode, int lookup) + int mode) { char **fw; int board_id = smscore_get_board_id(coredev); @@ -1282,12 +1282,6 @@ static char *smscore_get_fw_filename(struct smscore_device_t *coredev, if (mode <= DEVICE_MODE_NONE || mode >= DEVICE_MODE_MAX) return NULL; - if ((board_id == SMS_BOARD_UNKNOWN) || (lookup == 1)) { - sms_debug("trying to get fw name from lookup table mode %d type %d", - mode, type); - return smscore_fw_lkup[type][mode]; - } - sms_debug("trying to get fw name from sms_boards board_id %d mode %d", board_id, mode); fw = sms_get_board(board_id)->fw; @@ -1373,24 +1367,7 @@ int smscore_set_device_mode(struct smscore_device_t *coredev, int mode) if (!(coredev->modes_supported & (1 << mode))) { rc = smscore_load_firmware_from_file(coredev, - mode, 0, NULL); - - /* - * try again with the default firmware - - * get the fw filename from look-up table - */ - if (rc < 0) { - sms_debug("error %d loading firmware, trying again with default firmware", - rc); - rc = smscore_load_firmware_from_file(coredev, - mode, 1, - NULL); - if (rc < 0) { - sms_debug("error %d loading firmware", - rc); - return rc; - } - } + mode, NULL); if (rc >= 0) sms_info("firmware download success"); } else {