Skip to content

Commit a3fe09b

Browse files
author
Wolfram Sang
committed
Merge tag 'at24-4.15-rc3-fixes-for-wolfram' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux into i2c/for-current
Sakari fixed a regression introduced during the 4.15 merge window and David submitted a fix for an issue that has existed in at24 since introducing nvmem.
2 parents 04271ce + 7f6d2ec commit a3fe09b

File tree

1 file changed

+11
-15
lines changed

1 file changed

+11
-15
lines changed

drivers/misc/eeprom/at24.c

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ static ssize_t at24_eeprom_write_i2c(struct at24_data *at24, const char *buf,
562562
static int at24_read(void *priv, unsigned int off, void *val, size_t count)
563563
{
564564
struct at24_data *at24 = priv;
565-
struct i2c_client *client;
565+
struct device *dev = &at24->client[0]->dev;
566566
char *buf = val;
567567
int ret;
568568

@@ -572,11 +572,9 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count)
572572
if (off + count > at24->chip.byte_len)
573573
return -EINVAL;
574574

575-
client = at24_translate_offset(at24, &off);
576-
577-
ret = pm_runtime_get_sync(&client->dev);
575+
ret = pm_runtime_get_sync(dev);
578576
if (ret < 0) {
579-
pm_runtime_put_noidle(&client->dev);
577+
pm_runtime_put_noidle(dev);
580578
return ret;
581579
}
582580

@@ -592,7 +590,7 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count)
592590
status = at24->read_func(at24, buf, off, count);
593591
if (status < 0) {
594592
mutex_unlock(&at24->lock);
595-
pm_runtime_put(&client->dev);
593+
pm_runtime_put(dev);
596594
return status;
597595
}
598596
buf += status;
@@ -602,15 +600,15 @@ static int at24_read(void *priv, unsigned int off, void *val, size_t count)
602600

603601
mutex_unlock(&at24->lock);
604602

605-
pm_runtime_put(&client->dev);
603+
pm_runtime_put(dev);
606604

607605
return 0;
608606
}
609607

610608
static int at24_write(void *priv, unsigned int off, void *val, size_t count)
611609
{
612610
struct at24_data *at24 = priv;
613-
struct i2c_client *client;
611+
struct device *dev = &at24->client[0]->dev;
614612
char *buf = val;
615613
int ret;
616614

@@ -620,11 +618,9 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count)
620618
if (off + count > at24->chip.byte_len)
621619
return -EINVAL;
622620

623-
client = at24_translate_offset(at24, &off);
624-
625-
ret = pm_runtime_get_sync(&client->dev);
621+
ret = pm_runtime_get_sync(dev);
626622
if (ret < 0) {
627-
pm_runtime_put_noidle(&client->dev);
623+
pm_runtime_put_noidle(dev);
628624
return ret;
629625
}
630626

@@ -640,7 +636,7 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count)
640636
status = at24->write_func(at24, buf, off, count);
641637
if (status < 0) {
642638
mutex_unlock(&at24->lock);
643-
pm_runtime_put(&client->dev);
639+
pm_runtime_put(dev);
644640
return status;
645641
}
646642
buf += status;
@@ -650,7 +646,7 @@ static int at24_write(void *priv, unsigned int off, void *val, size_t count)
650646

651647
mutex_unlock(&at24->lock);
652648

653-
pm_runtime_put(&client->dev);
649+
pm_runtime_put(dev);
654650

655651
return 0;
656652
}
@@ -880,7 +876,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
880876
at24->nvmem_config.reg_read = at24_read;
881877
at24->nvmem_config.reg_write = at24_write;
882878
at24->nvmem_config.priv = at24;
883-
at24->nvmem_config.stride = 4;
879+
at24->nvmem_config.stride = 1;
884880
at24->nvmem_config.word_size = 1;
885881
at24->nvmem_config.size = chip.byte_len;
886882

0 commit comments

Comments
 (0)