The smallest and worst HDMI display - https://news.ycombinator.com/item?id=30869140 - March 2022 (162 comments)
on Linux it's exposed and have user tools for most standard things. it's infuriating how changing the settings on random external displays is easier than most integrated laptop screens.
some kvm do abuse that comms channel already. forgot which brand but it completely hijacks it and my brightness hacks wouldn't work
on AMD gpus and quality motherboard, i don't even care if i have hdmi or dp cables. i literally use whatever i fish out of a box first.
I believe for things like controlling monitors they just hard-code the addresses. I think that's how it works anyway. Unfortunately the DDC/CI spec is really badly written, incomplete, and full of legacy stuff that nobody actually implements.
>> The DDC/CI display is considered a fixed address display device at adddress 0x6Eh / 6Fh, and uses only I2C slave mode to communicate with the host.
...while § 3.3.1 specifies addresses for external display dependent devices.
The typical address space is 7-bits, so you can just try a transaction to everyone... Or have some convention about what device number the display is?
I have seen devices that respond to address zero, which is against the spec. Stopped nobody.
I have seen devices that use the bus arbitration meant for multi-master during a READ to allow only one of them to win after responding to a zero-address read.
I’ve used an i2c device that had an additional chip select line for some reason. Unless you lowered that, it would not respond to any traffic on the bus.
You cannot even imagine the fucked up shit that happens over i2c
There is no safe, generic way to scan an i2c bus. If the world of possible devices is limited, it may be possible. But there is no safe generic way.
An I2C transaction begins with a client address, and the host waits for an acknowledge signal that a client has answered the message. That's it, that's the only standard part. From there, the host typically sends a register address and then some number of data bytes, or the client sends back some number of bytes. What those addresses and bytes mean are totally application-specific. There is no standard at all here.
You could absolutely broadcast standard DDC commands to all addresses, but you have no way of knowing what actually happened. You might have turned off one monitor and set another to VGA mode. You might have just crashed some random device on the bus. You have no way to tell.
All your host can possibly know is that there is a device at a given address, and it either did or did not send an acknowledge bit after a command. That's all the information available to you, and it is not enough to do what you suggest
https://learn.adafruit.com/scanning-i2c-addresses/raspberry-...
Part of me wonders if all devices actually handle a STOP before the first data byte correctly — without side effects…