linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/3] Add control driver for ST M24LR RFID/NFC EEPROM chips
@ 2025-06-01 15:30 Abd-Alrhman Masalkhi
  2025-06-01 15:30 ` [PATCH v2 1/3] dt-bindings: eeprom: Add ST M24LR control interface Abd-Alrhman Masalkhi
                   ` (3 more replies)
  0 siblings, 4 replies; 15+ messages in thread
From: Abd-Alrhman Masalkhi @ 2025-06-01 15:30 UTC (permalink / raw)
  To: linux-kernel, devicetree
  Cc: arnd, gregkh, robh, krzk+dt, conor+dt, abd.masalkhi

This patch series adds support for the control interface of STMicroelectronics 
M24LR RFID/NFC EEPROM devices, such as the M24LR04E-R. The chip exposes two 
I2C addresses and two distinct address spaces: one for the system parameter 
sector and another for the EEPROM memory. These address spaces overlap (both
start at address 0). Due to this overlap, the chip cannot be represented by a
single Device Tree node and handled by the standard at24 driver.

While it might be possible to model the system parameter sector and EEPROM
as two separate DT nodes, each handled by the standard at24 driver, this
leads to synchronization problems. For example, if a multi-page EEPROM write
is in progress and a control command (e.g., a i2c write lock) is issued
concurrently, it can result in incomplete or inconsistent writeing.

To overcome these issues, while maintaining a clean architecture and ensuring
synchronization, the chip is managed by two drivers:

1- The first driver exposes the system parameter sector and acts as an I2C mux
   (gate) for EEPROM access. Using an I2C mux solves the synchronization issue.
   This patch series implements this driver.
2- The second is the standard at24 driver, which handles the EEPROM.

Tested on: M24LR04E-R using Yocto on Raspberry Pi 4

Signed-off-by: Abd-Alrhman Masalkhi <abd.masalkhi@gmail.com>

Abd-Alrhman Masalkhi (3):
  dt-bindings: eeprom: Add ST M24LR control interface
  misc: add sysfs control driver for ST M24LR series RFID/NFC chips
  ABI: sysfs: document control attributes for ST M24LR

 .../testing/sysfs-bus-i2c-devices-m24lr_ctl   |  96 +++
 .../devicetree/bindings/eeprom/st,m24lr.yaml  |  72 ++
 drivers/misc/Kconfig                          |  15 +
 drivers/misc/Makefile                         |   1 +
 drivers/misc/m24lr_ctl.c                      | 677 ++++++++++++++++++
 5 files changed, 861 insertions(+)
 create mode 100644 Documentation/ABI/testing/sysfs-bus-i2c-devices-m24lr_ctl
 create mode 100644 Documentation/devicetree/bindings/eeprom/st,m24lr.yaml
 create mode 100644 drivers/misc/m24lr_ctl.c

-- 
2.43.0


^ permalink raw reply	[flat|nested] 15+ messages in thread
* Re: [PATCH 1/3] dt-bindings: misc: Add binding for ST M24LR control interface
@ 2025-05-31 13:37 Krzysztof Kozlowski
  2025-06-01  7:31 ` [PATCH v2 1/3] dt-bindings: Add Device Tree " Abd-Alrhman Masalkhi
  0 siblings, 1 reply; 15+ messages in thread
From: Krzysztof Kozlowski @ 2025-05-31 13:37 UTC (permalink / raw)
  To: Abd-Alrhman Masalkhi, linux-kernel, devicetree
  Cc: robh, krzk+dt, conor+dt, arnd, gregkh

On 31/05/2025 10:11, Abd-Alrhman Masalkhi wrote:
> Add a Device Tree binding for the STMicroelectronics M24LR series
> RFID/NFC EEPROM chips (e.g., M24LR04E-R), which support a separate
> I2C interface for control and configuration.
> 
> This binding documents the control interface that is managed by
> a dedicated driver exposing sysfs attributes. The EEPROM memory
> interface is handled by the standard 'at24' driver and is
> represented as a child node in the Device Tree.
> 
> Signed-off-by: Abd-Alrhman Masalkhi <abd.masalkhi@gmail.com>
> ---
>  .../devicetree/bindings/misc/st,m24lr.yaml    | 70 +++++++++++++++++++

That's not a misc device, but eeprom. Place it in appropriate directory.

A nit, subject: drop second/last, redundant "binding for". The
"dt-bindings" prefix is already stating that these are bindings.
See also:
https://elixir.bootlin.com/linux/v6.7-rc8/source/Documentation/devicetree/bindings/submitting-patches.rst#L18


>  1 file changed, 70 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/misc/st,m24lr.yaml
> 
> diff --git a/Documentation/devicetree/bindings/misc/st,m24lr.yaml b/Documentation/devicetree/bindings/misc/st,m24lr.yaml
> new file mode 100644
> index 000000000000..5a8f5aef13ec
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/misc/st,m24lr.yaml
> @@ -0,0 +1,70 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/misc/st,m24lr.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: STMicroelectronics M24LR Series NFC/RFID EEPROM Control Interface
> +
> +maintainers:
> +  - name: Abd-Alrhman Masalkhi
> +    email: abd.masalkhi@gmail.com
> +
> +description: |
> +  This binding describes the control interface for STMicroelectronics

Describe the hardware, not the binding.

> +  M24LR series RFID/NFC EEPROM chips (e.g., M24LR04E-R, M24LR16E-R).
> +  This driver provides sysfs access to device-specific control registers
> +  (authentication, UID, etc.) over the I2C interface. It act as a

Describe hardware, not drivers.

> +  I2C gate for the EEPROM. Therefore, The EEPROM is represented as a
> +  child node under a port and is accessed through a separate driver
> +  (the standard 'at24' driver). This implementation is possible because

again, describe hardware not driver

> +  the M24LR chips uses two I2C addresses: one for accessing the
> +  system parameter sector and another for the EEPROM.

This suggests you have two I2C addresses for one device, not two devices
with parent child relationship.

> +
> +allOf:
> +  - $ref: "i2c-mux.yaml#"

Drop quotes. So this is I2C mux or EEPROM?

> +
> +properties:
> +  compatible:
> +    enum:
> +    - st,m24lr04e-r
> +    - st,m24lr16e-r
> +    - st,m24lr64e-r
> +
> +  reg:
> +    maxItems: 1
> +    description: I2C address of the device.

Drop description, redundant.


This device is not compatible with AT24?

> +
> +  pagesize:
> +    $ref: /schemas/types.yaml#/definitions/uint32
> +    description: >
> +      Maximum number of bytes that can be written in a single I2C
> +      transaction. the default is 1.

enum:
default:

and drop redundant free form text.

> +
> +required:
> +  - compatible
> +  - reg
> +
> +additionalProperties: false

unevaluatedProperties instead

> +
> +examples:
> +  - |
> +    i2c {
> +      m24lr@57 {

Node names should be generic. See also an explanation and list of
examples (not exhaustive) in DT specification:
https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation


> +        compatible = "st,m24lr04e-r";
> +        reg = <0x57>;
> +
> +        i2c-gate {
> +          #address-cells = <1>;
> +          #size-cells = <0>;
> +
> +          m24lr_eeprom@53 {

Node names should be generic. See also an explanation and list of
examples (not exhaustive) in DT specification:
https://devicetree-specification.readthedocs.io/en/latest/chapter2-devicetree-basics.html#generic-names-recommendation


> +            compatible = "atmel,24c04";
> +            reg = <0x53>;
> +            address-width = <16>;
> +            pagesize = <4>;
> +          };
> +        };
> +      };
> +    };
> +...
> \ No newline at end of file


Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2025-06-03  6:56 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-01 15:30 [PATCH v2 0/3] Add control driver for ST M24LR RFID/NFC EEPROM chips Abd-Alrhman Masalkhi
2025-06-01 15:30 ` [PATCH v2 1/3] dt-bindings: eeprom: Add ST M24LR control interface Abd-Alrhman Masalkhi
2025-06-01 15:42   ` Krzysztof Kozlowski
2025-06-02  3:48     ` [PATCH v2 1/3] dt-bindings: Add Device Tree binding for " Abd-Alrhman Masalkhi
2025-06-02  6:28       ` Krzysztof Kozlowski
2025-06-02 17:23         ` Abd-Alrhman Masalkhi
2025-06-02 18:11           ` Krzysztof Kozlowski
2025-06-02 17:47             ` Abd-Alrhman Masalkhi
2025-06-01 16:33   ` [PATCH v2 1/3] dt-bindings: eeprom: Add " Rob Herring (Arm)
2025-06-03  5:40     ` Abd-Alrhman Masalkhi
2025-06-03  6:56       ` Krzysztof Kozlowski
2025-06-01 15:30 ` [PATCH v2 2/3] misc: add sysfs control driver for ST M24LR series RFID/NFC chips Abd-Alrhman Masalkhi
2025-06-01 15:30 ` [PATCH v2 3/3] ABI: sysfs: document control attributes for ST M24LR Abd-Alrhman Masalkhi
2025-06-01 15:50 ` [PATCH v2 0/3] Add control driver for ST M24LR RFID/NFC EEPROM chips Greg KH
  -- strict thread matches above, loose matches on Subject: below --
2025-05-31 13:37 [PATCH 1/3] dt-bindings: misc: Add binding for ST M24LR control interface Krzysztof Kozlowski
2025-06-01  7:31 ` [PATCH v2 1/3] dt-bindings: Add Device Tree " Abd-Alrhman Masalkhi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).