From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161062AbcBQKSO (ORCPT ); Wed, 17 Feb 2016 05:18:14 -0500 Received: from mail-wm0-f46.google.com ([74.125.82.46]:32788 "EHLO mail-wm0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1161041AbcBQKSJ (ORCPT ); Wed, 17 Feb 2016 05:18:09 -0500 Subject: Re: [PATCHv4 7/7] misc: at24: replace memory_accessor with nvmem_device_read To: Andrew Lunn , GregKH References: <1455666097-9115-1-git-send-email-andrew@lunn.ch> <1455666097-9115-8-git-send-email-andrew@lunn.ch> Cc: maxime.ripard@free-electrons.com, wsa@the-dreams.de, broonie@kernel.org, vz@mleia.com, fd@ti.com, linux-kernel@vger.kernel.org, pantelis.antoniou@konsulko.com, bgolaszewski@baylibre.com From: Srinivas Kandagatla Message-ID: <56C448DE.9030107@linaro.org> Date: Wed, 17 Feb 2016 10:18:06 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <1455666097-9115-8-git-send-email-andrew@lunn.ch> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 16/02/16 23:41, 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 Acked-by: Srinivas Kandagatla > --- > 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(-) Thanks for this patch, I like this. > > 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 > -#include > +#include > > 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 > -#include > +#include > > /** > * 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; > }; > >