Thread (24 messages) 24 messages, 4 authors, 2017-01-05

Re: [PATCH v5 6/7] i2c: designware: enable SLAVE in platform module

From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Date: 2016-12-28 17:15:25
Also in: linux-i2c, lkml

On Wed, 2016-12-28 at 16:41 +0000, Luis Oliveira wrote:
On 28-Dec-16 16:31, Andy Shevchenko wrote:
quoted
On Wed, 2016-12-28 at 15:53 +0000, Luis Oliveira wrote:
quoted
On 28-Dec-16 15:44, Andy Shevchenko wrote:
quoted
On Wed, 2016-12-28 at 14:43 +0000, Luis Oliveira wrote:
quoted
- Slave mode selected in platform module (devicetree support
only)
- Check for ACPI - not supported in SLAVE mode:
  - Changed the ifndef style to the use of ACPI_HANDLE that
returns
NULL
    if the device was not enumerated from ACPI namespace.
I'm not sure what is wrong with ACPI?
I dont have a way to test it. Just that.
Okay, can you provide an excerpt to see how it will look like in
DTS?
Yes, it looks like this now:

	i2c@0x2000 {
			compatible = "snps,designware-i2c";
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0x2000 0x100>;
			clock-frequency = <400000>;
			clocks = <&i2cclk>;
			interrupts = <0>;

			eeprom@64 {
				compatible = "linux,slave-24c02";
				reg = <0x40000064>;
			};
	};
+1 to Carlos' comment.
quoted
 
quoted
quoted
quoted
-	dev->functionality = I2C_FUNC_10BIT_ADDR |
DW_IC_DEFAULT_FUNCTIONALITY;
-
-	i2c_dw_configure_master(pdev);
+	if (ACPI_HANDLE(&pdev->dev) == NULL) {
I don't think you need this at all.
This is to avoid the use of the "ifdef" style I used before.
My point is to drop it completely.
quoted
quoted
quoted
+		device_for_each_child_node(&pdev->dev, child)
{
This is resource agnostic.
quoted
+			fwnode_property_read_u32(child,
"reg",
&reg);
This is as well.
Are you suggesting I use of_ functions?
Nope. See above.
So, ACPI has a property to support slave mode for I2CSerialBus() macro.

I would propose to create a helper function in i2c-core.c which will be
responsible for mode detection

... i2c_slave_mode_detect()
{
...
 if (IS_BUILTIN(CONFIG_OF) && dev->of_node) {
  ... (use of_*() here) ...
 } else if (IS_BUILTIN(CONFIG_ACPI) && ACPI_HANDLE(dev))
  dev_dbg(..., "ACPI slave is not supported yet\n");
  ... to master ...
 } else {
  ... default to master ...
 }
}
EXPORT_...();

Make it as a separate patch.

-- 
Andy Shevchenko [off-list ref]
Intel Finland Oy
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help