Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 108147
b: refs/heads/master
c: 8ff69ee
h: refs/heads/master
i:
  108145: c88fc3b
  108143: f820210
v: v3
  • Loading branch information
Jean Delvare authored and Jean Delvare committed Aug 10, 2008
1 parent b78874f commit b43c010
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 93 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2ce5b34fd519275d788338ae692e4b71df6661d4
refs/heads/master: 8ff69eebf5bf8a123a117b78412d5efb85765d8b
114 changes: 22 additions & 92 deletions trunk/drivers/hwmon/lm75.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,11 @@ enum lm75_type { /* keep sorted in alphabetical order */
tmp75,
};

/* Addresses scanned by legacy style driver binding */
/* Addresses scanned */
static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c,
0x4d, 0x4e, 0x4f, I2C_CLIENT_END };

/* Insmod parameters (only for legacy style driver binding) */
/* Insmod parameters */
I2C_CLIENT_INSMOD_1(lm75);


Expand All @@ -72,7 +72,6 @@ static const u8 LM75_REG_TEMP[3] = {

/* Each client has this additional data */
struct lm75_data {
struct i2c_client *client;
struct device *hwmon_dev;
struct mutex update_lock;
u8 orig_conf;
Expand Down Expand Up @@ -138,7 +137,7 @@ static const struct attribute_group lm75_group = {

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

/* "New style" I2C driver binding -- following the driver model */
/* device probe and removal */

static int
lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
Expand All @@ -157,8 +156,6 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id)
return -ENOMEM;

i2c_set_clientdata(client, data);

data->client = client;
mutex_init(&data->update_lock);

/* Set to LM75 resolution (9 bits, 1/2 degree C) and range.
Expand Down Expand Up @@ -236,45 +233,16 @@ static const struct i2c_device_id lm75_ids[] = {
};
MODULE_DEVICE_TABLE(i2c, lm75_ids);

static struct i2c_driver lm75_driver = {
.driver = {
.name = "lm75",
},
.probe = lm75_probe,
.remove = lm75_remove,
.id_table = lm75_ids,
};

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

/* "Legacy" I2C driver binding */

static struct i2c_driver lm75_legacy_driver;

/* This function is called by i2c_probe */
static int lm75_detect(struct i2c_adapter *adapter, int address, int kind)
/* Return 0 if detection is successful, -ENODEV otherwise */
static int lm75_detect(struct i2c_client *new_client, int kind,
struct i2c_board_info *info)
{
struct i2c_adapter *adapter = new_client->adapter;
int i;
struct i2c_client *new_client;
int err = 0;

if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA |
I2C_FUNC_SMBUS_WORD_DATA))
goto exit;

/* OK. For now, we presume we have a valid address. We create the
client structure, even though there may be no sensor present.
But it allows us to use i2c_smbus_read_*_data() calls. */
new_client = kzalloc(sizeof *new_client, GFP_KERNEL);
if (!new_client) {
err = -ENOMEM;
goto exit;
}

new_client->addr = address;
new_client->adapter = adapter;
new_client->driver = &lm75_legacy_driver;
new_client->flags = 0;
return -ENODEV;

/* Now, we do the remaining detection. There is no identification-
dedicated register so we have to rely on several tricks:
Expand All @@ -294,71 +262,44 @@ static int lm75_detect(struct i2c_adapter *adapter, int address, int kind)
|| i2c_smbus_read_word_data(new_client, 5) != hyst
|| i2c_smbus_read_word_data(new_client, 6) != hyst
|| i2c_smbus_read_word_data(new_client, 7) != hyst)
goto exit_free;
return -ENODEV;
os = i2c_smbus_read_word_data(new_client, 3);
if (i2c_smbus_read_word_data(new_client, 4) != os
|| i2c_smbus_read_word_data(new_client, 5) != os
|| i2c_smbus_read_word_data(new_client, 6) != os
|| i2c_smbus_read_word_data(new_client, 7) != os)
goto exit_free;
return -ENODEV;

/* Unused bits */
if (conf & 0xe0)
goto exit_free;
return -ENODEV;

/* Addresses cycling */
for (i = 8; i < 0xff; i += 8)
if (i2c_smbus_read_byte_data(new_client, i + 1) != conf
|| i2c_smbus_read_word_data(new_client, i + 2) != hyst
|| i2c_smbus_read_word_data(new_client, i + 3) != os)
goto exit_free;
return -ENODEV;
}

/* NOTE: we treat "force=..." and "force_lm75=..." the same.
* Only new-style driver binding distinguishes chip types.
*/
strlcpy(new_client->name, "lm75", I2C_NAME_SIZE);

/* Tell the I2C layer a new client has arrived */
err = i2c_attach_client(new_client);
if (err)
goto exit_free;

err = lm75_probe(new_client, NULL);
if (err < 0)
goto exit_detach;
strlcpy(info->type, "lm75", I2C_NAME_SIZE);

return 0;

exit_detach:
i2c_detach_client(new_client);
exit_free:
kfree(new_client);
exit:
return err;
}

static int lm75_attach_adapter(struct i2c_adapter *adapter)
{
if (!(adapter->class & I2C_CLASS_HWMON))
return 0;
return i2c_probe(adapter, &addr_data, lm75_detect);
}

static int lm75_detach_client(struct i2c_client *client)
{
lm75_remove(client);
i2c_detach_client(client);
kfree(client);
return 0;
}

static struct i2c_driver lm75_legacy_driver = {
static struct i2c_driver lm75_driver = {
.class = I2C_CLASS_HWMON,
.driver = {
.name = "lm75_legacy",
.name = "lm75",
},
.attach_adapter = lm75_attach_adapter,
.detach_client = lm75_detach_client,
.probe = lm75_probe,
.remove = lm75_remove,
.id_table = lm75_ids,
.detect = lm75_detect,
.address_data = &addr_data,
};

/*-----------------------------------------------------------------------*/
Expand Down Expand Up @@ -424,22 +365,11 @@ static struct lm75_data *lm75_update_device(struct device *dev)

static int __init sensors_lm75_init(void)
{
int status;

status = i2c_add_driver(&lm75_driver);
if (status < 0)
return status;

status = i2c_add_driver(&lm75_legacy_driver);
if (status < 0)
i2c_del_driver(&lm75_driver);

return status;
return i2c_add_driver(&lm75_driver);
}

static void __exit sensors_lm75_exit(void)
{
i2c_del_driver(&lm75_legacy_driver);
i2c_del_driver(&lm75_driver);
}

Expand Down

0 comments on commit b43c010

Please sign in to comment.