From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759962AbcAKRRm (ORCPT ); Mon, 11 Jan 2016 12:17:42 -0500 Received: from hqemgate16.nvidia.com ([216.228.121.65]:14510 "EHLO hqemgate16.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759405AbcAKRRk (ORCPT ); Mon, 11 Jan 2016 12:17:40 -0500 X-PGP-Universal: processed; by hqnvupgp07.nvidia.com on Mon, 11 Jan 2016 09:00:34 -0800 Message-ID: <5693E14B.4050306@nvidia.com> Date: Mon, 11 Jan 2016 22:37:23 +0530 From: Laxman Dewangan User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Alexandre Belloni CC: Mark Brown , Krzysztof Kozlowski , , , , , , , , , , , , , , , , , Chaitanya Bandi Subject: Re: [rtc-linux] [PATCH 5/6] rtc: max77620: add support for max77620/max20024 RTC driver References: <1452177524-23192-1-git-send-email-ldewangan@nvidia.com> <1452177524-23192-6-git-send-email-ldewangan@nvidia.com> <568F8D7E.10500@nvidia.com> <20160108125117.GM6588@sirena.org.uk> <568FB3DD.4090503@nvidia.com> <20160108133648.GQ6588@sirena.org.uk> <568FBB6D.2020904@nvidia.com> <5693AB6E.4090700@nvidia.com> <20160111160419.GA3367@piout.net> In-Reply-To: <20160111160419.GA3367@piout.net> X-Originating-IP: [10.19.65.30] X-ClientProxiedBy: DRUKMAIL102.nvidia.com (10.25.59.20) To bgmail102.nvidia.com (10.25.59.11) Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Monday 11 January 2016 09:34 PM, Alexandre Belloni wrote: > On 11/01/2016 at 18:47:34 +0530, Laxman Dewangan wrote : >> On Friday 08 January 2016 07:06 PM, Laxman Dewangan wrote: >>> On Friday 08 January 2016 07:06 PM, Mark Brown wrote: >>>> * PGP Signed by an unknown key >>>> >>>> On Fri, Jan 08, 2016 at 06:34:29PM +0530, Laxman Dewangan wrote: >>>> >>>>> If we get the parent device, regmap handle and interrupt number from >>>>> mfd >>>>> core independent of the PMIC (MAX77620 or MAX77686), then same driver >>>>> can be >>>>> used here. >>>>> Two way which I can think of here: >>>> Parent device is just dev->parent, you can use dev_get_regmap() to get a >>>> regmap given a struct device and you can use platform resources to pass >>>> the interrupts to the children from the MFD (there's some examples, >>>> wm831x is one). >>>> >>>> >>> I think it should work with named regmap. mfd whould init regmap with name >>> and rtc driver should ask with same name. >>> >>> I saw three drivers which looks same: >>> rtc-max77620.c (new from me) and already available rtc-max77686.c, >>> rtc-max77802.c >>> >>> Seems I can develop IP based rtc driver as rtc-max77xxx.c >> I came with one of issue when doing this. >> >> The RTC driver parent is not the same parent for which i2c slave address get >> registered. >> There is two slave address from max77620, 0x3C (for general) and 0x68 for >> RTC. >> >> In max77620 mfd driver, we make dummy i2c client for 0x68 and initialize >> regmap with this address. >> >> Now on mfd_add_devices, we pass the device for 0x3c and hence the RTC driver >> treat the parent as the 0x3c device but actually it should be 0x68 to get >> the proper regmap. >> >> >> Two approach: >> 1. If we add the option to pass parent_dev when adding cells form >> mfd_add_devices and select the parent device based on this option then it >> can be easily handle. >> Add parent_dev structure in struct mfd_cell and then change the parent >> in mfd_add_device() if cells has parent device. >> >> 2. Register the RTC driver with different mfd_add_devices with dummy i2c >> client device. >> So two times mfd_add_devices. >> >> >> IMO, approach 1 looks good to me. >> >> Any opinion? >> > If the RTC is not at the same address, I'd say this is not an mfd > anymore, can't you probe it directly from DT? > > This approach is also possible but, although this is independent IP with separate i2c address but became it is inside the PMIC and its interrupt depends on PMIC internals, I like to register this rtc device from the mfd core. So that when mfd core is ready with their interrupts and initial setting, it can register rtc device.