Skip to content

Commit

Permalink
i2c: Convert remaining new-style drivers to use module aliasing
Browse files Browse the repository at this point in the history
Update all the remaining new-style i2c drivers to use standard module
aliasing instead of the old driver_name/type driver matching scheme.

Note that the tuner driver is a bit quirky at the moment, as it
overwrites i2c_client.name with arbitrary strings. We write "tuner"
back on remove, to make sure that driver cycling will work properly,
but there may still be troublesome corner cases.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
  • Loading branch information
Jean Delvare authored and Jean Delvare committed May 18, 2008
1 parent 238a871 commit af29486
Show file tree
Hide file tree
Showing 16 changed files with 143 additions and 39 deletions.
7 changes: 7 additions & 0 deletions drivers/media/video/cs5345.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,10 +160,17 @@ static int cs5345_probe(struct i2c_client *client,

/* ----------------------------------------------------------------------- */

static const struct i2c_device_id cs5345_id[] = {
{ "cs5345", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, cs5345_id);

static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "cs5345",
.driverid = I2C_DRIVERID_CS5345,
.command = cs5345_command,
.probe = cs5345_probe,
.id_table = cs5345_id,
};

10 changes: 9 additions & 1 deletion drivers/media/video/cs53l32a.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,8 @@ static int cs53l32a_probe(struct i2c_client *client,
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return -EIO;

snprintf(client->name, sizeof(client->name) - 1, "cs53l32a");
if (!id)
strlcpy(client->name, "cs53l32a", sizeof(client->name));

v4l_info(client, "chip found @ 0x%x (%s)\n",
client->addr << 1, client->adapter->name);
Expand Down Expand Up @@ -175,10 +176,17 @@ static int cs53l32a_probe(struct i2c_client *client,
return 0;
}

static const struct i2c_device_id cs53l32a_id[] = {
{ "cs53l32a", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, cs53l32a_id);

static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "cs53l32a",
.driverid = I2C_DRIVERID_CS53L32A,
.command = cs53l32a_command,
.probe = cs53l32a_probe,
.id_table = cs53l32a_id,
};

9 changes: 4 additions & 5 deletions drivers/media/video/cx18/cx18-i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ static const u8 hw_bus[] = {
};

/* This array should match the CX18_HW_ defines */
static const char * const hw_drivernames[] = {
static const char * const hw_devicenames[] = {
"tuner",
"tveeprom",
"cs5345",
Expand All @@ -95,8 +95,7 @@ int cx18_i2c_register(struct cx18 *cx, unsigned idx)
id = hw_driverids[idx];
bus = hw_bus[idx];
memset(&info, 0, sizeof(info));
strlcpy(info.driver_name, hw_drivernames[idx],
sizeof(info.driver_name));
strlcpy(info.type, hw_devicenames[idx], sizeof(info.type));
info.addr = hw_addrs[idx];
for (i = 0; i < I2C_CLIENTS_MAX; i++)
if (cx->i2c_clients[i] == NULL)
Expand Down Expand Up @@ -279,7 +278,7 @@ static const char *cx18_i2c_id_name(u32 id)

for (i = 0; i < ARRAY_SIZE(hw_driverids); i++)
if (hw_driverids[i] == id)
return hw_drivernames[i];
return hw_devicenames[i];
return "unknown device";
}

Expand All @@ -290,7 +289,7 @@ static const char *cx18_i2c_hw_name(u32 hw)

for (i = 0; i < ARRAY_SIZE(hw_driverids); i++)
if (1 << i == hw)
return hw_drivernames[i];
return hw_devicenames[i];
return "unknown device";
}

Expand Down
7 changes: 7 additions & 0 deletions drivers/media/video/cx25840/cx25840-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1284,10 +1284,17 @@ static int cx25840_remove(struct i2c_client *client)
return 0;
}

static const struct i2c_device_id cx25840_id[] = {
{ "cx25840", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, cx25840_id);

static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "cx25840",
.driverid = I2C_DRIVERID_CX25840,
.command = cx25840_command,
.probe = cx25840_probe,
.remove = cx25840_remove,
.id_table = cx25840_id,
};
13 changes: 6 additions & 7 deletions drivers/media/video/ivtv/ivtv-i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ static const u8 hw_addrs[] = {
};

/* This array should match the IVTV_HW_ defines */
static const char * const hw_drivernames[] = {
static const char * const hw_devicenames[] = {
"cx25840",
"saa7115",
"saa7127",
Expand All @@ -145,7 +145,7 @@ static const char * const hw_drivernames[] = {
"wm8775",
"cs53l32a",
"tveeprom",
"saa7115",
"saa7114",
"upd64031a",
"upd64083",
"saa717x",
Expand All @@ -167,8 +167,7 @@ int ivtv_i2c_register(struct ivtv *itv, unsigned idx)
return -1;
id = hw_driverids[idx];
memset(&info, 0, sizeof(info));
strlcpy(info.driver_name, hw_drivernames[idx],
sizeof(info.driver_name));
strlcpy(info.type, hw_devicenames[idx], sizeof(info.type));
info.addr = hw_addrs[idx];
for (i = 0; itv->i2c_clients[i] && i < I2C_CLIENTS_MAX; i++) {}

Expand Down Expand Up @@ -657,7 +656,7 @@ static const char *ivtv_i2c_id_name(u32 id)

for (i = 0; i < ARRAY_SIZE(hw_driverids); i++)
if (hw_driverids[i] == id)
return hw_drivernames[i];
return hw_devicenames[i];
return "unknown device";
}

Expand All @@ -668,7 +667,7 @@ static const char *ivtv_i2c_hw_name(u32 hw)

for (i = 0; i < ARRAY_SIZE(hw_driverids); i++)
if (1 << i == hw)
return hw_drivernames[i];
return hw_devicenames[i];
return "unknown device";
}

Expand Down Expand Up @@ -770,7 +769,7 @@ int init_ivtv_i2c(struct ivtv *itv)
* same size and GPIO must be the last entry.
*/
if (ARRAY_SIZE(hw_driverids) != ARRAY_SIZE(hw_addrs) ||
ARRAY_SIZE(hw_drivernames) != ARRAY_SIZE(hw_addrs) ||
ARRAY_SIZE(hw_devicenames) != ARRAY_SIZE(hw_addrs) ||
IVTV_HW_GPIO != (1 << (ARRAY_SIZE(hw_addrs) - 1)) ||
hw_driverids[ARRAY_SIZE(hw_addrs) - 1]) {
IVTV_ERR("Mismatched I2C hardware arrays\n");
Expand Down
9 changes: 7 additions & 2 deletions drivers/media/video/m52790.c
Original file line number Diff line number Diff line change
Expand Up @@ -135,8 +135,6 @@ static int m52790_probe(struct i2c_client *client,
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return -EIO;

snprintf(client->name, sizeof(client->name) - 1, "m52790");

v4l_info(client, "chip found @ 0x%x (%s)\n",
client->addr << 1, client->adapter->name);

Expand All @@ -159,11 +157,18 @@ static int m52790_remove(struct i2c_client *client)

/* ----------------------------------------------------------------------- */

static const struct i2c_device_id m52790_id[] = {
{ "m52790", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, m52790_id);

static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "m52790",
.driverid = I2C_DRIVERID_M52790,
.command = m52790_command,
.probe = m52790_probe,
.remove = m52790_remove,
.id_table = m52790_id,
};

17 changes: 12 additions & 5 deletions drivers/media/video/msp3400-driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -815,7 +815,8 @@ static int msp_probe(struct i2c_client *client, const struct i2c_device_id *id)
int msp_product, msp_prod_hi, msp_prod_lo;
int msp_rom;

snprintf(client->name, sizeof(client->name) - 1, "msp3400");
if (!id)
strlcpy(client->name, "msp3400", sizeof(client->name));

if (msp_reset(client) == -1) {
v4l_dbg(1, msp_debug, client, "msp3400 not found\n");
Expand Down Expand Up @@ -864,9 +865,6 @@ static int msp_probe(struct i2c_client *client, const struct i2c_device_id *id)
msp_revision = (state->rev1 & 0x0f) + '@';
msp_hard = ((state->rev1 >> 8) & 0xff) + '@';
msp_rom = state->rev2 & 0x1f;
snprintf(client->name, sizeof(client->name), "MSP%d4%02d%c-%c%d",
msp_family, msp_product,
msp_revision, msp_hard, msp_rom);
/* Rev B=2, C=3, D=4, G=7 */
state->ident = msp_family * 10000 + 4000 + msp_product * 10 +
msp_revision - '@';
Expand Down Expand Up @@ -931,7 +929,9 @@ static int msp_probe(struct i2c_client *client, const struct i2c_device_id *id)
}

/* hello world :-) */
v4l_info(client, "%s found @ 0x%x (%s)\n", client->name,
v4l_info(client, "MSP%d4%02d%c-%c%d found @ 0x%x (%s)\n",
msp_family, msp_product,
msp_revision, msp_hard, msp_rom,
client->addr << 1, client->adapter->name);
v4l_info(client, "%s ", client->name);
if (state->has_nicam && state->has_radio)
Expand Down Expand Up @@ -987,6 +987,12 @@ static int msp_remove(struct i2c_client *client)

/* ----------------------------------------------------------------------- */

static const struct i2c_device_id msp_id[] = {
{ "msp3400", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, msp_id);

static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "msp3400",
.driverid = I2C_DRIVERID_MSP3400,
Expand All @@ -995,6 +1001,7 @@ static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.remove = msp_remove,
.suspend = msp_suspend,
.resume = msp_resume,
.id_table = msp_id,
};


Expand Down
40 changes: 28 additions & 12 deletions drivers/media/video/saa7115.c
Original file line number Diff line number Diff line change
Expand Up @@ -1456,14 +1456,13 @@ static int saa7115_probe(struct i2c_client *client,
struct saa711x_state *state;
int i;
char name[17];
u8 chip_id;
char chip_id;
int autodetect = !id || id->driver_data == 1;

/* Check if the adapter supports the needed features */
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return -EIO;

snprintf(client->name, sizeof(client->name) - 1, "saa7115");

for (i = 0; i < 0x0f; i++) {
saa711x_write(client, 0, i);
name[i] = (saa711x_read(client, 0) & 0x0f) + '0';
Expand All @@ -1472,8 +1471,7 @@ static int saa7115_probe(struct i2c_client *client,
}
name[i] = '\0';

saa711x_write(client, 0, 5);
chip_id = saa711x_read(client, 0) & 0x0f;
chip_id = name[5];

/* Check whether this chip is part of the saa711x series */
if (memcmp(name, "1f711", 5)) {
Expand All @@ -1482,8 +1480,14 @@ static int saa7115_probe(struct i2c_client *client,
return -ENODEV;
}

snprintf(client->name, sizeof(client->name) - 1, "saa711%d",chip_id);
v4l_info(client, "saa711%d found (%s) @ 0x%x (%s)\n", chip_id, name, client->addr << 1, client->adapter->name);
/* Safety check */
if (!autodetect && id->name[6] != chip_id) {
v4l_warn(client, "found saa711%c while %s was expected\n",
chip_id, id->name);
}
snprintf(client->name, sizeof(client->name), "saa711%c", chip_id);
v4l_info(client, "saa711%c found (%s) @ 0x%x (%s)\n", chip_id, name,
client->addr << 1, client->adapter->name);

state = kzalloc(sizeof(struct saa711x_state), GFP_KERNEL);
i2c_set_clientdata(client, state);
Expand All @@ -1499,19 +1503,19 @@ static int saa7115_probe(struct i2c_client *client,
state->hue = 0;
state->sat = 64;
switch (chip_id) {
case 1:
case '1':
state->ident = V4L2_IDENT_SAA7111;
break;
case 3:
case '3':
state->ident = V4L2_IDENT_SAA7113;
break;
case 4:
case '4':
state->ident = V4L2_IDENT_SAA7114;
break;
case 5:
case '5':
state->ident = V4L2_IDENT_SAA7115;
break;
case 8:
case '8':
state->ident = V4L2_IDENT_SAA7118;
break;
default:
Expand Down Expand Up @@ -1553,12 +1557,24 @@ static int saa7115_remove(struct i2c_client *client)
return 0;
}

static const struct i2c_device_id saa7115_id[] = {
{ "saa711x", 1 }, /* autodetect */
{ "saa7111", 0 },
{ "saa7113", 0 },
{ "saa7114", 0 },
{ "saa7115", 0 },
{ "saa7118", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, saa7115_id);

static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "saa7115",
.driverid = I2C_DRIVERID_SAA711X,
.command = saa7115_command,
.probe = saa7115_probe,
.remove = saa7115_remove,
.legacy_class = I2C_CLASS_TV_ANALOG | I2C_CLASS_TV_DIGITAL,
.id_table = saa7115_id,
};

9 changes: 7 additions & 2 deletions drivers/media/video/saa7127.c
Original file line number Diff line number Diff line change
Expand Up @@ -672,8 +672,6 @@ static int saa7127_probe(struct i2c_client *client,
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return -EIO;

snprintf(client->name, sizeof(client->name) - 1, "saa7127");

v4l_dbg(1, debug, client, "detecting saa7127 client on address 0x%x\n",
client->addr << 1);

Expand Down Expand Up @@ -741,11 +739,18 @@ static int saa7127_remove(struct i2c_client *client)

/* ----------------------------------------------------------------------- */

static struct i2c_device_id saa7127_id[] = {
{ "saa7127", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, saa7127_id);

static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "saa7127",
.driverid = I2C_DRIVERID_SAA7127,
.command = saa7127_command,
.probe = saa7127_probe,
.remove = saa7127_remove,
.id_table = saa7127_id,
};

9 changes: 7 additions & 2 deletions drivers/media/video/saa717x.c
Original file line number Diff line number Diff line change
Expand Up @@ -1429,8 +1429,6 @@ static int saa717x_probe(struct i2c_client *client,
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
return -EIO;

snprintf(client->name, sizeof(client->name) - 1, "saa717x");

if (saa717x_write(client, 0x5a4, 0xfe) &&
saa717x_write(client, 0x5a5, 0x0f) &&
saa717x_write(client, 0x5a6, 0x00) &&
Expand Down Expand Up @@ -1507,11 +1505,18 @@ static int saa717x_remove(struct i2c_client *client)

/* ----------------------------------------------------------------------- */

static const struct i2c_device_id saa717x_id[] = {
{ "saa717x", 0 },
{ }
};
MODULE_DEVICE_TABLE(i2c, saa717x_id);

static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "saa717x",
.driverid = I2C_DRIVERID_SAA717X,
.command = saa717x_command,
.probe = saa717x_probe,
.remove = saa717x_remove,
.legacy_class = I2C_CLASS_TV_ANALOG | I2C_CLASS_TV_DIGITAL,
.id_table = saa717x_id,
};
Loading

0 comments on commit af29486

Please sign in to comment.