From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S970684AbdAEMON (ORCPT ); Thu, 5 Jan 2017 07:14:13 -0500 Received: from smtprelay2.synopsys.com ([198.182.60.111]:47144 "EHLO smtprelay.synopsys.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751521AbdAEMOD (ORCPT ); Thu, 5 Jan 2017 07:14:03 -0500 Subject: Re: [PATCH v5 6/7] i2c: designware: enable SLAVE in platform module To: Andy Shevchenko , Luis Oliveira , , , , , , , , References: <1482939844.9552.165.camel@linux.intel.com> <20e47113-efd7-787c-b2f8-39e9fd8b83d2@synopsys.com> <1482942696.9552.172.camel@linux.intel.com> <1482945043.9552.174.camel@linux.intel.com> CC: , , From: Luis Oliveira Message-ID: <9747bb4d-9a52-789d-32e9-ddbef9e129e4@synopsys.com> Date: Thu, 5 Jan 2017 12:13:56 +0000 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.107.19.79] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 28-Dec-16 18:10, Luis Oliveira wrote: > On 28-Dec-16 17:10, Andy Shevchenko wrote: >> On Wed, 2016-12-28 at 16:41 +0000, Luis Oliveira wrote: >>> On 28-Dec-16 16:31, Andy Shevchenko wrote: >>>> On Wed, 2016-12-28 at 15:53 +0000, Luis Oliveira wrote: >>>>> On 28-Dec-16 15:44, Andy Shevchenko wrote: >>>>>> On Wed, 2016-12-28 at 14:43 +0000, Luis Oliveira wrote: >>>>>>> - 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. > > Agree, I'm on it. > >> >>>> >>>>>>> - 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. >>>> >>>>>> >>>>>>> + device_for_each_child_node(&pdev->dev, child) >>>>>>> { >>>>>> >>>>>> This is resource agnostic. >>>>>> >>>>>>> + fwnode_property_read_u32(child, >>>>>>> "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. >> > > Oh I see, yes it looks good. I will check it. Thanks > Hi Andy, I implemented a helper function as you proposed and it looks like this: int i2c_slave_mode_detect(struct device *dev) { struct device_node *child; u32 reg; if (IS_BUILTIN(CONFIG_OF) && dev->of_node) { for_each_child_of_node(dev->of_node, child) { of_property_read_u32(child, "reg", ®); if (reg & I2C_OWN_SLAVE_ADDRESS) return 1; } } else if (IS_BUILTIN(CONFIG_ACPI) && ACPI_HANDLE(dev)) dev_dbg(dev, "ACPI slave is not supported yet\n"); else return 0; return 0; } Before I submit the patch to the i2c-core.c I wonder if I could have some comment on the implementation. Thanks, Luis