Skip to content

Commit

Permalink
[media] siano: honour per-card default mode
Browse files Browse the repository at this point in the history
Instead of using a global default_mode, passed via modprobe
parameter, use the one defined inside the cards struct.
That will prevent the need of manually specify it for each
board, except, of course, if the user wants to do something
different, on boards that accept multiple types.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Mauro Carvalho Chehab committed Mar 21, 2013
1 parent 5ac14b6 commit 9711a8a
Showing 1 changed file with 18 additions and 5 deletions.
23 changes: 18 additions & 5 deletions drivers/media/common/siano/smscoreapi.c
Original file line number Diff line number Diff line change
Expand Up @@ -434,7 +434,7 @@ static struct mutex g_smscore_deviceslock;
static struct list_head g_smscore_registry;
static struct mutex g_smscore_registrylock;

static int default_mode = 4;
static int default_mode = DEVICE_MODE_NONE;

module_param(default_mode, int, 0644);
MODULE_PARM_DESC(default_mode, "default firmware id (device mode)");
Expand Down Expand Up @@ -880,8 +880,15 @@ int smscore_configure_board(struct smscore_device_t *coredev)
*/
int smscore_start_device(struct smscore_device_t *coredev)
{
int rc = smscore_set_device_mode(
coredev, smscore_registry_getmode(coredev->devpath));
int rc;
int board_id = smscore_get_board_id(coredev);
int mode = smscore_registry_getmode(coredev->devpath);

/* Device is initialized as DEVICE_MODE_NONE */
if (board_id != SMS_BOARD_UNKNOWN && mode == DEVICE_MODE_NONE)
mode = sms_get_board(board_id)->default_mode;

rc = smscore_set_device_mode(coredev, mode);
if (rc < 0) {
sms_info("set device mode faile , rc %d", rc);
return rc;
Expand Down Expand Up @@ -1269,6 +1276,12 @@ static char *smscore_get_fw_filename(struct smscore_device_t *coredev,

type = smscore_registry_gettype(coredev->devpath);

/* Prevent looking outside the smscore_fw_lkup table */
if (type <= SMS_UNKNOWN_TYPE || type >= SMS_NUM_OF_DEVICE_TYPES)
return NULL;
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);
Expand Down Expand Up @@ -1338,7 +1351,7 @@ int smscore_set_device_mode(struct smscore_device_t *coredev, int mode)

sms_debug("set device mode to %d", mode);
if (coredev->device_flags & SMS_DEVICE_FAMILY2) {
if (mode < DEVICE_MODE_DVBT || mode >= DEVICE_MODE_RAW_TUNER) {
if (mode <= DEVICE_MODE_NONE || mode >= DEVICE_MODE_MAX) {
sms_err("invalid mode specified %d", mode);
return -EINVAL;
}
Expand Down Expand Up @@ -1390,7 +1403,7 @@ int smscore_set_device_mode(struct smscore_device_t *coredev, int mode)
sms_err("device init failed, rc %d.", rc);
}
} else {
if (mode < DEVICE_MODE_DVBT || mode > DEVICE_MODE_MAX) {
if (mode <= DEVICE_MODE_NONE || mode >= DEVICE_MODE_MAX) {
sms_err("invalid mode specified %d", mode);
return -EINVAL;
}
Expand Down

0 comments on commit 9711a8a

Please sign in to comment.