media: i2c: add I2C Address Translator (ATR) support
authorLuca Ceresoli <luca@lucaceresoli.net>
Mon, 19 Jun 2023 12:22:06 +0000 (14:22 +0200)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Fri, 14 Jul 2023 11:11:44 +0000 (13:11 +0200)
commita076a860acae77bbdcbd316541e5552e81fb1772
treed89211b36c516e4547da8dcbee44bc092b798a20
parent86251cf8fd3ca5268486ce74fd3710f0d448a17d
media: i2c: add I2C Address Translator (ATR) support

An ATR is a device that looks similar to an i2c-mux: it has an I2C
slave "upstream" port and N master "downstream" ports, and forwards
transactions from upstream to the appropriate downstream port. But it
is different in that the forwarded transaction has a different slave
address. The address used on the upstream bus is called the "alias"
and is (potentially) different from the physical slave address of the
downstream chip.

Add a helper file (just like i2c-mux.c for a mux or switch) to allow
implementing ATR features in a device driver. The helper takes care of
adapter creation/destruction and translates addresses at each transaction.

Signed-off-by: Luca Ceresoli <luca@lucaceresoli.net>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Wolfram Sang <wsa@kernel.org>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Documentation/i2c/i2c-address-translators.rst [new file with mode: 0644]
Documentation/i2c/index.rst
MAINTAINERS
drivers/i2c/Kconfig
drivers/i2c/Makefile
drivers/i2c/i2c-atr.c [new file with mode: 0644]
include/linux/i2c-atr.h [new file with mode: 0644]