提交 318aa9c6 编写于 作者: B Bartosz Golaszewski 提交者: Wolfram Sang

eeprom: at24: call read/write functions via function pointers

The first step in simplifying the read and write functions is to call
them via function pointers stored in at24_data. When we eventually
split the routines into smaller ones (depending on whether they use
smbus or i2c operations) we'll simply assign them to said pointers
instead of checking the flags at runtime every time we read/write.
Signed-off-by: NBartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: NWolfram Sang <wsa@the-dreams.de>
上级 2da78ac3
...@@ -58,6 +58,10 @@ struct at24_data { ...@@ -58,6 +58,10 @@ struct at24_data {
int use_smbus; int use_smbus;
int use_smbus_write; int use_smbus_write;
ssize_t (*read_func)(struct at24_data *, char *, unsigned int, size_t);
ssize_t (*write_func)(struct at24_data *,
const char *, unsigned int, size_t);
/* /*
* Lock protects against activities from other Linux tasks, * Lock protects against activities from other Linux tasks,
* but not from changes by other I2C masters. * but not from changes by other I2C masters.
...@@ -351,7 +355,7 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count) ...@@ -351,7 +355,7 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count)
while (count) { while (count) {
int status; int status;
status = at24_eeprom_read(at24, buf, off, count); status = at24->read_func(at24, buf, off, count);
if (status < 0) { if (status < 0) {
mutex_unlock(&at24->lock); mutex_unlock(&at24->lock);
return status; return status;
...@@ -383,7 +387,7 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count) ...@@ -383,7 +387,7 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count)
while (count) { while (count) {
int status; int status;
status = at24_eeprom_write(at24, buf, off, count); status = at24->write_func(at24, buf, off, count);
if (status < 0) { if (status < 0) {
mutex_unlock(&at24->lock); mutex_unlock(&at24->lock);
return status; return status;
...@@ -518,6 +522,9 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) ...@@ -518,6 +522,9 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
at24->chip = chip; at24->chip = chip;
at24->num_addresses = num_addresses; at24->num_addresses = num_addresses;
at24->read_func = at24_eeprom_read;
at24->write_func = at24_eeprom_write;
writable = !(chip.flags & AT24_FLAG_READONLY); writable = !(chip.flags & AT24_FLAG_READONLY);
if (writable) { if (writable) {
if (!use_smbus || use_smbus_write) { if (!use_smbus || use_smbus_write) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册