+ adding davinci maintainers to the loop.

Hi Andrew,

Not sure which tree should take the patch, but we needs acks from the mach-davinci maitainers.

Other option is to defer this patch till other 6 patches are merged into mainline.

--srini

On 18/02/16 23:17, Andrew Lunn wrote:
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 <[email protected]>
Acked-by: Srinivas Kandagatla <[email protected]>
---
  arch/arm/mach-davinci/board-mityomapl138.c |  5 +++--
  arch/arm/mach-davinci/common.c             |  4 ++--
  drivers/misc/eeprom/at24.c                 | 31 +-----------------------------
  include/linux/davinci_emac.h               |  4 ++--
  include/linux/memory.h                     | 11 -----------
  include/linux/platform_data/at24.h         | 10 +++++-----
  6 files changed, 13 insertions(+), 52 deletions(-)

diff --git a/arch/arm/mach-davinci/board-mityomapl138.c 
b/arch/arm/mach-davinci/board-mityomapl138.c
index de1316bf643a..62ebac51bab9 100644
--- a/arch/arm/mach-davinci/board-mityomapl138.c
+++ b/arch/arm/mach-davinci/board-mityomapl138.c
@@ -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;
diff --git a/arch/arm/mach-davinci/common.c b/arch/arm/mach-davinci/common.c
index a794f6d9d444..f55ef2ef2f92 100644
--- a/arch/arm/mach-davinci/common.c
+++ b/arch/arm/mach-davinci/common.c
@@ -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);
  }

diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
index f15cda93fc4c..089d6943f68a 100644
--- a/drivers/misc/eeprom/at24.c
+++ b/drivers/misc/eeprom/at24.c
@@ -56,7 +56,6 @@

  struct at24_data {
        struct at24_platform_data chip;
-       struct memory_accessor macc;
        int use_smbus;
        int use_smbus_write;

@@ -410,30 +409,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;

diff --git a/include/linux/davinci_emac.h b/include/linux/davinci_emac.h
index 542888504994..05b97144d342 100644
--- a/include/linux/davinci_emac.h
+++ b/include/linux/davinci_emac.h
@@ -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
diff --git a/include/linux/memory.h b/include/linux/memory.h
index 8b8d8d12348e..b723a686fc10 100644
--- a/include/linux/memory.h
+++ b/include/linux/memory.h
@@ -137,17 +137,6 @@ extern struct memory_block *find_memory_block(struct 
mem_section *);
  #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.
   */
diff --git a/include/linux/platform_data/at24.h 
b/include/linux/platform_data/at24.h
index c42aa89d34ee..dc9a13e5acda 100644
--- a/include/linux/platform_data/at24.h
+++ b/include/linux/platform_data/at24.h
@@ -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.
@@ -26,13 +26,13 @@
   *
   * 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;
  };


Reply via email to