diff options
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/video/tvaudio.c | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/drivers/media/video/tvaudio.c b/drivers/media/video/tvaudio.c index 1387c54b7f02..6c920bf74973 100644 --- a/drivers/media/video/tvaudio.c +++ b/drivers/media/video/tvaudio.c | |||
@@ -1511,20 +1511,49 @@ static int chip_probe(struct i2c_client *client, const struct i2c_device_id *id) | |||
1511 | chip_cmd(chip,"init",&desc->init); | 1511 | chip_cmd(chip,"init",&desc->init); |
1512 | 1512 | ||
1513 | if (desc->flags & CHIP_HAS_VOLUME) { | 1513 | if (desc->flags & CHIP_HAS_VOLUME) { |
1514 | chip->left = desc->leftinit ? desc->leftinit : 65535; | 1514 | if (!desc->volfunc) { |
1515 | chip->right = desc->rightinit ? desc->rightinit : 65535; | 1515 | /* This shouldn't be happen. Warn user, but keep working |
1516 | chip_write(chip,desc->leftreg,desc->volfunc(chip->left)); | 1516 | without volume controls |
1517 | chip_write(chip,desc->rightreg,desc->volfunc(chip->right)); | 1517 | */ |
1518 | v4l_info(chip->c, "volume callback undefined!\n"); | ||
1519 | desc->flags &= ~CHIP_HAS_VOLUME; | ||
1520 | } else { | ||
1521 | chip->left = desc->leftinit ? desc->leftinit : 65535; | ||
1522 | chip->right = desc->rightinit ? desc->rightinit : 65535; | ||
1523 | chip_write(chip, desc->leftreg, | ||
1524 | desc->volfunc(chip->left)); | ||
1525 | chip_write(chip, desc->rightreg, | ||
1526 | desc->volfunc(chip->right)); | ||
1527 | } | ||
1518 | } | 1528 | } |
1519 | if (desc->flags & CHIP_HAS_BASSTREBLE) { | 1529 | if (desc->flags & CHIP_HAS_BASSTREBLE) { |
1520 | chip->treble = desc->trebleinit ? desc->trebleinit : 32768; | 1530 | if (!desc->bassfunc || !desc->treblefunc) { |
1521 | chip->bass = desc->bassinit ? desc->bassinit : 32768; | 1531 | /* This shouldn't be happen. Warn user, but keep working |
1522 | chip_write(chip,desc->bassreg,desc->bassfunc(chip->bass)); | 1532 | without bass/treble controls |
1523 | chip_write(chip,desc->treblereg,desc->treblefunc(chip->treble)); | 1533 | */ |
1534 | v4l_info(chip->c, "bass/treble callbacks undefined!\n"); | ||
1535 | desc->flags &= ~CHIP_HAS_BASSTREBLE; | ||
1536 | } else { | ||
1537 | chip->treble = desc->trebleinit ? | ||
1538 | desc->trebleinit : 32768; | ||
1539 | chip->bass = desc->bassinit ? | ||
1540 | desc->bassinit : 32768; | ||
1541 | chip_write(chip, desc->bassreg, | ||
1542 | desc->bassfunc(chip->bass)); | ||
1543 | chip_write(chip, desc->treblereg, | ||
1544 | desc->treblefunc(chip->treble)); | ||
1545 | } | ||
1524 | } | 1546 | } |
1525 | 1547 | ||
1526 | chip->thread = NULL; | 1548 | chip->thread = NULL; |
1527 | if (desc->flags & CHIP_NEED_CHECKMODE) { | 1549 | if (desc->flags & CHIP_NEED_CHECKMODE) { |
1550 | if (!desc->getmode || !desc->setmode) { | ||
1551 | /* This shouldn't be happen. Warn user, but keep working | ||
1552 | without kthread | ||
1553 | */ | ||
1554 | v4l_info(chip->c, "set/get mode callbacks undefined!\n"); | ||
1555 | return 0; | ||
1556 | } | ||
1528 | /* start async thread */ | 1557 | /* start async thread */ |
1529 | init_timer(&chip->wt); | 1558 | init_timer(&chip->wt); |
1530 | chip->wt.function = chip_thread_wake; | 1559 | chip->wt.function = chip_thread_wake; |