From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752159AbcHHLMR (ORCPT ); Mon, 8 Aug 2016 07:12:17 -0400 Received: from mail1.bemta6.messagelabs.com ([85.158.143.242]:24835 "EHLO mail1.bemta6.messagelabs.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751158AbcHHLMN (ORCPT ); Mon, 8 Aug 2016 07:12:13 -0400 X-Greylist: delayed 378 seconds by postgrey-1.27 at vger.kernel.org; Mon, 08 Aug 2016 07:12:12 EDT X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJKsWRWlGSWpSXmKPExsUSt3OpsW5d+op wgxc/rSzufz3KaHF51xw2ByaPO9f2sHl83iQXwBTFmpmXlF+RwJrxsec/U8Fj44qf90+zNDD2 GHcxcnEICSxllPj2o5uti5GTg03AUGLem/eMXYwcHCICKhLn3piDhJkFUiRevTrNDmILC8RKT DvwgAWiJE5i5moPkLCIgJXErD23GEFsFpDOCzdZQWxegQCJhXtnsoOUCwGV/zxSCRLmFNCUeH 9mLthERgFZiS+Nq5khNolL3HoynwnElhAQkFiy5zwzhC0q8fLxP1YIW15i7a8nUHF7idf33oF dIyGgL9HXWAwRNpRYNe0AC4RtLtFz5R4zSAkz0Nr1u/QhNilKTOl+yA5xpKDEyZlPWCYwis9C csQshI5ZSDpmIelYwMiyilGjOLWoLLVI19BYL6koMz2jJDcxM0fX0MBMLze1uDgxPTUnMalYL zk/dxMjMMoYgGAH45dlAYcYJTmYlER5pZRWhAvxJeWnVGYkFmfEF5XmpBYfYpTh4FCS4LVIA8 oJFqWmp1akZeYA4x0mLcHBoyTCmwOS5i0uSMwtzkyHSJ1iVJQS51UFSQiAJDJK8+DaYCnmEqO slDAvI9AhQjwFqUW5mSWo8q8YxTkYlYR5C0Gm8GTmlcBNfwW0mAlocZIq2OKSRISUVAOjv9du tl6bQ5ulL5mfOXEn0rs4XGT+e5mXaxZNfBBx4mCL+Oyp9ntczkqpi1lPUNhhEfUzJ7X8d12a9 KOi74/dP807lVdknemb3ux+oOwUx5+X/0+t3/X1hvQDYb2PDXsv6X1a8fPw/2aGJykxWwqTax 1Uc83Wnfns9oHt8esDsdMKqlvW2TyOVWIpzkg01GIuKk4EAMDV4U0sAwAA X-Env-Sender: stwiss.opensource@diasemi.com X-Msg-Ref: server-4.tower-193.messagelabs.com!1470654334!47700758!1 X-Originating-IP: [94.185.165.51] X-StarScan-Received: X-StarScan-Version: 8.77; banners=-,-,- X-VirusChecked: Checked From: Steve Twiss To: Lee Jones CC: LINUXKERNEL , Support Opensource Subject: RE: [PATCH V1] mfd: da9053: ensure the FAULT_LOG is cleared during MFD driver probe Thread-Topic: [PATCH V1] mfd: da9053: ensure the FAULT_LOG is cleared during MFD driver probe Thread-Index: AQHR15qIMqcuYS9QYUupyJF6BAU2WqA6MPkAgATZm0A= Date: Mon, 8 Aug 2016 11:05:33 +0000 Message-ID: <6ED8E3B22081A4459DAC7699F3695FB70173DCD7C3@SW-EX-MBX02.diasemi.com> References: <20160706152448.445333FAC2@swsrvapps-01.diasemi.com> <20160805090512.GU5243@dell> In-Reply-To: <20160805090512.GU5243@dell> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.20.26.77] x-kse-attachmentfiltering-interceptor-info: protection disabled x-kse-serverinfo: sw-ex-cashub01.diasemi.com, 9 x-kse-antivirus-interceptor-info: scan successful x-kse-antivirus-info: Clean, bases: 08/08/2016 08:46:00 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id u78BCLW2019061 On 05 August 2016 10:05, Lee Jones wrote: > To: Steve Twiss > Subject: Re: [PATCH V1] mfd: da9053: ensure the FAULT_LOG is cleared during MFD driver probe > > On Wed, 06 Jul 2016, Steve Twiss wrote: > > From: Steve Twiss > > > > Clearance of any the persistent information within the DA9053 FAULT_LOG > > register must be completed during start-up so the fault-log does not > > continue with previous values. A clearance function has been added here in > > the kernel driver because wiping the fault-log cannot be counted on outside > > the Linux kernel. [...] > > This patch is similar to the requirements for DA9062 and DA9063: to ensure > > the FAULT_LOG is started from a 'clean' position. > > > > The Dialog datasheet for DA9053 suggests: "The FAULT_LOG register has to > > be cleared from the host after reading, by writing a value of 11111111". > > > > See reference: > > commit 9011e4a8a6fe57f76511609930ed00d305389089 > > Author: Steve Twiss > > Date: Tue May 19 11:32:45 2015 +0100 > > Looks like much of the same code. Can you have a pop at generifying > this to avoid any unnecessary duplication? Hi Lee, Although the function looks like those found in both the DA9062 and DA9063 drivers, I was just intending to highlight the "requirement similarities" to clear the fault register on start-up. This requirement for the Dialog PMIC chips extends across those devices, but the function is not really general enough to be merged into the kernel core or reused across other Dialog devices. I don't think there is unnecessary duplication in this particular case for the DA9052/53 driver. This da9052_clear_fault_log() function will apply to both the Dialog DA9052 and DA9053 PMICs and so I am making good use of code re-use in this place. But, this does not extend to the DA9062 or DA9063. I don't think this FAULT_LOG clearance function in this case is really open to generalisation past the DA9052/53 driver. Regards, Steve > > drivers/mfd/da9052-core.c | 51 > +++++++++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 51 insertions(+) > > > > diff --git a/drivers/mfd/da9052-core.c b/drivers/mfd/da9052-core.c > > index c0bf68a..a88c206 100644 > > --- a/drivers/mfd/da9052-core.c > > +++ b/drivers/mfd/da9052-core.c > > @@ -167,6 +167,7 @@ static bool da9052_reg_writeable(struct device > *dev, unsigned int reg) > > case DA9052_EVENT_B_REG: > > case DA9052_EVENT_C_REG: > > case DA9052_EVENT_D_REG: > > + case DA9052_FAULTLOG_REG: > > case DA9052_IRQ_MASK_A_REG: > > case DA9052_IRQ_MASK_B_REG: > > case DA9052_IRQ_MASK_C_REG: > > @@ -541,6 +542,52 @@ const struct regmap_config > da9052_regmap_config = { > > }; > > EXPORT_SYMBOL_GPL(da9052_regmap_config); > > > > +static int da9052_clear_fault_log(struct da9052 *da9052) > > +{ > > + int ret = 0; > > + int fault_log = 0; > > + > > + fault_log = da9052_reg_read(da9052, DA9052_FAULTLOG_REG); > > + if (fault_log < 0) { > > + dev_err(da9052->dev, > > + "Cannot read FAULT_LOG %d\n", fault_log); > > + return fault_log; > > + } > > + > > + if (fault_log) { > > + if (fault_log & DA9052_FAULTLOG_TWDERROR) > > + dev_dbg(da9052->dev, > > + "Fault log entry detected: TWD_ERROR\n"); > > + if (fault_log & DA9052_FAULTLOG_VDDFAULT) > > + dev_dbg(da9052->dev, > > + "Fault log entry detected: VDD_FAULT\n"); > > + if (fault_log & DA9052_FAULTLOG_VDDSTART) > > + dev_dbg(da9052->dev, > > + "Fault log entry detected: VDD_START\n"); > > + if (fault_log & DA9052_FAULTLOG_TEMPOVER) > > + dev_dbg(da9052->dev, > > + "Fault log entry detected: TEMP_OVER\n"); > > + if (fault_log & DA9052_FAULTLOG_KEYSHUT) > > + dev_dbg(da9052->dev, > > + "Fault log entry detected: KEY_SHUT\n"); > > + if (fault_log & DA9052_FAULTLOG_NSDSET) > > + dev_dbg(da9052->dev, > > + "Fault log entry detected: nSD_SHUT\n"); > > + if (fault_log & DA9052_FAULTLOG_WAITSET) > > + dev_dbg(da9052->dev, > > + "Fault log entry detected: WAIT_SHUT\n"); > > + > > + ret = da9052_reg_write(da9052, > > + DA9052_FAULTLOG_REG, > > + 0xFF); > > + if (ret < 0) > > + dev_err(da9052->dev, > > + "Cannot reset FAULT_LOG values %d\n", ret); > > + } > > + > > + return ret; > > +} > > + > > int da9052_device_init(struct da9052 *da9052, u8 chip_id) > > { > > struct da9052_pdata *pdata = dev_get_platdata(da9052->dev); > > @@ -549,6 +596,10 @@ int da9052_device_init(struct da9052 *da9052, u8 chip_id) > > mutex_init(&da9052->auxadc_lock); > > init_completion(&da9052->done); > > > > + ret = da9052_clear_fault_log(da9052); > > + if (ret < 0) > > + dev_warn(da9052->dev, "Cannot clear FAULT_LOG\n"); > > + > > if (pdata && pdata->init != NULL) > > pdata->init(da9052); > >