Commit Graph

133 Commits

Author SHA1 Message Date
Alessandro Carminati b9265480f8 eeprom: at24: use of_match_ptr()
JIRA: https://issues.redhat.com/browse/RHEL-47160

Conflicts:
    * Avoiding commit <f050bb8f56c64> ("misc: Switch i2c drivers back to
      use .probe()") to avoid drop the .probe_new() call-back type
    * Small context adjustments due to f050bb8f56c64

commit 2b0eee4f6add17a74f696a6f40ad2a4fa173613e
Author: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Date:   Thu Nov 23 11:30:32 2023 +0100

    eeprom: at24: use of_match_ptr()

    This driver does not depend on CONFIG_OF so using of_match_ptr() makes
    sense to reduce the size a bit.

    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Signed-off-by: Alessandro Carminati <acarmina@redhat.com>
2024-07-26 14:18:07 +02:00
Alessandro Carminati 109552b6f3 eeprom: at24: Use pm_runtime_resume_and_get to simplify the code
JIRA: https://issues.redhat.com/browse/RHEL-47160

Conflicts:
    * Avoiding commit <f050bb8f56c64> ("misc: Switch i2c drivers back to
      use .probe()") to avoid drop the .probe_new() call-back type

commit e68f487133d515234bdf00b85fedd0fe6216349e
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date:   Wed Dec 20 16:11:14 2023 +0100

    eeprom: at24: Use pm_runtime_resume_and_get to simplify the code

    Use helper pm_runtime_resume_and_get() to simplify the code.

    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Link: https://lore.kernel.org/r/c3045427-da42-4f7c-8a96-3c4756646cd0@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Signed-off-by: Alessandro Carminati <acarmina@redhat.com>
2024-07-26 14:18:03 +02:00
Alessandro Carminati b58d264886 eeprom: at24: add ST M24C64-D Additional Write lockable page support
JIRA: https://issues.redhat.com/browse/RHEL-47160

Conflicts:
    * Avoiding commit <f050bb8f56c64> ("misc: Switch i2c drivers back to
      use .probe()") to avoid drop the .probe_new() call-back type

commit 3774740fb22162d2c50e79629c4b3e11022ed7d9
Author: Alexander Stein <alexander.stein@ew.tq-group.com>
Date:   Fri Oct 13 08:30:08 2023 +0200

    eeprom: at24: add ST M24C64-D Additional Write lockable page support

    The ST M24C64-D behaves as a regular M24C64, except for the -D variant
    which uses up another I2C address for Additional Write lockable page.
    This page is 32 Bytes long and can contain additional data. Add entry
    for it, so users can describe that page in DT. Note that users still
    have to describe the main M24C64 area separately as that is on separate
    I2C address from this page.

    Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Reviewed-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Signed-off-by: Alessandro Carminati <acarmina@redhat.com>
2024-07-26 14:17:58 +02:00
Alessandro Carminati 7924da3960 eeprom: at24: add ST M24C32-D Additional Write lockable page support
JIRA: https://issues.redhat.com/browse/RHEL-47160

Conflicts:
    * Avoiding commit <f050bb8f56c64> ("misc: Switch i2c drivers back to
      use .probe()") to avoid drop the .probe_new() call-back type

commit 4791146e9055dd4c21a1a725514512167b8ee75b
Author: Marek Vasut <marex@denx.de>
Date:   Tue Oct 10 21:09:26 2023 +0200

    eeprom: at24: add ST M24C32-D Additional Write lockable page support

    The ST M24C32-D behaves as a regular M24C32, except for the -D variant
    which uses up another I2C address for Additional Write lockable page.
    This page is 32 Bytes long and can contain additional data. Add entry
    for it, so users can describe that page in DT. Note that users still
    have to describe the main M24C32 area separately as that is on separate
    I2C address from this page.

    Signed-off-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Signed-off-by: Alessandro Carminati <acarmina@redhat.com>
2024-07-26 14:17:54 +02:00
Alessandro Carminati bb9af0fe78 eeprom: at24: Annotate struct at24_data with __counted_by
JIRA: https://issues.redhat.com/browse/RHEL-47160

Conflicts:
    * Avoiding commit <f050bb8f56c64> ("misc: Switch i2c drivers back to
      use .probe()") to avoid drop the .probe_new() call-back type

commit 997a29bbb1e0d6d10ebc2291fac604c4cded5828
Author: Kees Cook <kees@kernel.org>
Date:   Fri Sep 22 10:51:55 2023 -0700

    eeprom: at24: Annotate struct at24_data with __counted_by

    Prepare for the coming implementation by GCC and Clang of the __counted_by
    attribute. Flexible array members annotated with __counted_by can have
    their accesses bounds-checked at run-time checking via CONFIG_UBSAN_BOUNDS
    (for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family
    functions).

    As found with Coccinelle[1], add __counted_by for struct at24_data.

    [1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci

    Signed-off-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Signed-off-by: Alessandro Carminati <acarmina@redhat.com>
2024-07-26 14:17:49 +02:00
Alessandro Carminati c7035cbb37 eeprom: at24: Drop at24_get_chip_data()
JIRA: https://issues.redhat.com/browse/RHEL-47160

Conflicts:
    * Avoiding commit <f050bb8f56c64> ("misc: Switch i2c drivers back to
      use .probe()") to avoid drop the .probe_new() call-back type

commit 4cdc5dbbc1df36c4d7c93c7c15dde88e997922c2
Author: Biju Das <biju.das.jz@bp.renesas.com>
Date:   Sat Sep 2 18:45:47 2023 +0100

    eeprom: at24: Drop at24_get_chip_data()

    Replace at24_get_chip_data()->i2c_get_match_data() as it is
    redundant.

    Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
    Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Signed-off-by: Alessandro Carminati <acarmina@redhat.com>
2024-07-26 14:17:43 +02:00
Mark Salter 36965a3d4e eeprom: at24: fix memory corruption race condition
JIRA: https://issues.redhat.com/browse/RHEL-37020
CVE: CVE-2024-35848

commit f42c97027fb75776e2e9358d16bf4a99aeb04cf2
Author: Daniel Okazaki <dtokazaki@google.com>
Date: Mon, 22 Apr 2024 17:43:36 +0000

    If the eeprom is not accessible, an nvmem device will be registered, the
    read will fail, and the device will be torn down. If another driver
    accesses the nvmem device after the teardown, it will reference
    invalid memory.

    Move the failure point before registering the nvmem device.

    Signed-off-by: Daniel Okazaki <dtokazaki@google.com>
    Fixes: b20eb4c1f0 ("eeprom: at24: drop unnecessary label")
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20240422174337.2487142-1-dtokazaki@google.com
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Signed-off-by: Mark Salter <msalter@redhat.com>
2024-06-11 16:37:07 -04:00
Mark Salter e1e3b95902 eeprom: at24: Probe for DDR3 thermal sensor in the SPD case
JIRA: https://issues.redhat.com/browse/RHEL-37020
CVE: CVE-2024-35848

commit caba40ec3531b0849f44502a03117796e8c9f4a1
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date: Wed, 20 Dec 2023 13:55:58 +0100

    The DDR3 SPD data structure advertises the presence of a thermal
    sensor on a DDR3 module in byte 32, bit 7. Let's use this information
    to explicitly instantiate the thermal sensor I2C client instead of
    having to rely on class-based I2C probing.

    The temp sensor i2c address can be derived from the SPD i2c address,
    so we can directly instantiate the device and don't have to probe
    for it. If the temp sensor has been instantiated already by other
    means (e.g. class-based auto-detection), then the busy-check in
    i2c_new_client_device will detect this.

    Note: Thermal sensors on DDR4 DIMM's are instantiated from the
          ee1004 driver.

    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Link: https://lore.kernel.org/r/68113672-3724-44d5-9ff8-313dd6628f8c@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Signed-off-by: Mark Salter <msalter@redhat.com>
2024-06-11 16:37:07 -04:00
Mark Salter c1f804fa84 eeprom: at24: Use dev_err_probe for nvmem register failure
JIRA: https://issues.redhat.com/browse/RHEL-37020
CVE: CVE-2024-35848

commit a3c10035d12f5ec10915d5c00c2e8f7d7c066182
Author: Alexander Stein <alexander.stein@ew.tq-group.com>
Date: Tue, 16 May 2023 10:05:53 +0200

    When using nvmem layouts it is possible devm_nvmem_register returns
    -EPROBE_DEFER, resulting in an 'empty' in
    /sys/kernel/debug/devices_deferred. Use dev_err_probe for providing
    additional information.

    Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com>
    Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

Signed-off-by: Mark Salter <msalter@redhat.com>
2024-06-11 16:37:07 -04:00
Mark Salter 7f641c20e3 eeprom: at24: Add support for 24c1025 EEPROM
JIRA: https://issues.redhat.com/browse/RHEL-37020
CVE: CVE-2024-35848

commit d08aea21c89dc2d302cadb5c2cc5410b6c3395c8
Author: Maxim Kochetkov <fido_max@inbox.ru>
Date: Fri, 10 Dec 2021 21:26:03 +0300

    Microchip EEPROM 24xx1025 is like a 24c1024. The only difference
    between them is that the I2C address bit used to select between the
    two banks is bit 2 for the 1025 and not bit 0 as in the 1024.

    Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
    Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>

Signed-off-by: Mark Salter <msalter@redhat.com>
2024-06-11 16:37:07 -04:00
Mark Salter bbce693728 eeprom: at24: remove struct at24_client
JIRA: https://issues.redhat.com/browse/RHEL-37020
CVE: CVE-2024-35848

commit 92e1764787e57417b8890db0f154c0f405548cdd
Author: Heiner Kallweit <hkallweit1@gmail.com>
Date: Sun, 28 Nov 2021 19:14:50 +0100

    We use member client only to get a reference to the associated struct
    device, via &client->dev. However we can get the same reference from
    the associated regmap, via regmap_get_device(regmap).
    Therefore struct at24_client can be removed and replaced with a regmap
    pointer.

    Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
    Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>

Signed-off-by: Mark Salter <msalter@redhat.com>
2024-06-11 16:37:07 -04:00
Mark Salter c8116eb619 at24: Support probing while in non-zero ACPI D state
JIRA: https://issues.redhat.com/browse/RHEL-37020
CVE: CVE-2024-35848

commit 1e96078e0ae456cda0e02afd42b9a2b3734f45ba
Author: Sakari Ailus <sakari.ailus@linux.intel.com>
Date: Mon, 18 Oct 2021 15:17:29 +0300

    In certain use cases (where the chip is part of a camera module, and the
    camera module is wired together with a camera privacy LED), powering on
    the device during probe is undesirable. Add support for the at24 to
    execute probe while being in ACPI D state other than 0 (which means fully
    powered on).

    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Reviewed-by: Tomasz Figa <tfiga@chromium.org>
    Acked-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Signed-off-by: Mark Salter <msalter@redhat.com>
2024-06-11 16:37:07 -04:00
Jérôme Glisse c36748ac54 misc: eeprom: at24: Always append device id even if label property is set.
We need to append device id even if eeprom have a label property set as some
platform can have multiple eeproms with same label and we can not register
each of those with same label. Failing to register those eeproms trigger
cascade failures on such platform (system is no longer working).

This fix regression on such platform introduced with 4e302c3b56

Reported-by: Alexander Fomichev <fomichev.ru@gmail.com>
Fixes: 4e302c3b56 ("misc: eeprom: at24: fix NVMEM name with custom AT24 device name")
Cc: stable@vger.kernel.org
Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2021-07-01 18:49:37 +02:00
Hsin-Yi Wang 2962484dfe misc: eeprom: at24: check suspend status before disable regulator
cd5676db05 ("misc: eeprom: at24: support pm_runtime control") disables
regulator in runtime suspend. If runtime suspend is called before
regulator disable, it will results in regulator unbalanced disabling.

Fixes: cd5676db05 ("misc: eeprom: at24: support pm_runtime control")
Cc: stable <stable@vger.kernel.org>
Acked-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
Link: https://lore.kernel.org/r/20210420133050.377209-1-hsinyi@chromium.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-05-14 13:50:59 +02:00
Diego Santa Cruz 4e302c3b56 misc: eeprom: at24: fix NVMEM name with custom AT24 device name
When the "label" property is set on the AT24 EEPROM the NVMEM devid is
set to NVMEM_DEVID_NONE, but it is not effective since there is a
leftover line setting it back to NVMEM_DEVID_AUTO a few lines after.

Fixes: 61f764c307 ("eeprom: at24: Support custom device names for AT24 EEPROMs")
Signed-off-by: Diego Santa Cruz <Diego.SantaCruz@spinetix.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-12-04 10:46:36 +01:00
Linus Torvalds b5df4b5c28 Merge branch 'i2c/for-5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c updates from Wolfram Sang:

 - if a host can be a client, too, the I2C core can now use it to
   emulate SMBus HostNotify support (STM32 and R-Car added this so far)

 - also for client mode, a testunit has been added. It can create rare
   situations on the bus, so host controllers can be tested

 - a binding has been added to mark the bus as "single-master". This
   allows for better timeout detections

 - new driver for Mellanox Bluefield

 - massive refactoring of the Tegra driver

 - EEPROMs recognized by the at24 driver can now have custom names

 - rest is driver updates

* 'i2c/for-5.10' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (80 commits)
  Documentation: i2c: add testunit docs to index
  i2c: tegra: Improve driver module description
  i2c: tegra: Clean up whitespaces, newlines and indentation
  i2c: tegra: Clean up and improve comments
  i2c: tegra: Clean up printk messages
  i2c: tegra: Clean up variable names
  i2c: tegra: Improve formatting of variables
  i2c: tegra: Check errors for both positive and negative values
  i2c: tegra: Factor out hardware initialization into separate function
  i2c: tegra: Factor out register polling into separate function
  i2c: tegra: Factor out packet header setup from tegra_i2c_xfer_msg()
  i2c: tegra: Factor out error recovery from tegra_i2c_xfer_msg()
  i2c: tegra: Rename wait/poll functions
  i2c: tegra: Remove "dma" variable from tegra_i2c_xfer_msg()
  i2c: tegra: Remove redundant check in tegra_i2c_issue_bus_clear()
  i2c: tegra: Remove likely/unlikely from the code
  i2c: tegra: Remove outdated barrier()
  i2c: tegra: Clean up variable types
  i2c: tegra: Reorder location of functions in the code
  i2c: tegra: Clean up probe function
  ...
2020-10-21 10:54:05 -07:00
Jon Hunter 61f764c307 eeprom: at24: Support custom device names for AT24 EEPROMs
By using the label property, a more descriptive name can be populated
for AT24 EEPROMs NVMEM device. Update the AT24 driver to check to see
if the label property is present and if so, use this as the name for
NVMEM device. Please note that when the 'label' property is present for
the AT24 EEPROM, we do not want the NVMEM driver to append the 'devid'
to the name and so the nvmem_config.id is initialised to
NVMEM_DEVID_NONE.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-09-25 15:33:04 +02:00
Jon Hunter f434f9b7af eeprom: at24: Initialise AT24 NVMEM ID field
The AT24 EEPROM driver does not initialise the 'id' field of the
nvmem_config structure and because the entire structure is not
initialised, it ends up with a random value. This causes the NVMEM
driver to append the device 'devid' value to name of the NVMEM
device. Ideally for I2C devices such as the AT24 that already have a
unique name, we would not bother to append the 'devid'. However, given
that this has always been done for AT24 devices, we cannot remove the
'devid' as this will change the name of the userspace sysfs node for
the NVMEM device. Nonetheless we should ensure that the 'id' field of
the nvmem_config structure is initialised so that there is no chance of
a random value causes problems in the future. Therefore, set the NVMEM
config.id to NVMEM_DEVID_AUTO for AT24 EEPROMs so that the 'devid' is
always appended.

Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-09-24 15:18:46 +02:00
Vadym Kochan 774b9f4371 eeprom: at24: set type id as EEPROM
Set type as NVMEM_TYPE_EEPROM to expose this info via
sysfs:

$ cat /sys/bus/nvmem/devices/{DEVICE}/type
EEPROM

Signed-off-by: Vadym Kochan <vadym.kochan@plvision.eu>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-09-17 10:05:20 +02:00
Vadym Kochan 45df80d760 misc: eeprom: at24: register nvmem only after eeprom is ready to use
During nvmem_register() the nvmem core sends notifications when:

    - cell added
    - nvmem added

and during these notifications some callback func may access the nvmem
device, which will fail in case of at24 eeprom because regulator and pm
are enabled after nvmem_register().

Fixes: cd5676db05 ("misc: eeprom: at24: support pm_runtime control")
Fixes: b20eb4c1f0 ("eeprom: at24: drop unnecessary label")
Cc: stable@vger.kernel.org
Signed-off-by: Vadym Kochan <vadym.kochan@plvision.eu>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-09-01 09:49:55 +02:00
Jean Delvare 99363d1c26 eeprom: at24: Tidy at24_read()
The elegant code in at24_read() has the drawback that we now need
to make a copy of all parameters to pass them to the post-processing
callback function if there is one. Rewrite the loop in such a way that
the parameters are not modified, so saving them is no longer needed.

Signed-off-by: Jean Delvare <jdelvare@suse.de>
Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-08-25 17:50:15 +02:00
Jean Delvare a4423cedc5 eeprom: at24: Add support for the Sony VAIO EEPROMs
Special handling of the Sony VAIO EEPROMs is the last feature of the
legacy eeprom driver that the at24 driver does not support. Adding
this would let us deprecate and eventually remove the legacy eeprom
driver.

So add the option to specify a post-processing callback function that
is called after reading data from the EEPROM, before it is returned
to the user. The 24c02-vaio type is the first use case of that option:
the callback function will mask the sensitive data for non-root users
exactly as the legacy eeprom driver was doing.

Signed-off-by: Jean Delvare <jdelvare@suse.de>
Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[Bartosz: removed a stray newline]
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-08-18 15:40:20 +02:00
Lee Jones 8965930c0b misc: eeprom: at24: Tell the compiler that ACPI functions may not be used
... as is the case when !CONFIG_ACPI.

Fixes the following W=1 kernel build warning:

 drivers/misc/eeprom/at24.c:228:36: warning: ‘at24_acpi_ids’ defined but not used [-Wunused-const-variable=]

Signed-off-by: Lee Jones <lee.jones@linaro.org>
Acked-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Link: https://lore.kernel.org/r/20200701093616.GX1179328@dell
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-07-10 14:50:51 +02:00
Wolfram Sang 6d7e0a3420 Linux 5.6-rc7
-----BEGIN PGP SIGNATURE-----
 
 iQFSBAABCAA8FiEEq68RxlopcLEwq+PEeb4+QwBBGIYFAl54EZgeHHRvcnZhbGRz
 QGxpbnV4LWZvdW5kYXRpb24ub3JnAAoJEHm+PkMAQRiGLpwIAJv475oyWJDefyZn
 Va5GF+LgR3CMGnfOQXyLXphFUU0fYQtuHb6E5w2hmMpovNrlbpzuypuOetqN1gtQ
 DpDgt6htHlBAJCNkNnHOjEARmMZo64D2dnLlTfa6fjJMc4tg3yk/oMFXFpiP0kdd
 ena4DetB293IF2EjP7RWfVbXzbZzG4sLmIsOmUiFH1H1nhTV8tZWG06KvUcwuCSU
 AfrXiOaVj6npiShszjdODYaFRL6mYh5es7q02wQpKeWdZHRU8IuKTgywiOjh6uD4
 J2bXvz0qbDN/2Zgj73H8EfkAP7zm6nCHifQiUm9uRsjzpcfjFRYIn+4/4LAzCIjm
 VI8uvdA=
 =/NN5
 -----END PGP SIGNATURE-----

Merge tag 'v5.6-rc7' into i2c/for-5.7

Linux 5.6-rc7
2020-03-26 12:09:58 +01:00
Michael Auchter 58d6fee50e misc: eeprom: at24: fix regulator underflow
The at24 driver attempts to read a byte from the device to validate that
it's actually present, and if not, disables the vcc regulator and
returns -ENODEV. However, between the read and the error handling path,
pm_runtime_idle() is called and invokes the driver's suspend callback,
which also disables the vcc regulator. This leads to an underflow of the
regulator enable count if the EEPROM is not present.

Move the pm_runtime_suspend() call to be after the error handling path
to resolve this.

Fixes: cd5676db05 ("misc: eeprom: at24: support pm_runtime control")
Signed-off-by: Michael Auchter <michael.auchter@ni.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-03-12 09:02:34 +01:00
Markus Pietrek 4837621cd6 eeprom: at24: add TPF0001 ACPI ID for 24c1024 device
This ID is used at leas on some variants of MSC C6B-SLH board.

Signed-off-by: Markus Pietrek <mpie@msc-ge.com>
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-02-10 11:03:39 +01:00
Bibby Hsieh cd5676db05 misc: eeprom: at24: support pm_runtime control
Although in the most platforms, the power of eeprom are alway
on, some platforms disable the eeprom power in order to meet
low power request. This patch add the pm_runtime ops to control
power to support all platforms.

Signed-off-by: Bibby Hsieh <bibby.hsieh@mediatek.com>
[Bartosz: rebased on top of current at24/for-next]
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-01-23 12:52:57 +01:00
Khouloud Touil 1c89074bf8 eeprom: at24: remove the write-protect pin support
NVMEM framework is an interface for the at24 EEPROMs as well as for
other drivers, instead of passing the wp-gpios over the different
drivers each time, it would be better to pass it over the NVMEM
subsystem once and for all.

Removing the support for the write-protect pin after adding it to the
NVMEM subsystem.

Signed-off-by: Khouloud Touil <ktouil@baylibre.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-01-09 10:51:13 +01:00
Bartosz Golaszewski 69afc4b623 eeprom: at24: sort headers alphabetically
For consistency and easier maintenance: sort the headers alphabetically.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-01-02 17:56:32 +01:00
Bartosz Golaszewski 567ec716ef eeprom: at24: update the license tag
The current GPL v2.0 or later SPDX tag is 'GPL-2.0-or-later' as defined
at https://spdx.org/licenses/.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2020-01-02 17:14:32 +01:00
Jean Delvare 285be87c79 eeprom: at24: Improve confusing log message
Currently when binding to an spd EEPROM, the at24 drivers logs the
following message:

256 byte spd EEPROM, read-only, 0 bytes/write

The last part is confusing, as by definition you don't write to a
read-only EEPROM, plus "0 bytes/write" makes no sense whatsoever.

I propose to have a different message for read-only EEPROMs, which
does not include this last part.

Signed-off-by: Jean Delvare <jdelvare@suse.de>
Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Wolfram Sang <wsa@the-dreams.de>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2019-10-04 10:46:39 +02:00
Linus Torvalds 351c8a09b0 Merge branch 'i2c/for-5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c updates from Wolfram Sang:

 - new driver for ICY, an Amiga Zorro card :)

 - axxia driver gained slave mode support, NXP driver gained ACPI

 - the slave EEPROM backend gained 16 bit address support

 - and lots of regular driver updates and reworks

* 'i2c/for-5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: (52 commits)
  i2c: tegra: Move suspend handling to NOIRQ phase
  i2c: imx: ACPI support for NXP i2c controller
  i2c: uniphier(-f): remove all dev_dbg()
  i2c: uniphier(-f): use devm_platform_ioremap_resource()
  i2c: slave-eeprom: Add comment about address handling
  i2c: exynos5: Remove IRQF_ONESHOT
  i2c: stm32f7: Make structure stm32f7_i2c_algo constant
  i2c: cht-wc: drop check because i2c_unregister_device() is NULL safe
  i2c-eeprom_slave: Add support for more eeprom models
  i2c: fsi: Add of_put_node() before break
  i2c: synquacer: Make synquacer_i2c_ops constant
  i2c: hix5hd2: Remove IRQF_ONESHOT
  i2c: i801: Use iTCO version 6 in Cannon Lake PCH and beyond
  watchdog: iTCO: Add support for Cannon Lake PCH iTCO
  i2c: iproc: Make bcm_iproc_i2c_quirks constant
  i2c: iproc: Add full name of devicetree node to adapter name
  i2c: piix4: Add ACPI support
  i2c: piix4: Fix probing of reserved ports on AMD Family 16h Model 30h
  i2c: ocores: use request_any_context_irq() to register IRQ handler
  i2c: designware: Fix optional reset error handling
  ...
2019-09-24 16:48:02 -07:00
Jean Delvare 25e5ef302c eeprom: at24: make spd world-readable again
The integration of the at24 driver into the nvmem framework broke the
world-readability of spd EEPROMs. Fix it.

Signed-off-by: Jean Delvare <jdelvare@suse.de>
Cc: stable@vger.kernel.org
Fixes: 57d155506d ("eeprom: at24: extend driver to plug into the NVMEM framework")
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Bartosz Golaszewski <brgl@bgdev.pl>
Cc: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2019-07-28 18:49:20 +02:00
Bartosz Golaszewski 10742fee98 eeprom: at24: remove unneeded include
We used to have a call to ilog2() in AT24_DEVICE_MAGIC(). That's long
gone so this header is no longer needed.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Acked-by: Wolfram Sang <wsa@the-dreams.de>
2019-07-22 14:36:56 +02:00
Bartosz Golaszewski dce91ba39c eeprom: at24: modify a comment referring to platform data
We no longer have platform data in at24, so this comment is invalid.
Make it refer to device tree & properties instead.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Acked-by: Wolfram Sang <wsa@the-dreams.de>
2019-06-27 15:55:08 +02:00
Gustavo A. R. Silva 9ae9d9bfb7 eeprom: at24: use struct_size() in devm_kzalloc()
One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:

struct foo {
    int stuff;
    struct boo entry[];
};

size = sizeof(struct foo) + count * sizeof(struct boo);
instance = devm_kzalloc(dev, size, GFP_KERNEL);

Instead of leaving these open-coded and prone to type mistakes, we can
now use the new struct_size() helper:

instance = devm_kzalloc(dev, struct_size(instance, entry, count), GFP_KERNEL);

Notice that, in this case, variable at24_size is not necessary, hence it
is removed.

This code was detected with the help of Coccinelle.

Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2019-05-31 09:06:52 +02:00
YueHaibing a880658124 eeprom: at24: Remove set but not used variable 'addr'
Fixes gcc '-Wunused-but-set-variable' warning:

drivers/misc/eeprom/at24.c: In function at24_make_dummy_client:
drivers/misc/eeprom/at24.c:514:21: warning: variable addr set but not used [-Wunused-but-set-variable]

It's not used since commit e7308628d0 ("eeprom:
at24: use devm_i2c_new_dummy_device()")

Signed-off-by: YueHaibing <yuehaibing@huawei.com>
Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2019-05-31 09:02:27 +02:00
Bartosz Golaszewski b20eb4c1f0 eeprom: at24: drop unnecessary label
If we move the nvmem registration above the pm enable calls and the
test read, we can drop the error label and make the code more readable
as there's now only a single place where we must call
pm_runtime_disable() in error path.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2019-05-28 17:55:11 +02:00
Bartosz Golaszewski e7308628d0 eeprom: at24: use devm_i2c_new_dummy_device()
Now that it's upstream, use the resource managed version
of i2c_new_dummy_device().

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
2019-05-28 17:54:51 +02:00
Bartosz Golaszewski 950bcbbe31 eeprom: at24: implement support for 'num-addresses' property
If the device node defines 'num-addresses', let it override the default
behavior.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2019-02-14 09:32:35 +01:00
Bartosz Golaszewski 4fa882c9f6 eeprom: at24: remove at24_platform_data
There are no more users of at24_platform_data. Remove the relevant
header and modify the driver code to not use it anymore.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
2019-02-14 09:32:19 +01:00
Adrian Bunk 37cf28d3b5 eeprom: at24: add support for 24c2048
Works with ST M24M02.

Signed-off-by: Adrian Bunk <bunk@kernel.org>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
2018-12-10 16:23:27 +01:00
Wang Xin 9a9e295e7c eeprom: at24: fix unexpected timeout under high load
Within at24_loop_until_timeout the timestamp used for timeout checking
is recorded after the I2C transfer and sleep_range(). Under high CPU
load either the execution time for I2C transfer or sleep_range() could
actually be larger than the timeout value. Worst case the I2C transfer
is only tried once because the loop will exit due to the timeout
although the EEPROM is now ready.

To fix this issue the timestamp is recorded at the beginning of each
iteration. That is, before I2C transfer and sleep. Then the timeout
is actually checked against the timestamp of the previous iteration.
This makes sure that even if the timeout is reached, there is still one
more chance to try the I2C transfer in case the EEPROM is ready.

Example:

If you have a system which combines high CPU load with repeated EEPROM
writes you will run into the following scenario.

 - System makes a successful regmap_bulk_write() to EEPROM.
 - System wants to perform another write to EEPROM but EEPROM is still
   busy with the last write.
 - Because of high CPU load the usleep_range() will sleep more than
   25 ms (at24_write_timeout).
 - Within the over-long sleeping the EEPROM finished the previous write
   operation and is ready again.
 - at24_loop_until_timeout() will detect timeout and won't try to write.

Signed-off-by: Wang Xin <xin.wang7@cn.bosch.com>
Signed-off-by: Mark Jonas <mark.jonas@de.bosch.com>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
2018-10-02 16:58:21 +02:00
Alan Chiang a2b3bf4846 eeprom: at24: Add support for address-width property
Provide a flexible way to determine the addressing bits of eeprom.
Pass the addressing bits to driver through address-width property.

Signed-off-by: Alan Chiang <alanx.chiang@intel.com>
Signed-off-by: Andy Yeh <andy.yeh@intel.com>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
2018-07-25 09:17:57 +02:00
Bartosz Golaszewski 73b0d922cd eeprom: at24: provide a separate routine for creating dummy i2c clients
Move the code responsible for creating the dummy i2c clients used by
chips taking multiple slave addresses to a separate function.

Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Reviewed-by: Peter Rosin <peda@axentia.se>
2018-05-16 14:42:46 +02:00
Bartosz Golaszewski 39933e0fd5 eeprom: at24: provide and use a helper for releasing dummy i2c clients
This allows us to drop two opencoded for loops. We also don't need to
check if the i2c client is NULL before calling i2c_unregister_device().

Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Reviewed-by: Peter Rosin <peda@axentia.se>
2018-05-16 14:42:46 +02:00
Bartosz Golaszewski bbe69841bd eeprom: at24: use devm_nvmem_register()
We now have a managed variant of nvmem_register(). Use it
in at24_probe().

Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Reviewed-by: Peter Rosin <peda@axentia.se>
2018-05-16 14:42:46 +02:00
Bartosz Golaszewski 5fa4d14e55 eeprom: at24: fix retrieving the at24_chip_data structure
Commit feb2f19b1e ("eeprom: at24: move platform data processing into
a separate routine") introduced a bug where we incorrectly retireve the
at24_chip_data structure. Remove the unnecessary ampersand operator.

Fixes: feb2f19b1e ("eeprom: at24: move platform data processing into a separate routine")
Reported-by: Vadim Pasternak <vadimp@mellanox.com>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
2018-05-16 14:42:46 +02:00
Bartosz Golaszewski 4ac0d3fb13 eeprom: at24: use SPDX identifier instead of GPL boiler-plate
Replace the GPL (or later) header with the SPDX identifier
for GPL-2.0+.

Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Tested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-03-23 17:53:06 +01:00
Bartosz Golaszewski 34d43faf3a eeprom: at24: simplify the i2c functionality checking
Save one call and make code prettier by checking the i2c functionality
in the beginning of at24_probe(), saving the relevant values and
reusing them later.

Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
Tested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-03-23 16:25:45 +01:00