From d2ca7d9e9d0f65134adbaa9a8da5966fd5b8fc0d Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Sun, 4 Nov 2007 08:32:42 -0300 Subject: [PATCH] --- yaml --- r: 76375 b: refs/heads/master c: d2ba055d3b7ca7694af38a735f00850363ee9417 h: refs/heads/master i: 76373: f586dcd9e7e5e8185c8d7d3f108497de1a660c52 76371: 983200e58890df1fcfd4881b371d31996194dc49 76367: c39a0a1706745598db14a2c6098b346b44dbdfd7 v: v3 --- [refs] | 2 +- .../drivers/media/video/em28xx/em28xx-cards.c | 29 +++++++++++++++---- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 9460d05f1403..746617de9715 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fad7b958e753e18ff443786360f7846da50a3085 +refs/heads/master: d2ba055d3b7ca7694af38a735f00850363ee9417 diff --git a/trunk/drivers/media/video/em28xx/em28xx-cards.c b/trunk/drivers/media/video/em28xx/em28xx-cards.c index fd7a8a5fba66..e88bf6700e63 100644 --- a/trunk/drivers/media/video/em28xx/em28xx-cards.c +++ b/trunk/drivers/media/video/em28xx/em28xx-cards.c @@ -397,11 +397,13 @@ struct usb_device_id em28xx_id_table [] = { }; MODULE_DEVICE_TABLE (usb, em28xx_id_table); -static struct em28xx_hash_table em28xx_hash [] = { +/* EEPROM hash table for devices with generic USB IDs */ +static struct em28xx_hash_table em28xx_eeprom_hash [] = { /* P/N: SA 60002070465 Tuner: TVF7533-MF */ { 0x6ce05a8f, EM2820_BOARD_PROLINK_PLAYTV_USB2, TUNER_YMEC_TVF_5533MF }, }; +/* I2C devicelist hash table for devices with generic USB IDs */ static struct em28xx_hash_table em28xx_i2c_hash[] = { { 0xb06a32c3, EM2800_BOARD_TERRATEC_CINERGY_200, TUNER_LG_PAL_NEW_TAPC }, { 0xf51200e3, EM2800_BOARD_VGEAR_POCKETTV, TUNER_LG_PAL_NEW_TAPC }, @@ -484,10 +486,18 @@ static int em28xx_hint_board(struct em28xx *dev) { int i; - for (i = 0; i < ARRAY_SIZE(em28xx_hash); i++) { - if (dev->hash == em28xx_hash[i].hash) { - dev->model = em28xx_hash[i].model; - dev->tuner_type = em28xx_hash[i].tuner; + /* HINT method: EEPROM + * + * This method works only for boards with eeprom. + * Uses a hash of all eeprom bytes. The hash should be + * unique for a vendor/tuner pair. + * There are a high chance that tuners for different + * video standards produce different hashes. + */ + for (i = 0; i < ARRAY_SIZE(em28xx_eeprom_hash); i++) { + if (dev->hash == em28xx_eeprom_hash[i].hash) { + dev->model = em28xx_eeprom_hash[i].model; + dev->tuner_type = em28xx_eeprom_hash[i].tuner; em28xx_errdev("Your board has no unique USB ID.\n"); em28xx_errdev("A hint were successfully done, " @@ -504,6 +514,15 @@ static int em28xx_hint_board(struct em28xx *dev) } } + /* HINT method: I2C attached devices + * + * This method works for all boards. + * Uses a hash of i2c scanned devices. + * Devices with the same i2c attached chips will + * be considered equal. + * This method is less precise than the eeprom one. + */ + /* user did not request i2c scanning => do it now */ if (!dev->i2c_hash) em28xx_do_i2c_scan(dev);