Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Back-port I2C ATR (Address translator) #2536

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open

Back-port I2C ATR (Address translator) #2536

wants to merge 2 commits into from

Conversation

btogorean
Copy link
Contributor

@btogorean btogorean commented Jul 8, 2024

PR Description

Back-port I2C address translator functionality. This is required for ADI GMSL drivers

PR Type

  • Bug fix (a change that fixes an issue)
  • New feature (a change that adds new functionality)
  • Breaking change (a change that affects other repos or cause CIs to fail)

PR Checklist

  • I have conducted a self-review of my own code changes
  • I have tested the changes on the relevant hardware
  • I have updated the documentation outside this repo accordingly (if there is the case)

lucaceresoli and others added 2 commits July 8, 2024 14:26
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 or
adapter creation/destruction and translates addresses at each transaction.

Signed-off-by: Luca Ceresoli <[email protected]>
Signed-off-by: Tomi Valkeinen <[email protected]>
Reviewed-by: Andy Shevchenko <[email protected]>
Acked-by: Wolfram Sang <[email protected]>
return -ENXIO;
}
if (!c2a)
continue;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, the expected question from me is this a valid usecase that should be upstreamed?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this has been upstreamed and this is a backport, or?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it is, I would expect a cherry-pick which would include additional sign-offs and so I would not question :). Note that I'm speaking about the second patch.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this has not been upstreamed yet. The usecase is that on the same I2C bus of the deserializer you can have multiple serializers (which need the ATR to be able to setup individual communication by changing their address) and then another ATR for the serializer since they need to do address translation for the connected cameras. The serializer ATR provides the final translation of the cameras, and an unknown I2C address reaches this deserializer code, which we just want to pass through.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it is, I would expect a cherry-pick which would include additional sign-offs and so I would not question :). Note that I'm speaking about the second patch.

oh; my bad;
apologies for the noise;
i need to re-adapt to reading these kernel patches

Copy link
Collaborator

@nunojsa nunojsa Jul 10, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, this has not been upstreamed yet. The usecase is that on the same I2C bus of the deserializer you can have multiple serializers (which need the ATR to be able to setup individual communication by changing their address) and then another ATR for the serializer since they need to do address translation for the connected cameras. The serializer ATR provides the final translation of the cameras, and an unknown I2C address reaches this deserializer code, which we just want to pass through.

I see... I won't opinate much about the patch. Maybe a dev_warn() or dev_dbg() would make sense. Other option would be some DT property to mark an i2c as "pass through" instead of just continuing and ignoring the lack of mapping (if it makes any sense) .

Anyways, most important thing (as you already know :)) is that this is sent upstream.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants