From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthias Brugger Subject: Re: [RFC PATCH 5/5] of: overlay-mgr: add a detector for headers stored on a ds2431 eeprom over w1 Date: Thu, 27 Oct 2016 11:18:59 +0200 Message-ID: References: <20161026145756.21689-1-antoine.tenart@free-electrons.com> <20161026145756.21689-6-antoine.tenart@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20161026145756.21689-6-antoine.tenart@free-electrons.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Antoine Tenart , maxime.ripard@free-electrons.com, pantelis.antoniou@konsulko.com, mark.rutland@arm.com, sboyd@codeaurora.org Cc: thomas.petazzoni@free-electrons.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org On 10/26/2016 04:57 PM, Antoine Tenart wrote: > Signed-off-by: Antoine Tenart > --- Please provide a commit message. > drivers/of/overlay-manager/Kconfig | 10 ++++++++++ > drivers/w1/slaves/w1_ds2431.c | 39 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 49 insertions(+) > > diff --git a/drivers/of/overlay-manager/Kconfig b/drivers/of/overlay-manager/Kconfig > index 1a36613c0c53..ad0a5b8e9e5e 100644 > --- a/drivers/of/overlay-manager/Kconfig > +++ b/drivers/of/overlay-manager/Kconfig > @@ -16,4 +16,14 @@ config OF_OVERLAY_MGR_FORMAT_CHIP > > endmenu > > +menu "Overlay Manager detectors" > + > +config OF_OVERLAY_MGR_DETECTOR_DS2431 > + bool "Dip header on a DS2431 EEPROM" > + depends on W1_SLAVE_DS2431 > + help > + Enable dip header DS2431 EEPROM support. > + > +endmenu > + > endif > diff --git a/drivers/w1/slaves/w1_ds2431.c b/drivers/w1/slaves/w1_ds2431.c > index 80572cb63ba8..760325f9a2bd 100644 > --- a/drivers/w1/slaves/w1_ds2431.c > +++ b/drivers/w1/slaves/w1_ds2431.c > @@ -15,6 +15,9 @@ > #include > #include > #include > +#include > + > +#include > > #include "../w1.h" > #include "../w1_int.h" > @@ -280,7 +283,43 @@ static const struct attribute_group *w1_f2d_groups[] = { > NULL, > }; > > +#if IS_ENABLED(CONFIG_OF_OVERLAY_MGR_DETECTOR_DS2431) > +static int chip_dip_callback(struct w1_slave *sl) > +{ > + char **candidates = NULL; > + int i, n, err = 0; > + u8 *data; > + > + data = kzalloc(OVERLAY_MGR_DIP_MAX_SZ, GFP_KERNEL); > + if (!data) > + return -ENOMEM; > + > + /* sizeof(struct chip_header) is a mulitple of 8 */ > + for (i = 0; i < OVERLAY_MGR_DIP_MAX_SZ; i += 8) { > + if (w1_f2d_readblock(sl, i, 8, &data[i])) { > + err = -EIO; > + goto end; > + } > + } > + > + overlay_mgr_parse(&sl->dev, data, &candidates, &n); > + if (!n) { > + err = -EINVAL; > + goto end; > + } > + > + err = overlay_mgr_apply(&sl->dev, candidates, n); > + > +end: > + kfree(data); > + return err; > +} > +#endif > + > static struct w1_family_ops w1_f2d_fops = { > +#if IS_ENABLED(CONFIG_OF_OVERLAY_MGR_DETECTOR_DS2431) > + .callback = chip_dip_callback, > +#endif > .groups = w1_f2d_groups, > }; > >