misc: at24: replace memory_accessor with nvmem_device_read
authorAndrew Lunn <andrew@lunn.ch>
Fri, 26 Feb 2016 19:59:24 +0000 (20:59 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 2 Mar 2016 00:55:48 +0000 (16:55 -0800)
Now that the AT24 uses the NVMEM framework, replace the
memory_accessor in the setup() callback with nvmem API calls.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Acked-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Tested-by: Sekhar Nori <nsekhar@ti.com>
Acked-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/arm/mach-davinci/board-mityomapl138.c
arch/arm/mach-davinci/common.c
drivers/misc/eeprom/at24.c
include/linux/davinci_emac.h
include/linux/memory.h
include/linux/platform_data/at24.h

index de1316bf643a56fc3689a830ad04b4f1b69206f1..62ebac51bab93c0d40edaf5358e46088ee5ebb9a 100644 (file)
@@ -115,13 +115,14 @@ static void mityomapl138_cpufreq_init(const char *partnum)
 static void mityomapl138_cpufreq_init(const char *partnum) { }
 #endif
 
-static void read_factory_config(struct memory_accessor *a, void *context)
+static void read_factory_config(struct nvmem_device *nvmem, void *context)
 {
        int ret;
        const char *partnum = NULL;
        struct davinci_soc_info *soc_info = &davinci_soc_info;
 
-       ret = a->read(a, (char *)&factory_config, 0, sizeof(factory_config));
+       ret = nvmem_device_read(nvmem, 0, sizeof(factory_config),
+                               &factory_config);
        if (ret != sizeof(struct factory_config)) {
                pr_warn("Read Factory Config Failed: %d\n", ret);
                goto bad_config;
index a794f6d9d4440adbeebd8bb28a657999b37fafd5..f55ef2ef2f92eb88c9c7485e5bfda537af126d31 100644 (file)
@@ -28,13 +28,13 @@ EXPORT_SYMBOL(davinci_soc_info);
 void __iomem *davinci_intc_base;
 int davinci_intc_type;
 
-void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context)
+void davinci_get_mac_addr(struct nvmem_device *nvmem, void *context)
 {
        char *mac_addr = davinci_soc_info.emac_pdata->mac_addr;
        off_t offset = (off_t)context;
 
        /* Read MAC addr from EEPROM */
-       if (mem_acc->read(mem_acc, mac_addr, offset, ETH_ALEN) == ETH_ALEN)
+       if (nvmem_device_read(nvmem, offset, ETH_ALEN, mac_addr) == ETH_ALEN)
                pr_info("Read MAC addr from EEPROM: %pM\n", mac_addr);
 }
 
index f15cda93fc4cc45c662e18187674fa558f7315a6..089d6943f68ab1db6cfc93fe67fe0d0dd9d0bf90 100644 (file)
@@ -56,7 +56,6 @@
 
 struct at24_data {
        struct at24_platform_data chip;
-       struct memory_accessor macc;
        int use_smbus;
        int use_smbus_write;
 
@@ -409,30 +408,6 @@ static ssize_t at24_write(struct at24_data *at24, const char *buf, loff_t off,
 
 /*-------------------------------------------------------------------------*/
 
-/*
- * This lets other kernel code access the eeprom data. For example, it
- * might hold a board's Ethernet address, or board-specific calibration
- * data generated on the manufacturing floor.
- */
-
-static ssize_t at24_macc_read(struct memory_accessor *macc, char *buf,
-                        off_t offset, size_t count)
-{
-       struct at24_data *at24 = container_of(macc, struct at24_data, macc);
-
-       return at24_read(at24, buf, offset, count);
-}
-
-static ssize_t at24_macc_write(struct memory_accessor *macc, const char *buf,
-                         off_t offset, size_t count)
-{
-       struct at24_data *at24 = container_of(macc, struct at24_data, macc);
-
-       return at24_write(at24, buf, offset, count);
-}
-
-/*-------------------------------------------------------------------------*/
-
 /*
  * Provide a regmap interface, which is registered with the NVMEM
  * framework
@@ -600,16 +575,12 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
        at24->chip = chip;
        at24->num_addresses = num_addresses;
 
-       at24->macc.read = at24_macc_read;
-
        writable = !(chip.flags & AT24_FLAG_READONLY);
        if (writable) {
                if (!use_smbus || use_smbus_write) {
 
                        unsigned write_max = chip.page_size;
 
-                       at24->macc.write = at24_macc_write;
-
                        if (write_max > io_limit)
                                write_max = io_limit;
                        if (use_smbus && write_max > I2C_SMBUS_BLOCK_MAX)
@@ -683,7 +654,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id)
 
        /* export data to kernel code */
        if (chip.setup)
-               chip.setup(&at24->macc, chip.context);
+               chip.setup(at24->nvmem, chip.context);
 
        return 0;
 
index 5428885049941c86e46184deac5bbafa6e9df13a..05b97144d342512db6019230d3f0925e4ede47c1 100644 (file)
@@ -12,7 +12,7 @@
 #define _LINUX_DAVINCI_EMAC_H
 
 #include <linux/if_ether.h>
-#include <linux/memory.h>
+#include <linux/nvmem-consumer.h>
 
 struct mdio_platform_data {
        unsigned long           bus_freq;
@@ -46,5 +46,5 @@ enum {
        EMAC_VERSION_2, /* DM646x */
 };
 
-void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context);
+void davinci_get_mac_addr(struct nvmem_device *nvmem, void *context);
 #endif
index 8b8d8d12348e59219dbbce03c22a749a49368deb..b723a686fc1048f47eb94132ebdfdc0da0b0e6ea 100644 (file)
@@ -136,17 +136,6 @@ extern struct memory_block *find_memory_block(struct mem_section *);
 #define unregister_hotmemory_notifier(nb)  ({ (void)(nb); })
 #endif
 
-/*
- * 'struct memory_accessor' is a generic interface to provide
- * in-kernel access to persistent memory such as i2c or SPI EEPROMs
- */
-struct memory_accessor {
-       ssize_t (*read)(struct memory_accessor *, char *buf, off_t offset,
-                       size_t count);
-       ssize_t (*write)(struct memory_accessor *, const char *buf,
-                        off_t offset, size_t count);
-};
-
 /*
  * Kernel text modification mutex, used for code patching. Users of this lock
  * can sleep.
index c42aa89d34eeb46ff0ec5f4e68229ad1fa0fad2a..dc9a13e5acda164839dfd723b3f63562e7df21d5 100644 (file)
@@ -9,7 +9,7 @@
 #define _LINUX_AT24_H
 
 #include <linux/types.h>
-#include <linux/memory.h>
+#include <linux/nvmem-consumer.h>
 
 /**
  * struct at24_platform_data - data to set up at24 (generic eeprom) driver
@@ -17,7 +17,7 @@
  * @page_size: number of byte which can be written in one go
  * @flags: tunable options, check AT24_FLAG_* defines
  * @setup: an optional callback invoked after eeprom is probed; enables kernel
-       code to access eeprom via memory_accessor, see example
+       code to access eeprom via nvmem, see example
  * @context: optional parameter passed to setup()
  *
  * If you set up a custom eeprom type, please double-check the parameters.
  *
  * An example in pseudo code for a setup() callback:
  *
- * void get_mac_addr(struct memory_accessor *mem_acc, void *context)
+ * void get_mac_addr(struct mvmem_device *nvmem, void *context)
  * {
  *     u8 *mac_addr = ethernet_pdata->mac_addr;
  *     off_t offset = context;
  *
  *     // Read MAC addr from EEPROM
- *     if (mem_acc->read(mem_acc, mac_addr, offset, ETH_ALEN) == ETH_ALEN)
+ *     if (nvmem_device_read(nvmem, offset, ETH_ALEN, mac_addr) == ETH_ALEN)
  *             pr_info("Read MAC addr from EEPROM: %pM\n", mac_addr);
  * }
  *
@@ -48,7 +48,7 @@ struct at24_platform_data {
 #define AT24_FLAG_IRUGO                0x20    /* sysfs-entry will be world-readable */
 #define AT24_FLAG_TAKE8ADDR    0x10    /* take always 8 addresses (24c00) */
 
-       void            (*setup)(struct memory_accessor *, void *context);
+       void            (*setup)(struct nvmem_device *nvmem, void *context);
        void            *context;
 };