diff options
-rw-r--r-- | drivers/media/video/ivtv/ivtv-i2c.c | 2 | ||||
-rw-r--r-- | drivers/media/video/saa7127.c | 42 |
2 files changed, 28 insertions, 16 deletions
diff --git a/drivers/media/video/ivtv/ivtv-i2c.c b/drivers/media/video/ivtv/ivtv-i2c.c index a1b37ff8669c..af154238fb9a 100644 --- a/drivers/media/video/ivtv/ivtv-i2c.c +++ b/drivers/media/video/ivtv/ivtv-i2c.c | |||
@@ -135,7 +135,7 @@ static const u8 hw_addrs[] = { | |||
135 | static const char * const hw_devicenames[] = { | 135 | static const char * const hw_devicenames[] = { |
136 | "cx25840", | 136 | "cx25840", |
137 | "saa7115", | 137 | "saa7115", |
138 | "saa7127", | 138 | "saa7127_auto", /* saa7127 or saa7129 */ |
139 | "msp3400", | 139 | "msp3400", |
140 | "tuner", | 140 | "tuner", |
141 | "wm8775", | 141 | "wm8775", |
diff --git a/drivers/media/video/saa7127.c b/drivers/media/video/saa7127.c index 7ba10e56c609..d0e83fe0ff51 100644 --- a/drivers/media/video/saa7127.c +++ b/drivers/media/video/saa7127.c | |||
@@ -666,7 +666,6 @@ static int saa7127_probe(struct i2c_client *client, | |||
666 | { | 666 | { |
667 | struct saa7127_state *state; | 667 | struct saa7127_state *state; |
668 | struct v4l2_sliced_vbi_data vbi = { 0, 0, 0, 0 }; /* set to disabled */ | 668 | struct v4l2_sliced_vbi_data vbi = { 0, 0, 0, 0 }; /* set to disabled */ |
669 | int read_result = 0; | ||
670 | 669 | ||
671 | /* Check if the adapter supports the needed features */ | 670 | /* Check if the adapter supports the needed features */ |
672 | if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) | 671 | if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) |
@@ -710,20 +709,29 @@ static int saa7127_probe(struct i2c_client *client, | |||
710 | saa7127_set_input_type(client, SAA7127_INPUT_TYPE_NORMAL); | 709 | saa7127_set_input_type(client, SAA7127_INPUT_TYPE_NORMAL); |
711 | saa7127_set_video_enable(client, 1); | 710 | saa7127_set_video_enable(client, 1); |
712 | 711 | ||
713 | /* Detect if it's an saa7129 */ | 712 | if (id->driver_data) { /* Chip type is already known */ |
714 | read_result = saa7127_read(client, SAA7129_REG_FADE_KEY_COL2); | 713 | state->ident = id->driver_data; |
715 | saa7127_write(client, SAA7129_REG_FADE_KEY_COL2, 0xaa); | 714 | } else { /* Needs detection */ |
716 | if (saa7127_read(client, SAA7129_REG_FADE_KEY_COL2) == 0xaa) { | 715 | int read_result; |
717 | v4l_info(client, "saa7129 found @ 0x%x (%s)\n", | 716 | |
718 | client->addr << 1, client->adapter->name); | 717 | /* Detect if it's an saa7129 */ |
719 | saa7127_write(client, SAA7129_REG_FADE_KEY_COL2, read_result); | 718 | read_result = saa7127_read(client, SAA7129_REG_FADE_KEY_COL2); |
720 | saa7127_write_inittab(client, saa7129_init_config_extra); | 719 | saa7127_write(client, SAA7129_REG_FADE_KEY_COL2, 0xaa); |
721 | state->ident = V4L2_IDENT_SAA7129; | 720 | if (saa7127_read(client, SAA7129_REG_FADE_KEY_COL2) == 0xaa) { |
722 | } else { | 721 | saa7127_write(client, SAA7129_REG_FADE_KEY_COL2, |
723 | v4l_info(client, "saa7127 found @ 0x%x (%s)\n", | 722 | read_result); |
724 | client->addr << 1, client->adapter->name); | 723 | state->ident = V4L2_IDENT_SAA7129; |
725 | state->ident = V4L2_IDENT_SAA7127; | 724 | strlcpy(client->name, "saa7129", I2C_NAME_SIZE); |
725 | } else { | ||
726 | state->ident = V4L2_IDENT_SAA7127; | ||
727 | strlcpy(client->name, "saa7127", I2C_NAME_SIZE); | ||
728 | } | ||
726 | } | 729 | } |
730 | |||
731 | v4l_info(client, "%s found @ 0x%x (%s)\n", client->name, | ||
732 | client->addr << 1, client->adapter->name); | ||
733 | if (state->ident == V4L2_IDENT_SAA7129) | ||
734 | saa7127_write_inittab(client, saa7129_init_config_extra); | ||
727 | return 0; | 735 | return 0; |
728 | } | 736 | } |
729 | 737 | ||
@@ -740,7 +748,11 @@ static int saa7127_remove(struct i2c_client *client) | |||
740 | /* ----------------------------------------------------------------------- */ | 748 | /* ----------------------------------------------------------------------- */ |
741 | 749 | ||
742 | static struct i2c_device_id saa7127_id[] = { | 750 | static struct i2c_device_id saa7127_id[] = { |
743 | { "saa7127", 0 }, | 751 | { "saa7127_auto", 0 }, /* auto-detection */ |
752 | { "saa7126", V4L2_IDENT_SAA7127 }, | ||
753 | { "saa7127", V4L2_IDENT_SAA7127 }, | ||
754 | { "saa7128", V4L2_IDENT_SAA7129 }, | ||
755 | { "saa7129", V4L2_IDENT_SAA7129 }, | ||
744 | { } | 756 | { } |
745 | }; | 757 | }; |
746 | MODULE_DEVICE_TABLE(i2c, saa7127_id); | 758 | MODULE_DEVICE_TABLE(i2c, saa7127_id); |