On Wed, Dec 23, 2015 at 05:59:49PM +0800, Ken Xue wrote: > On Wed, 2015-12-23 at 11:52 +0200, Mika Westerberg wrote: > > On Wed, Dec 23, 2015 at 05:34:01PM +0800, Ken Xue wrote: > > > 1) Regarding > > > https://msdn.microsoft.com/en-us/library/windows/hardware/dn919852(v=vs.85).aspx > > > , Window I2C driver should pass MITT test. There are 5 I2C devices > > > connect to one I2C bus for test. And those devices defined different > > > "ConnectionSpeed" over the I2C bus by ACPI resource "I2CSerialBus". > > > > > > During test, I2C bus should run in different "ConnectionSpeed" of > > > device. > > > > > > That means windows driver can modify I2C bus speed to match the > > > "ConnectionSpeed" of device on-the-fly. Static value from SSCN and FMCN > > > can not work for WITT test cases. > > > > That is why there are *CNT methods for all supported I2C modes: > > > > - SSCN() - returns for standard mode (100kHz) > > - FMCN() - returns for fast mode (400kHz) > > - FPCN() - returns for fast mode+ (1MHz) > > > > for High-speed mode I'm not sure what the method name is ;-) > > > > Then the Windows driver switches between those based on what the > > ConnectionSpeed is in the ACPI I2C connector. > > Window driver can set Bus speed based on "ConnectionSpeed". But Current > Linux driver only sets Bus speed during probe. How can Linux diver > determine which Bus speed should be applied, if all *CNT methods return > non-zero? By default Linux driver uses 400kHz so it picks values returned from FMCN(). You can hack clk_freq in the driver to use 100kHz which then picks SSCN(). There is no support for reading ConnectionSpeed in Linux yet. -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html