[PATCH v7 1/3] mtd: spi-nor: spansion: Add support for Read/Write Any Register
Tudor.Ambarus at microchip.com
Tudor.Ambarus at microchip.com
Sun Jan 30 23:50:24 PST 2022
On 1/28/22 18:20, Pratyush Yadav wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>
> On 28/01/22 09:43AM, Tudor.Ambarus at microchip.com wrote:
>> On 7/19/21 11:03, tkuw584924 at gmail.com wrote:
>>> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
>>>
>>> From: Takahiro Kuwano <Takahiro.Kuwano at infineon.com>
>>>
>>> Some of Spansion/Cypress chips support Read/Write Any Register commands.
>>> These commands are mainly used to write volatile registers.
>>>
>>> The Read Any Register instruction (65h) is followed by register address
>>> and dummy cycles, then the selected register byte is returned.
>>>
>>> The Write Any Register instruction (71h) is followed by register address
>>> and register byte to write.
>>>
>>> Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano at infineon.com>
>>> ---
>>> Changes in v7:
>>> - No change
>>>
>>> Changes in v6:
>>> - Add helper functions for controller_ops
>>> - Add 'reg_addr_width' parameter to spansion_read/write_any_reg()
>>> - Remove spi_nor_write_enable() from spansion_write_any_reg() and modified
>>> function header comment
>>>
>>> Changes in v5:
>>> - Fix 'if (ret == 1)' to 'if (ret < 0)' in spansion_read_any_reg()
>>>
>>> Changes in v4:
>>> - Fix dummy cycle calculation in spansion_read_any_reg()
>>> - Modify comment for spansion_write_any_reg()
>>>
>>> Changes in v3:
>>> - Cleanup implementation
>>>
>>> drivers/mtd/spi-nor/spansion.c | 142 +++++++++++++++++++++++++++++++++
>>> 1 file changed, 142 insertions(+)
>>>
>>> +/**
>>> + * spansion_read_any_reg() - Read Any Register.
>>> + * @nor: pointer to a 'struct spi_nor'
>>> + * @reg_addr: register address
>>> + * @reg_addr_width: number of address bytes
>>> + * @reg_dummy: number of dummy cycles for register read
>>> + * @reg_val: pointer to a buffer where the register value is copied
>>> + *
>>> + * Return: 0 on success, -errno otherwise.
>>> + */
>>> +static int spansion_read_any_reg(struct spi_nor *nor, u32 reg_addr,
>>> + u8 reg_addr_width, u8 reg_dummy, u8 *reg_val)
>>
>> how about making this a generic core method? I'm sure there are other SPI NOR
>> vendors that use registers indexed by address. How about introducing:
>>
>> struct spi_nor_reg {
>> u32 addr;
>> u8 addr_width;
>> u8 dummy;
>> u8 opcode;
>> u8 val;
>> };
>>
>> and passing a pointer to this struct as argument.
>
> Wouldn't it be simpler if they fill it in a struct spi_mem_op, and then
> just pass that in as a "template"?
>
sure, sounds fine. I would like a generic method with less function parameters,
if possible. Let's see what Takahiro will propose.
More information about the linux-mtd
mailing list