diff for duplicates of <20160608141735.GE14888@dell> diff --git a/a/1.txt b/N1/1.txt index 415e5dc..0f92ae8 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -24,7 +24,7 @@ Battery support Swap '.' for ','. -> Signed-off-by: Wadim Egorov <w.egorov@phytec.de> +> Signed-off-by: Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org> > --- > drivers/mfd/Kconfig | 4 +- > drivers/mfd/rk808.c | 231 ++++++++++++++++++++++++++++++++++++++-------- @@ -65,12 +65,12 @@ Swap '.' for ','. > * > * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd > * -> * Author: Chris Zhong <zyw@rock-chips.com> -> * Author: Zhang Qing <zhangqing@rock-chips.com> +> * Author: Chris Zhong <zyw-TNX95d0MmH7DzftRWevZcw@public.gmane.org> +> * Author: Zhang Qing <zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org> > * > + * Copyright (C) 2016 PHYTEC Messtechnik GmbH > + * -> + * Author: Wadim Egorov <w.egorov@phytec.de> +> + * Author: Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org> > + * > * This program is free software; you can redistribute it and/or modify it > * under the terms and conditions of the GNU General Public License, @@ -403,10 +403,10 @@ read directly from the silicon? > MODULE_DEVICE_TABLE(i2c, rk808_ids); > @@ -272,4 +430,5 @@ module_i2c_driver(rk808_i2c_driver); > MODULE_LICENSE("GPL"); -> MODULE_AUTHOR("Chris Zhong <zyw@rock-chips.com>"); -> MODULE_AUTHOR("Zhang Qing <zhangqing@rock-chips.com>"); +> MODULE_AUTHOR("Chris Zhong <zyw-TNX95d0MmH7DzftRWevZcw@public.gmane.org>"); +> MODULE_AUTHOR("Zhang Qing <zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>"); > -MODULE_DESCRIPTION("RK808 PMIC driver"); -> +MODULE_AUTHOR("Wadim Egorov <w.egorov@phytec.de>"); +> +MODULE_AUTHOR("Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org>"); > +MODULE_DESCRIPTION("RK808/RK818 PMIC driver"); > diff --git a/include/linux/mfd/rk808.h b/include/linux/mfd/rk808.h > index 441b6ee..5ce810c 100644 @@ -419,12 +419,12 @@ read directly from the silicon? > * > * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd > * -> * Author: Chris Zhong <zyw@rock-chips.com> -> * Author: Zhang Qing <zhangqing@rock-chips.com> +> * Author: Chris Zhong <zyw-TNX95d0MmH7DzftRWevZcw@public.gmane.org> +> * Author: Zhang Qing <zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org> > * > + * Copyright (C) 2016 PHYTEC Messtechnik GmbH > + * -> + * Author: Wadim Egorov <w.egorov@phytec.de> +> + * Author: Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org> > + * > * This program is free software; you can redistribute it and/or modify it > * under the terms and conditions of the GNU General Public License, @@ -625,3 +625,13 @@ Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog + +-- +You received this message because you are subscribed to "rtc-linux". +Membership options at http://groups.google.com/group/rtc-linux . +Please read http://groups.google.com/group/rtc-linux/web/checklist +before submitting a driver. +--- +You received this message because you are subscribed to the Google Groups "rtc-linux" group. +To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org +For more options, visit https://groups.google.com/d/optout. diff --git a/a/content_digest b/N1/content_digest index e6e7775..4864569 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,26 +1,27 @@ "ref\01464850228-17244-1-git-send-email-w.egorov@phytec.de\0" - "From\0Lee Jones <lee.jones@linaro.org>\0" + "ref\01464850228-17244-1-git-send-email-w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org\0" + "From\0Lee Jones <lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>\0" "Subject\0Re: [RESEND PATCH v5 1/5] mfd: RK808: Add RK818 support\0" "Date\0Wed, 8 Jun 2016 15:17:35 +0100\0" - "To\0Wadim Egorov <w.egorov@phytec.de>\0" - "Cc\0linux-kernel@vger.kernel.org" - linux-clk@vger.kernel.org - rtc-linux@googlegroups.com - devicetree@vger.kernel.org - linux-rockchip@lists.infradead.org - robh+dt@kernel.org - pawel.moll@arm.com - mark.rutland@arm.com - ijc+devicetree@hellion.org.uk - galak@codeaurora.org - mturquette@baylibre.com - sboyd@codeaurora.org - lgirdwood@gmail.com - broonie@kernel.org - a.zummo@towertech.it - alexandre.belloni@free-electrons.com - dianders@chromium.org - " zyw@rock-chips.com\0" + "To\0Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org>\0" + "Cc\0linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" + linux-clk-u79uwXL29TY76Z2rM5mHXA@public.gmane.org + rtc-linux-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org + devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org + linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org + robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org + pawel.moll-5wv7dgnIgG8@public.gmane.org + mark.rutland-5wv7dgnIgG8@public.gmane.org + ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org + galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org + mturquette-rdvid1DuHRBWk0Htik3J/w@public.gmane.org + sboyd-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org + lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org + broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org + a.zummo-BfzFCNDTiLLj+vYz1yj4TQ@public.gmane.org + alexandre.belloni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org + dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org + " zyw-TNX95d0MmH7DzftRWevZcw@public.gmane.org\0" "\00:1\0" "b\0" "On Thu, 02 Jun 2016, Wadim Egorov wrote:\n" @@ -49,7 +50,7 @@ "\n" "Swap '.' for ','.\n" "\n" - "> Signed-off-by: Wadim Egorov <w.egorov@phytec.de>\n" + "> Signed-off-by: Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org>\n" "> ---\n" "> drivers/mfd/Kconfig | 4 +-\n" "> drivers/mfd/rk808.c | 231 ++++++++++++++++++++++++++++++++++++++--------\n" @@ -90,12 +91,12 @@ "> *\n" "> * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd\n" "> *\n" - "> * Author: Chris Zhong <zyw@rock-chips.com>\n" - "> * Author: Zhang Qing <zhangqing@rock-chips.com>\n" + "> * Author: Chris Zhong <zyw-TNX95d0MmH7DzftRWevZcw@public.gmane.org>\n" + "> * Author: Zhang Qing <zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>\n" "> *\n" "> + * Copyright (C) 2016 PHYTEC Messtechnik GmbH\n" "> + *\n" - "> + * Author: Wadim Egorov <w.egorov@phytec.de>\n" + "> + * Author: Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org>\n" "> + *\n" "> * This program is free software; you can redistribute it and/or modify it\n" "> * under the terms and conditions of the GNU General Public License,\n" @@ -428,10 +429,10 @@ "> MODULE_DEVICE_TABLE(i2c, rk808_ids);\n" "> @@ -272,4 +430,5 @@ module_i2c_driver(rk808_i2c_driver);\n" "> MODULE_LICENSE(\"GPL\");\n" - "> MODULE_AUTHOR(\"Chris Zhong <zyw@rock-chips.com>\");\n" - "> MODULE_AUTHOR(\"Zhang Qing <zhangqing@rock-chips.com>\");\n" + "> MODULE_AUTHOR(\"Chris Zhong <zyw-TNX95d0MmH7DzftRWevZcw@public.gmane.org>\");\n" + "> MODULE_AUTHOR(\"Zhang Qing <zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>\");\n" "> -MODULE_DESCRIPTION(\"RK808 PMIC driver\");\n" - "> +MODULE_AUTHOR(\"Wadim Egorov <w.egorov@phytec.de>\");\n" + "> +MODULE_AUTHOR(\"Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org>\");\n" "> +MODULE_DESCRIPTION(\"RK808/RK818 PMIC driver\");\n" "> diff --git a/include/linux/mfd/rk808.h b/include/linux/mfd/rk808.h\n" "> index 441b6ee..5ce810c 100644\n" @@ -444,12 +445,12 @@ "> *\n" "> * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd\n" "> *\n" - "> * Author: Chris Zhong <zyw@rock-chips.com>\n" - "> * Author: Zhang Qing <zhangqing@rock-chips.com>\n" + "> * Author: Chris Zhong <zyw-TNX95d0MmH7DzftRWevZcw@public.gmane.org>\n" + "> * Author: Zhang Qing <zhangqing-TNX95d0MmH7DzftRWevZcw@public.gmane.org>\n" "> *\n" "> + * Copyright (C) 2016 PHYTEC Messtechnik GmbH\n" "> + *\n" - "> + * Author: Wadim Egorov <w.egorov@phytec.de>\n" + "> + * Author: Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org>\n" "> + *\n" "> * This program is free software; you can redistribute it and/or modify it\n" "> * under the terms and conditions of the GNU General Public License,\n" @@ -649,6 +650,16 @@ "Lee Jones\n" "Linaro STMicroelectronics Landing Team Lead\n" "Linaro.org \342\224\202 Open source software for ARM SoCs\n" - Follow Linaro: Facebook | Twitter | Blog + "Follow Linaro: Facebook | Twitter | Blog\n" + "\n" + "-- \n" + "You received this message because you are subscribed to \"rtc-linux\".\n" + "Membership options at http://groups.google.com/group/rtc-linux .\n" + "Please read http://groups.google.com/group/rtc-linux/web/checklist\n" + "before submitting a driver.\n" + "--- \n" + "You received this message because you are subscribed to the Google Groups \"rtc-linux\" group.\n" + "To unsubscribe from this group and stop receiving emails from it, send an email to rtc-linux+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org\n" + For more options, visit https://groups.google.com/d/optout. -680e5463964f863b7f900f53b28504ae99f68b7246e311f6895e4b012355b665 +a922f14eca6bc833da2b83f7a66b080304baf70dae19a85aabb520f38f971739
diff --git a/a/1.txt b/N2/1.txt index 415e5dc..2c833ad 100644 --- a/a/1.txt +++ b/N2/1.txt @@ -5,7 +5,7 @@ On Thu, 02 Jun 2016, Wadim Egorov wrote: "Power Management IC (PMIC)" > devices. It contains the following components: -> +>=20 > - Regulators > - RTC > - Clkout @@ -27,17 +27,18 @@ Swap '.' for ','. > Signed-off-by: Wadim Egorov <w.egorov@phytec.de> > --- > drivers/mfd/Kconfig | 4 +- -> drivers/mfd/rk808.c | 231 ++++++++++++++++++++++++++++++++++++++-------- +> drivers/mfd/rk808.c | 231 ++++++++++++++++++++++++++++++++++++++--= +------ > include/linux/mfd/rk808.h | 162 ++++++++++++++++++++++++++++++-- > 3 files changed, 350 insertions(+), 47 deletions(-) -> +>=20 > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > index 1bcf601..7ba464b 100644 > --- a/drivers/mfd/Kconfig > +++ b/drivers/mfd/Kconfig > @@ -839,13 +839,13 @@ config MFD_RC5T583 > different functionality of the device. -> +> =20 > config MFD_RK808 > - tristate "Rockchip RK808 Power Management chip" > + tristate "Rockchip RK808/RK818 Power Management chip" @@ -72,7 +73,8 @@ Swap '.' for ','. > + * > + * Author: Wadim Egorov <w.egorov@phytec.de> > + * -> * This program is free software; you can redistribute it and/or modify it +> * This program is free software; you can redistribute it and/or modify = +it > * under the terms and conditions of the GNU General Public License, > * version 2, as published by the Free Software Foundation. > @@ -22,12 +26,7 @@ @@ -89,54 +91,56 @@ Swap '.' for ','. Why are you moving this to the header? > +#include <linux/of_device.h> -> +> =20 > static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg) > { -> @@ -57,6 +56,14 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg) +> @@ -57,6 +56,14 @@ static bool rk808_is_volatile_reg(struct device *dev, = +unsigned int reg) > return false; > } -> -> +static const struct regmap_config rk818_regmap_config = { -> + .reg_bits = 8, -> + .val_bits = 8, -> + .max_register = RK818_USB_CTRL_REG, -> + .cache_type = REGCACHE_RBTREE, -> + .volatile_reg = rk808_is_volatile_reg, +> =20 +> +static const struct regmap_config rk818_regmap_config =3D { +> + .reg_bits =3D 8, +> + .val_bits =3D 8, +> + .max_register =3D RK818_USB_CTRL_REG, +> + .cache_type =3D REGCACHE_RBTREE, +> + .volatile_reg =3D rk808_is_volatile_reg, > +}; > + -> static const struct regmap_config rk808_regmap_config = { -> .reg_bits = 8, -> .val_bits = 8, -> @@ -83,7 +90,17 @@ static const struct mfd_cell rk808s[] = { +> static const struct regmap_config rk808_regmap_config =3D { +> .reg_bits =3D 8, +> .val_bits =3D 8, +> @@ -83,7 +90,17 @@ static const struct mfd_cell rk808s[] =3D { > }, > }; -> -> -static const struct rk808_reg_data pre_init_reg[] = { -> +static const struct mfd_cell rk818s[] = { -> + { .name = "rk808-clkout", }, +> =20 +> -static const struct rk808_reg_data pre_init_reg[] =3D { +> +static const struct mfd_cell rk818s[] =3D { +> + { .name =3D "rk808-clkout", }, How does this differ to a normal -clock driver? -> + { .name = "rk808-regulator", }, +> + { .name =3D "rk808-regulator", }, > + { -> + .name = "rk808-rtc", -> + .num_resources = ARRAY_SIZE(rtc_resources), -> + .resources = &rtc_resources[0], +> + .name =3D "rk808-rtc", +> + .num_resources =3D ARRAY_SIZE(rtc_resources), +> + .resources =3D &rtc_resources[0], -.resources = rtc_resources, ? +.resources =3D rtc_resources, ? > + }, > +}; > + -> +static const struct rk8xx_reg_data rk808_pre_init_reg[] = { +> +static const struct rk8xx_reg_data rk808_pre_init_reg[] =3D { > { RK808_BUCK3_CONFIG_REG, BUCK_ILMIN_MASK, BUCK_ILMIN_150MA }, > { RK808_BUCK4_CONFIG_REG, BUCK_ILMIN_MASK, BUCK_ILMIN_200MA }, > { RK808_BOOST_CONFIG_REG, BOOST_ILMIN_MASK, BOOST_ILMIN_100MA }, -> @@ -94,6 +111,22 @@ static const struct rk808_reg_data pre_init_reg[] = { +> @@ -94,6 +111,22 @@ static const struct rk808_reg_data pre_init_reg[] =3D= + { > VB_LO_SEL_3500MV }, > }; -> -> +static const struct rk8xx_reg_data rk818_pre_init_reg[] = { +> =20 +> +static const struct rk8xx_reg_data rk818_pre_init_reg[] =3D { > + { RK818_USB_CTRL_REG, RK818_USB_ILIM_SEL_MASK, > + RK818_USB_ILMIN_2000MA }, > + /* close charger when usb lower then 3.4V */ @@ -154,100 +158,100 @@ How does this differ to a normal -clock driver? The alignment here looks odd. -> static const struct regmap_irq rk808_irqs[] = { +> static const struct regmap_irq rk808_irqs[] =3D { > /* INT_STS */ -> [RK808_IRQ_VOUT_LO] = { -> @@ -136,6 +169,76 @@ static const struct regmap_irq rk808_irqs[] = { +> [RK808_IRQ_VOUT_LO] =3D { +> @@ -136,6 +169,76 @@ static const struct regmap_irq rk808_irqs[] =3D { > }, > }; -> -> +static const struct regmap_irq rk818_irqs[] = { +> =20 +> +static const struct regmap_irq rk818_irqs[] =3D { > + /* INT_STS */ -> + [RK818_IRQ_VOUT_LO] = { -> + .mask = RK818_IRQ_VOUT_LO_MSK, -> + .reg_offset = 0, +> + [RK818_IRQ_VOUT_LO] =3D { +> + .mask =3D RK818_IRQ_VOUT_LO_MSK, +> + .reg_offset =3D 0, > + }, -> + [RK818_IRQ_VB_LO] = { -> + .mask = RK818_IRQ_VB_LO_MSK, -> + .reg_offset = 0, +> + [RK818_IRQ_VB_LO] =3D { +> + .mask =3D RK818_IRQ_VB_LO_MSK, +> + .reg_offset =3D 0, > + }, -> + [RK818_IRQ_PWRON] = { -> + .mask = RK818_IRQ_PWRON_MSK, -> + .reg_offset = 0, +> + [RK818_IRQ_PWRON] =3D { +> + .mask =3D RK818_IRQ_PWRON_MSK, +> + .reg_offset =3D 0, > + }, -> + [RK818_IRQ_PWRON_LP] = { -> + .mask = RK818_IRQ_PWRON_LP_MSK, -> + .reg_offset = 0, +> + [RK818_IRQ_PWRON_LP] =3D { +> + .mask =3D RK818_IRQ_PWRON_LP_MSK, +> + .reg_offset =3D 0, > + }, -> + [RK818_IRQ_HOTDIE] = { -> + .mask = RK818_IRQ_HOTDIE_MSK, -> + .reg_offset = 0, +> + [RK818_IRQ_HOTDIE] =3D { +> + .mask =3D RK818_IRQ_HOTDIE_MSK, +> + .reg_offset =3D 0, > + }, -> + [RK818_IRQ_RTC_ALARM] = { -> + .mask = RK818_IRQ_RTC_ALARM_MSK, -> + .reg_offset = 0, +> + [RK818_IRQ_RTC_ALARM] =3D { +> + .mask =3D RK818_IRQ_RTC_ALARM_MSK, +> + .reg_offset =3D 0, > + }, -> + [RK818_IRQ_RTC_PERIOD] = { -> + .mask = RK818_IRQ_RTC_PERIOD_MSK, -> + .reg_offset = 0, +> + [RK818_IRQ_RTC_PERIOD] =3D { +> + .mask =3D RK818_IRQ_RTC_PERIOD_MSK, +> + .reg_offset =3D 0, > + }, -> + [RK818_IRQ_USB_OV] = { -> + .mask = RK818_IRQ_USB_OV_MSK, -> + .reg_offset = 0, +> + [RK818_IRQ_USB_OV] =3D { +> + .mask =3D RK818_IRQ_USB_OV_MSK, +> + .reg_offset =3D 0, > + }, > + > + /* INT_STS2 */ -> + [RK818_IRQ_PLUG_IN] = { -> + .mask = RK818_IRQ_PLUG_IN_MSK, -> + .reg_offset = 1, +> + [RK818_IRQ_PLUG_IN] =3D { +> + .mask =3D RK818_IRQ_PLUG_IN_MSK, +> + .reg_offset =3D 1, > + }, -> + [RK818_IRQ_PLUG_OUT] = { -> + .mask = RK818_IRQ_PLUG_OUT_MSK, -> + .reg_offset = 1, +> + [RK818_IRQ_PLUG_OUT] =3D { +> + .mask =3D RK818_IRQ_PLUG_OUT_MSK, +> + .reg_offset =3D 1, > + }, -> + [RK818_IRQ_CHG_OK] = { -> + .mask = RK818_IRQ_CHG_OK_MSK, -> + .reg_offset = 1, +> + [RK818_IRQ_CHG_OK] =3D { +> + .mask =3D RK818_IRQ_CHG_OK_MSK, +> + .reg_offset =3D 1, > + }, -> + [RK818_IRQ_CHG_TE] = { -> + .mask = RK818_IRQ_CHG_TE_MSK, -> + .reg_offset = 1, +> + [RK818_IRQ_CHG_TE] =3D { +> + .mask =3D RK818_IRQ_CHG_TE_MSK, +> + .reg_offset =3D 1, > + }, -> + [RK818_IRQ_CHG_TS1] = { -> + .mask = RK818_IRQ_CHG_TS1_MSK, -> + .reg_offset = 1, +> + [RK818_IRQ_CHG_TS1] =3D { +> + .mask =3D RK818_IRQ_CHG_TS1_MSK, +> + .reg_offset =3D 1, > + }, -> + [RK818_IRQ_TS2] = { -> + .mask = RK818_IRQ_TS2_MSK, -> + .reg_offset = 1, +> + [RK818_IRQ_TS2] =3D { +> + .mask =3D RK818_IRQ_TS2_MSK, +> + .reg_offset =3D 1, > + }, -> + [RK818_IRQ_CHG_CVTLIM] = { -> + .mask = RK818_IRQ_CHG_CVTLIM_MSK, -> + .reg_offset = 1, +> + [RK818_IRQ_CHG_CVTLIM] =3D { +> + .mask =3D RK818_IRQ_CHG_CVTLIM_MSK, +> + .reg_offset =3D 1, > + }, -> + [RK818_IRQ_DISCHG_ILIM] = { -> + .mask = RK818_IRQ_DISCHG_ILIM_MSK, -> + .reg_offset = 1, +> + [RK818_IRQ_DISCHG_ILIM] =3D { +> + .mask =3D RK818_IRQ_DISCHG_ILIM_MSK, +> + .reg_offset =3D 1, > + }, > +}; > + -> static struct regmap_irq_chip rk808_irq_chip = { -> .name = "rk808", -> .irqs = rk808_irqs, -> @@ -148,6 +251,18 @@ static struct regmap_irq_chip rk808_irq_chip = { -> .init_ack_masked = true, +> static struct regmap_irq_chip rk808_irq_chip =3D { +> .name =3D "rk808", +> .irqs =3D rk808_irqs, +> @@ -148,6 +251,18 @@ static struct regmap_irq_chip rk808_irq_chip =3D { +> .init_ack_masked =3D true, > }; -> -> +static struct regmap_irq_chip rk818_irq_chip = { -> + .name = "rk818", -> + .irqs = rk818_irqs, -> + .num_irqs = ARRAY_SIZE(rk818_irqs), -> + .num_regs = 2, -> + .irq_reg_stride = 2, -> + .status_base = RK818_INT_STS_REG1, -> + .mask_base = RK818_INT_STS_MSK_REG1, -> + .ack_base = RK818_INT_STS_REG1, -> + .init_ack_masked = true, +> =20 +> +static struct regmap_irq_chip rk818_irq_chip =3D { +> + .name =3D "rk818", +> + .irqs =3D rk818_irqs, +> + .num_irqs =3D ARRAY_SIZE(rk818_irqs), +> + .num_regs =3D 2, +> + .irq_reg_stride =3D 2, +> + .status_base =3D RK818_INT_STS_REG1, +> + .mask_base =3D RK818_INT_STS_MSK_REG1, +> + .ack_base =3D RK818_INT_STS_REG1, +> + .init_ack_masked =3D true, > +}; > + > static struct i2c_client *rk808_i2c_client; @@ -256,10 +260,10 @@ The alignment here looks odd. > @@ -167,6 +282,48 @@ static void rk808_device_shutdown(void) > dev_err(&rk808_i2c_client->dev, "power off error!\n"); > } -> -> +static const struct of_device_id rk808_of_match[] = { -> + { .compatible = "rockchip,rk808", .data = (void *) RK808_ID }, -> + { .compatible = "rockchip,rk818", .data = (void *) RK818_ID }, +> =20 +> +static const struct of_device_id rk808_of_match[] =3D { +> + { .compatible =3D "rockchip,rk808", .data =3D (void *) RK808_ID }, +> + { .compatible =3D "rockchip,rk818", .data =3D (void *) RK818_ID }, > + { }, > +}; > +MODULE_DEVICE_TABLE(of, rk808_of_match); @@ -273,29 +277,29 @@ It's more common to return the pointer however. > +{ > + const struct of_device_id *of_id; > + -> + of_id = of_match_device(rk808_of_match, dev); +> + of_id =3D of_match_device(rk808_of_match, dev); > + if (!of_id) { > + dev_err(dev, "Unable to match OF ID\n"); > + return -ENODEV; > + } -> + rk808->variant = (long) of_id->data; +> + rk808->variant =3D (long) of_id->data; > + > + switch (rk808->variant) { > + case RK808_ID: -> + rk808->nr_cells = ARRAY_SIZE(rk808s); -> + rk808->cells = rk808s; -> + rk808->regmap_cfg = &rk808_regmap_config; -> + rk808->regmap_irq_chip = &rk808_irq_chip; -> + rk808->pre_init_reg = rk808_pre_init_reg; -> + rk808->nr_pre_init_regs = ARRAY_SIZE(rk808_pre_init_reg); +> + rk808->nr_cells =3D ARRAY_SIZE(rk808s); +> + rk808->cells =3D rk808s; +> + rk808->regmap_cfg =3D &rk808_regmap_config; +> + rk808->regmap_irq_chip =3D &rk808_irq_chip; +> + rk808->pre_init_reg =3D rk808_pre_init_reg; +> + rk808->nr_pre_init_regs =3D ARRAY_SIZE(rk808_pre_init_reg); > + break; > + case RK818_ID: -> + rk808->nr_cells = ARRAY_SIZE(rk818s); -> + rk808->cells = rk818s; -> + rk808->regmap_cfg = &rk818_regmap_config; -> + rk808->regmap_irq_chip = &rk818_irq_chip; -> + rk808->pre_init_reg = rk818_pre_init_reg; -> + rk808->nr_pre_init_regs = ARRAY_SIZE(rk818_pre_init_reg); +> + rk808->nr_cells =3D ARRAY_SIZE(rk818s); +> + rk808->cells =3D rk818s; +> + rk808->regmap_cfg =3D &rk818_regmap_config; +> + rk808->regmap_irq_chip =3D &rk818_irq_chip; +> + rk808->pre_init_reg =3D rk818_pre_init_reg; +> + rk808->nr_pre_init_regs =3D ARRAY_SIZE(rk818_pre_init_reg); > + break; > + default: > + dev_err(dev, "unsupported RK8XX ID %lu\n", rk808->variant); @@ -310,18 +314,18 @@ It's more common to return the pointer however. > @@ -176,46 +333,52 @@ static int rk808_probe(struct i2c_client *client, > int ret; > int i; -> +> =20 > - if (!client->irq) { > - dev_err(&client->dev, "No interrupt support, no core IRQ\n"); > - return -EINVAL; > - } > - -> rk808 = devm_kzalloc(&client->dev, sizeof(*rk808), GFP_KERNEL); +> rk808 =3D devm_kzalloc(&client->dev, sizeof(*rk808), GFP_KERNEL); > if (!rk808) > return -ENOMEM; -> -> - rk808->regmap = devm_regmap_init_i2c(client, &rk808_regmap_config); -> + ret = rk8xx_match_device(rk808, &client->dev); +> =20 +> - rk808->regmap =3D devm_regmap_init_i2c(client, &rk808_regmap_config); +> + ret =3D rk8xx_match_device(rk808, &client->dev); Is there a way to dynamically probe the device? No device ID you can read directly from the silicon? @@ -329,17 +333,17 @@ read directly from the silicon? > + if (ret) > + return ret; > + -> + rk808->i2c = client; +> + rk808->i2c =3D client; > + i2c_set_clientdata(client, rk808); > + -> + rk808->regmap = devm_regmap_init_i2c(client, rk808->regmap_cfg); +> + rk808->regmap =3D devm_regmap_init_i2c(client, rk808->regmap_cfg); > if (IS_ERR(rk808->regmap)) { > dev_err(&client->dev, "regmap initialization failed\n"); > return PTR_ERR(rk808->regmap); > } -> -> - for (i = 0; i < ARRAY_SIZE(pre_init_reg); i++) { -> - ret = regmap_update_bits(rk808->regmap, pre_init_reg[i].addr, +> =20 +> - for (i =3D 0; i < ARRAY_SIZE(pre_init_reg); i++) { +> - ret =3D regmap_update_bits(rk808->regmap, pre_init_reg[i].addr, > - pre_init_reg[i].mask, > - pre_init_reg[i].value); > - if (ret) { @@ -351,8 +355,8 @@ read directly from the silicon? > + dev_err(&client->dev, "No interrupt support, no core IRQ\n"); > + return -EINVAL; > } -> -> ret = regmap_add_irq_chip(rk808->regmap, client->irq, +> =20 +> ret =3D regmap_add_irq_chip(rk808->regmap, client->irq, > IRQF_ONESHOT, -1, > - &rk808_irq_chip, &rk808->irq_data); > + rk808->regmap_irq_chip, &rk808->irq_data); @@ -360,11 +364,11 @@ read directly from the silicon? > dev_err(&client->dev, "Failed to add irq_chip %d\n", ret); > return ret; > } -> -> - rk808->i2c = client; +> =20 +> - rk808->i2c =3D client; > - i2c_set_clientdata(client, rk808); -> + for (i = 0; i < rk808->nr_pre_init_regs; i++) { -> + ret = regmap_update_bits(rk808->regmap, +> + for (i =3D 0; i < rk808->nr_pre_init_regs; i++) { +> + ret =3D regmap_update_bits(rk808->regmap, > + rk808->pre_init_reg[i].addr, > + rk808->pre_init_reg[i].mask, > + rk808->pre_init_reg[i].value); @@ -375,11 +379,11 @@ read directly from the silicon? > + return ret; > + } > + } -> -> - ret = devm_mfd_add_devices(&client->dev, -1, +> =20 +> - ret =3D devm_mfd_add_devices(&client->dev, -1, > - rk808s, ARRAY_SIZE(rk808s), NULL, 0, > - regmap_irq_get_domain(rk808->irq_data)); -> + ret = devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, +> + ret =3D devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE, > + rk808->cells, rk808->nr_cells, NULL, 0, > + regmap_irq_get_domain(rk808->irq_data)); > if (ret) { @@ -388,14 +392,14 @@ read directly from the silicon? > @@ -245,14 +408,9 @@ static int rk808_remove(struct i2c_client *client) > return 0; > } -> -> -static const struct of_device_id rk808_of_match[] = { -> - { .compatible = "rockchip,rk808" }, +> =20 +> -static const struct of_device_id rk808_of_match[] =3D { +> - { .compatible =3D "rockchip,rk808" }, > - { }, > -}; > -MODULE_DEVICE_TABLE(of, rk808_of_match); > - -> static const struct i2c_device_id rk808_ids[] = { +> static const struct i2c_device_id rk808_ids[] =3D { > { "rk808" }, > + { "rk818" }, > { }, @@ -426,33 +430,34 @@ read directly from the silicon? > + * > + * Author: Wadim Egorov <w.egorov@phytec.de> > + * -> * This program is free software; you can redistribute it and/or modify it +> * This program is free software; you can redistribute it and/or modify = +it > * under the terms and conditions of the GNU General Public License, > * version 2, as published by the Free Software Foundation. > @@ -16,8 +20,8 @@ > * more details. > */ -> +> =20 > -#ifndef __LINUX_REGULATOR_rk808_H > -#define __LINUX_REGULATOR_rk808_H > +#ifndef __LINUX_REGULATOR_RK808_H > +#define __LINUX_REGULATOR_RK808_H -> +> =20 > #include <linux/regulator/machine.h> > #include <linux/regmap.h> > @@ -28,7 +32,7 @@ -> +> =20 > #define RK808_DCDC1 0 /* (0+RK808_START) */ > #define RK808_LDO1 4 /* (4+RK808_START) */ > -#define RK808_NUM_REGULATORS 14 > +#define RK808_NUM_REGULATORS 14 -> +> =20 > enum rk808_reg { > RK808_ID_DCDC1, > @@ -115,7 +119,92 @@ enum rk808_reg { > #define RK808_INT_STS_MSK_REG2 0x4f > #define RK808_IO_POL_REG 0x50 -> +> =20 > -/* IRQ Definitions */ > +/* RK818 */ > +#define RK818_DCDC1 0 @@ -546,7 +551,7 @@ read directly from the silicon? > @@ -137,6 +226,43 @@ enum rk808_reg { > #define RK808_IRQ_PLUG_IN_INT_MSK BIT(0) > #define RK808_IRQ_PLUG_OUT_INT_MSK BIT(1) -> +> =20 > +/* RK818 IRQ Definitions */ > +#define RK818_IRQ_VOUT_LO 0 > +#define RK818_IRQ_VB_LO 1 @@ -590,7 +595,7 @@ read directly from the silicon? > @@ -191,9 +317,27 @@ enum { > BOOST_ILMIN_250MA, > }; -> +> =20 > +enum { > + RK808_ID, > + RK818_ID, @@ -620,8 +625,20 @@ read directly from the silicon? > -#endif /* __LINUX_REGULATOR_rk808_H */ > +#endif /* __LINUX_REGULATOR_RK808_H */ --- +--=20 Lee Jones Linaro STMicroelectronics Landing Team Lead -Linaro.org │ Open source software for ARM SoCs +Linaro.org =E2=94=82 Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog + +--=20 +You received this message because you are subscribed to "rtc-linux". +Membership options at http://groups.google.com/group/rtc-linux . +Please read http://groups.google.com/group/rtc-linux/web/checklist +before submitting a driver. +---=20 +You received this message because you are subscribed to the Google Groups "= +rtc-linux" group. +To unsubscribe from this group and stop receiving emails from it, send an e= +mail to rtc-linux+unsubscribe@googlegroups.com. +For more options, visit https://groups.google.com/d/optout. diff --git a/a/content_digest b/N2/content_digest index e6e7775..34c5f17 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -1,6 +1,6 @@ "ref\01464850228-17244-1-git-send-email-w.egorov@phytec.de\0" "From\0Lee Jones <lee.jones@linaro.org>\0" - "Subject\0Re: [RESEND PATCH v5 1/5] mfd: RK808: Add RK818 support\0" + "Subject\0[rtc-linux] Re: [RESEND PATCH v5 1/5] mfd: RK808: Add RK818 support\0" "Date\0Wed, 8 Jun 2016 15:17:35 +0100\0" "To\0Wadim Egorov <w.egorov@phytec.de>\0" "Cc\0linux-kernel@vger.kernel.org" @@ -30,7 +30,7 @@ "\"Power Management IC (PMIC)\"\n" "\n" "> devices. It contains the following components:\n" - "> \n" + ">=20\n" "> - Regulators\n" "> - RTC\n" "> - Clkout\n" @@ -52,17 +52,18 @@ "> Signed-off-by: Wadim Egorov <w.egorov@phytec.de>\n" "> ---\n" "> drivers/mfd/Kconfig | 4 +-\n" - "> drivers/mfd/rk808.c | 231 ++++++++++++++++++++++++++++++++++++++--------\n" + "> drivers/mfd/rk808.c | 231 ++++++++++++++++++++++++++++++++++++++--=\n" + "------\n" "> include/linux/mfd/rk808.h | 162 ++++++++++++++++++++++++++++++--\n" "> 3 files changed, 350 insertions(+), 47 deletions(-)\n" - "> \n" + ">=20\n" "> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig\n" "> index 1bcf601..7ba464b 100644\n" "> --- a/drivers/mfd/Kconfig\n" "> +++ b/drivers/mfd/Kconfig\n" "> @@ -839,13 +839,13 @@ config MFD_RC5T583\n" "> \t different functionality of the device.\n" - "> \n" + "> =20\n" "> config MFD_RK808\n" "> -\ttristate \"Rockchip RK808 Power Management chip\"\n" "> +\ttristate \"Rockchip RK808/RK818 Power Management chip\"\n" @@ -97,7 +98,8 @@ "> + *\n" "> + * Author: Wadim Egorov <w.egorov@phytec.de>\n" "> + *\n" - "> * This program is free software; you can redistribute it and/or modify it\n" + "> * This program is free software; you can redistribute it and/or modify =\n" + "it\n" "> * under the terms and conditions of the GNU General Public License,\n" "> * version 2, as published by the Free Software Foundation.\n" "> @@ -22,12 +26,7 @@\n" @@ -114,54 +116,56 @@ "Why are you moving this to the header?\n" "\n" "> +#include <linux/of_device.h>\n" - "> \n" + "> =20\n" "> static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)\n" "> {\n" - "> @@ -57,6 +56,14 @@ static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)\n" + "> @@ -57,6 +56,14 @@ static bool rk808_is_volatile_reg(struct device *dev, =\n" + "unsigned int reg)\n" "> \treturn false;\n" "> }\n" - "> \n" - "> +static const struct regmap_config rk818_regmap_config = {\n" - "> +\t.reg_bits = 8,\n" - "> +\t.val_bits = 8,\n" - "> +\t.max_register = RK818_USB_CTRL_REG,\n" - "> +\t.cache_type = REGCACHE_RBTREE,\n" - "> +\t.volatile_reg = rk808_is_volatile_reg,\n" + "> =20\n" + "> +static const struct regmap_config rk818_regmap_config =3D {\n" + "> +\t.reg_bits =3D 8,\n" + "> +\t.val_bits =3D 8,\n" + "> +\t.max_register =3D RK818_USB_CTRL_REG,\n" + "> +\t.cache_type =3D REGCACHE_RBTREE,\n" + "> +\t.volatile_reg =3D rk808_is_volatile_reg,\n" "> +};\n" "> +\n" - "> static const struct regmap_config rk808_regmap_config = {\n" - "> \t.reg_bits = 8,\n" - "> \t.val_bits = 8,\n" - "> @@ -83,7 +90,17 @@ static const struct mfd_cell rk808s[] = {\n" + "> static const struct regmap_config rk808_regmap_config =3D {\n" + "> \t.reg_bits =3D 8,\n" + "> \t.val_bits =3D 8,\n" + "> @@ -83,7 +90,17 @@ static const struct mfd_cell rk808s[] =3D {\n" "> \t},\n" "> };\n" - "> \n" - "> -static const struct rk808_reg_data pre_init_reg[] = {\n" - "> +static const struct mfd_cell rk818s[] = {\n" - "> +\t{ .name = \"rk808-clkout\", },\n" + "> =20\n" + "> -static const struct rk808_reg_data pre_init_reg[] =3D {\n" + "> +static const struct mfd_cell rk818s[] =3D {\n" + "> +\t{ .name =3D \"rk808-clkout\", },\n" "\n" "How does this differ to a normal -clock driver?\n" "\n" - "> +\t{ .name = \"rk808-regulator\", },\n" + "> +\t{ .name =3D \"rk808-regulator\", },\n" "> +\t{\n" - "> +\t\t.name = \"rk808-rtc\",\n" - "> +\t\t.num_resources = ARRAY_SIZE(rtc_resources),\n" - "> +\t\t.resources = &rtc_resources[0],\n" + "> +\t\t.name =3D \"rk808-rtc\",\n" + "> +\t\t.num_resources =3D ARRAY_SIZE(rtc_resources),\n" + "> +\t\t.resources =3D &rtc_resources[0],\n" "\n" - ".resources = rtc_resources, ?\n" + ".resources =3D rtc_resources, ?\n" "\n" "> +\t},\n" "> +};\n" "> +\n" - "> +static const struct rk8xx_reg_data rk808_pre_init_reg[] = {\n" + "> +static const struct rk8xx_reg_data rk808_pre_init_reg[] =3D {\n" "> \t{ RK808_BUCK3_CONFIG_REG, BUCK_ILMIN_MASK, BUCK_ILMIN_150MA },\n" "> \t{ RK808_BUCK4_CONFIG_REG, BUCK_ILMIN_MASK, BUCK_ILMIN_200MA },\n" "> \t{ RK808_BOOST_CONFIG_REG, BOOST_ILMIN_MASK, BOOST_ILMIN_100MA },\n" - "> @@ -94,6 +111,22 @@ static const struct rk808_reg_data pre_init_reg[] = {\n" + "> @@ -94,6 +111,22 @@ static const struct rk808_reg_data pre_init_reg[] =3D=\n" + " {\n" "> \t\t\t\t\t\t VB_LO_SEL_3500MV },\n" "> };\n" - "> \n" - "> +static const struct rk8xx_reg_data rk818_pre_init_reg[] = {\n" + "> =20\n" + "> +static const struct rk8xx_reg_data rk818_pre_init_reg[] =3D {\n" "> +\t{ RK818_USB_CTRL_REG,\tRK818_USB_ILIM_SEL_MASK,\n" "> +\t\t\t\t\t\tRK818_USB_ILMIN_2000MA },\n" "> +\t/* close charger when usb lower then 3.4V */\n" @@ -179,100 +183,100 @@ "\n" "The alignment here looks odd.\n" "\n" - "> static const struct regmap_irq rk808_irqs[] = {\n" + "> static const struct regmap_irq rk808_irqs[] =3D {\n" "> \t/* INT_STS */\n" - "> \t[RK808_IRQ_VOUT_LO] = {\n" - "> @@ -136,6 +169,76 @@ static const struct regmap_irq rk808_irqs[] = {\n" + "> \t[RK808_IRQ_VOUT_LO] =3D {\n" + "> @@ -136,6 +169,76 @@ static const struct regmap_irq rk808_irqs[] =3D {\n" "> \t},\n" "> };\n" - "> \n" - "> +static const struct regmap_irq rk818_irqs[] = {\n" + "> =20\n" + "> +static const struct regmap_irq rk818_irqs[] =3D {\n" "> +\t/* INT_STS */\n" - "> +\t[RK818_IRQ_VOUT_LO] = {\n" - "> +\t\t.mask = RK818_IRQ_VOUT_LO_MSK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[RK818_IRQ_VOUT_LO] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_VOUT_LO_MSK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[RK818_IRQ_VB_LO] = {\n" - "> +\t\t.mask = RK818_IRQ_VB_LO_MSK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[RK818_IRQ_VB_LO] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_VB_LO_MSK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[RK818_IRQ_PWRON] = {\n" - "> +\t\t.mask = RK818_IRQ_PWRON_MSK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[RK818_IRQ_PWRON] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_PWRON_MSK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[RK818_IRQ_PWRON_LP] = {\n" - "> +\t\t.mask = RK818_IRQ_PWRON_LP_MSK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[RK818_IRQ_PWRON_LP] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_PWRON_LP_MSK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[RK818_IRQ_HOTDIE] = {\n" - "> +\t\t.mask = RK818_IRQ_HOTDIE_MSK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[RK818_IRQ_HOTDIE] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_HOTDIE_MSK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[RK818_IRQ_RTC_ALARM] = {\n" - "> +\t\t.mask = RK818_IRQ_RTC_ALARM_MSK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[RK818_IRQ_RTC_ALARM] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_RTC_ALARM_MSK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[RK818_IRQ_RTC_PERIOD] = {\n" - "> +\t\t.mask = RK818_IRQ_RTC_PERIOD_MSK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[RK818_IRQ_RTC_PERIOD] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_RTC_PERIOD_MSK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" - "> +\t[RK818_IRQ_USB_OV] = {\n" - "> +\t\t.mask = RK818_IRQ_USB_OV_MSK,\n" - "> +\t\t.reg_offset = 0,\n" + "> +\t[RK818_IRQ_USB_OV] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_USB_OV_MSK,\n" + "> +\t\t.reg_offset =3D 0,\n" "> +\t},\n" "> +\n" "> +\t/* INT_STS2 */\n" - "> +\t[RK818_IRQ_PLUG_IN] = {\n" - "> +\t\t.mask = RK818_IRQ_PLUG_IN_MSK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[RK818_IRQ_PLUG_IN] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_PLUG_IN_MSK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" - "> +\t[RK818_IRQ_PLUG_OUT] = {\n" - "> +\t\t.mask = RK818_IRQ_PLUG_OUT_MSK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[RK818_IRQ_PLUG_OUT] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_PLUG_OUT_MSK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" - "> +\t[RK818_IRQ_CHG_OK] = {\n" - "> +\t\t.mask = RK818_IRQ_CHG_OK_MSK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[RK818_IRQ_CHG_OK] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_CHG_OK_MSK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" - "> +\t[RK818_IRQ_CHG_TE] = {\n" - "> +\t\t.mask = RK818_IRQ_CHG_TE_MSK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[RK818_IRQ_CHG_TE] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_CHG_TE_MSK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" - "> +\t[RK818_IRQ_CHG_TS1] = {\n" - "> +\t\t.mask = RK818_IRQ_CHG_TS1_MSK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[RK818_IRQ_CHG_TS1] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_CHG_TS1_MSK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" - "> +\t[RK818_IRQ_TS2] = {\n" - "> +\t\t.mask = RK818_IRQ_TS2_MSK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[RK818_IRQ_TS2] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_TS2_MSK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" - "> +\t[RK818_IRQ_CHG_CVTLIM] = {\n" - "> +\t\t.mask = RK818_IRQ_CHG_CVTLIM_MSK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[RK818_IRQ_CHG_CVTLIM] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_CHG_CVTLIM_MSK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" - "> +\t[RK818_IRQ_DISCHG_ILIM] = {\n" - "> +\t\t.mask = RK818_IRQ_DISCHG_ILIM_MSK,\n" - "> +\t\t.reg_offset = 1,\n" + "> +\t[RK818_IRQ_DISCHG_ILIM] =3D {\n" + "> +\t\t.mask =3D RK818_IRQ_DISCHG_ILIM_MSK,\n" + "> +\t\t.reg_offset =3D 1,\n" "> +\t},\n" "> +};\n" "> +\n" - "> static struct regmap_irq_chip rk808_irq_chip = {\n" - "> \t.name = \"rk808\",\n" - "> \t.irqs = rk808_irqs,\n" - "> @@ -148,6 +251,18 @@ static struct regmap_irq_chip rk808_irq_chip = {\n" - "> \t.init_ack_masked = true,\n" + "> static struct regmap_irq_chip rk808_irq_chip =3D {\n" + "> \t.name =3D \"rk808\",\n" + "> \t.irqs =3D rk808_irqs,\n" + "> @@ -148,6 +251,18 @@ static struct regmap_irq_chip rk808_irq_chip =3D {\n" + "> \t.init_ack_masked =3D true,\n" "> };\n" - "> \n" - "> +static struct regmap_irq_chip rk818_irq_chip = {\n" - "> +\t.name = \"rk818\",\n" - "> +\t.irqs = rk818_irqs,\n" - "> +\t.num_irqs = ARRAY_SIZE(rk818_irqs),\n" - "> +\t.num_regs = 2,\n" - "> +\t.irq_reg_stride = 2,\n" - "> +\t.status_base = RK818_INT_STS_REG1,\n" - "> +\t.mask_base = RK818_INT_STS_MSK_REG1,\n" - "> +\t.ack_base = RK818_INT_STS_REG1,\n" - "> +\t.init_ack_masked = true,\n" + "> =20\n" + "> +static struct regmap_irq_chip rk818_irq_chip =3D {\n" + "> +\t.name =3D \"rk818\",\n" + "> +\t.irqs =3D rk818_irqs,\n" + "> +\t.num_irqs =3D ARRAY_SIZE(rk818_irqs),\n" + "> +\t.num_regs =3D 2,\n" + "> +\t.irq_reg_stride =3D 2,\n" + "> +\t.status_base =3D RK818_INT_STS_REG1,\n" + "> +\t.mask_base =3D RK818_INT_STS_MSK_REG1,\n" + "> +\t.ack_base =3D RK818_INT_STS_REG1,\n" + "> +\t.init_ack_masked =3D true,\n" "> +};\n" "> +\n" "> static struct i2c_client *rk808_i2c_client;\n" @@ -281,10 +285,10 @@ "> @@ -167,6 +282,48 @@ static void rk808_device_shutdown(void)\n" "> \t\tdev_err(&rk808_i2c_client->dev, \"power off error!\\n\");\n" "> }\n" - "> \n" - "> +static const struct of_device_id rk808_of_match[] = {\n" - "> +\t{ .compatible = \"rockchip,rk808\", .data = (void *) RK808_ID },\n" - "> +\t{ .compatible = \"rockchip,rk818\", .data = (void *) RK818_ID },\n" + "> =20\n" + "> +static const struct of_device_id rk808_of_match[] =3D {\n" + "> +\t{ .compatible =3D \"rockchip,rk808\", .data =3D (void *) RK808_ID },\n" + "> +\t{ .compatible =3D \"rockchip,rk818\", .data =3D (void *) RK818_ID },\n" "> +\t{ },\n" "> +};\n" "> +MODULE_DEVICE_TABLE(of, rk808_of_match);\n" @@ -298,29 +302,29 @@ "> +{\n" "> +\tconst struct of_device_id *of_id;\n" "> +\n" - "> +\tof_id = of_match_device(rk808_of_match, dev);\n" + "> +\tof_id =3D of_match_device(rk808_of_match, dev);\n" "> +\tif (!of_id) {\n" "> +\t\tdev_err(dev, \"Unable to match OF ID\\n\");\n" "> +\t\treturn -ENODEV;\n" "> +\t}\n" - "> +\trk808->variant = (long) of_id->data;\n" + "> +\trk808->variant =3D (long) of_id->data;\n" "> +\n" "> +\tswitch (rk808->variant) {\n" "> +\tcase RK808_ID:\n" - "> +\t\trk808->nr_cells = ARRAY_SIZE(rk808s);\n" - "> +\t\trk808->cells = rk808s;\n" - "> +\t\trk808->regmap_cfg = &rk808_regmap_config;\n" - "> +\t\trk808->regmap_irq_chip = &rk808_irq_chip;\n" - "> +\t\trk808->pre_init_reg = rk808_pre_init_reg;\n" - "> +\t\trk808->nr_pre_init_regs = ARRAY_SIZE(rk808_pre_init_reg);\n" + "> +\t\trk808->nr_cells =3D ARRAY_SIZE(rk808s);\n" + "> +\t\trk808->cells =3D rk808s;\n" + "> +\t\trk808->regmap_cfg =3D &rk808_regmap_config;\n" + "> +\t\trk808->regmap_irq_chip =3D &rk808_irq_chip;\n" + "> +\t\trk808->pre_init_reg =3D rk808_pre_init_reg;\n" + "> +\t\trk808->nr_pre_init_regs =3D ARRAY_SIZE(rk808_pre_init_reg);\n" "> +\t\tbreak;\n" "> +\tcase RK818_ID:\n" - "> +\t\trk808->nr_cells = ARRAY_SIZE(rk818s);\n" - "> +\t\trk808->cells = rk818s;\n" - "> +\t\trk808->regmap_cfg = &rk818_regmap_config;\n" - "> +\t\trk808->regmap_irq_chip = &rk818_irq_chip;\n" - "> +\t\trk808->pre_init_reg = rk818_pre_init_reg;\n" - "> +\t\trk808->nr_pre_init_regs = ARRAY_SIZE(rk818_pre_init_reg);\n" + "> +\t\trk808->nr_cells =3D ARRAY_SIZE(rk818s);\n" + "> +\t\trk808->cells =3D rk818s;\n" + "> +\t\trk808->regmap_cfg =3D &rk818_regmap_config;\n" + "> +\t\trk808->regmap_irq_chip =3D &rk818_irq_chip;\n" + "> +\t\trk808->pre_init_reg =3D rk818_pre_init_reg;\n" + "> +\t\trk808->nr_pre_init_regs =3D ARRAY_SIZE(rk818_pre_init_reg);\n" "> +\t\tbreak;\n" "> +\tdefault:\n" "> +\t\tdev_err(dev, \"unsupported RK8XX ID %lu\\n\", rk808->variant);\n" @@ -335,18 +339,18 @@ "> @@ -176,46 +333,52 @@ static int rk808_probe(struct i2c_client *client,\n" "> \tint ret;\n" "> \tint i;\n" - "> \n" + "> =20\n" "> -\tif (!client->irq) {\n" "> -\t\tdev_err(&client->dev, \"No interrupt support, no core IRQ\\n\");\n" "> -\t\treturn -EINVAL;\n" "> -\t}\n" "> -\n" - "> \trk808 = devm_kzalloc(&client->dev, sizeof(*rk808), GFP_KERNEL);\n" + "> \trk808 =3D devm_kzalloc(&client->dev, sizeof(*rk808), GFP_KERNEL);\n" "> \tif (!rk808)\n" "> \t\treturn -ENOMEM;\n" - "> \n" - "> -\trk808->regmap = devm_regmap_init_i2c(client, &rk808_regmap_config);\n" - "> +\tret = rk8xx_match_device(rk808, &client->dev);\n" + "> =20\n" + "> -\trk808->regmap =3D devm_regmap_init_i2c(client, &rk808_regmap_config);\n" + "> +\tret =3D rk8xx_match_device(rk808, &client->dev);\n" "\n" "Is there a way to dynamically probe the device? No device ID you can\n" "read directly from the silicon?\n" @@ -354,17 +358,17 @@ "> +\tif (ret)\n" "> +\t\treturn ret;\n" "> +\n" - "> +\trk808->i2c = client;\n" + "> +\trk808->i2c =3D client;\n" "> +\ti2c_set_clientdata(client, rk808);\n" "> +\n" - "> +\trk808->regmap = devm_regmap_init_i2c(client, rk808->regmap_cfg);\n" + "> +\trk808->regmap =3D devm_regmap_init_i2c(client, rk808->regmap_cfg);\n" "> \tif (IS_ERR(rk808->regmap)) {\n" "> \t\tdev_err(&client->dev, \"regmap initialization failed\\n\");\n" "> \t\treturn PTR_ERR(rk808->regmap);\n" "> \t}\n" - "> \n" - "> -\tfor (i = 0; i < ARRAY_SIZE(pre_init_reg); i++) {\n" - "> -\t\tret = regmap_update_bits(rk808->regmap, pre_init_reg[i].addr,\n" + "> =20\n" + "> -\tfor (i =3D 0; i < ARRAY_SIZE(pre_init_reg); i++) {\n" + "> -\t\tret =3D regmap_update_bits(rk808->regmap, pre_init_reg[i].addr,\n" "> -\t\t\t\t\t pre_init_reg[i].mask,\n" "> -\t\t\t\t\t pre_init_reg[i].value);\n" "> -\t\tif (ret) {\n" @@ -376,8 +380,8 @@ "> +\t\tdev_err(&client->dev, \"No interrupt support, no core IRQ\\n\");\n" "> +\t\treturn -EINVAL;\n" "> \t}\n" - "> \n" - "> \tret = regmap_add_irq_chip(rk808->regmap, client->irq,\n" + "> =20\n" + "> \tret =3D regmap_add_irq_chip(rk808->regmap, client->irq,\n" "> \t\t\t\t IRQF_ONESHOT, -1,\n" "> -\t\t\t\t &rk808_irq_chip, &rk808->irq_data);\n" "> +\t\t\t\t rk808->regmap_irq_chip, &rk808->irq_data);\n" @@ -385,11 +389,11 @@ "> \t\tdev_err(&client->dev, \"Failed to add irq_chip %d\\n\", ret);\n" "> \t\treturn ret;\n" "> \t}\n" - "> \n" - "> -\trk808->i2c = client;\n" + "> =20\n" + "> -\trk808->i2c =3D client;\n" "> -\ti2c_set_clientdata(client, rk808);\n" - "> +\tfor (i = 0; i < rk808->nr_pre_init_regs; i++) {\n" - "> +\t\tret = regmap_update_bits(rk808->regmap,\n" + "> +\tfor (i =3D 0; i < rk808->nr_pre_init_regs; i++) {\n" + "> +\t\tret =3D regmap_update_bits(rk808->regmap,\n" "> +\t\t\t\t\trk808->pre_init_reg[i].addr,\n" "> +\t\t\t\t\trk808->pre_init_reg[i].mask,\n" "> +\t\t\t\t\trk808->pre_init_reg[i].value);\n" @@ -400,11 +404,11 @@ "> +\t\t\treturn ret;\n" "> +\t\t}\n" "> +\t}\n" - "> \n" - "> -\tret = devm_mfd_add_devices(&client->dev, -1,\n" + "> =20\n" + "> -\tret =3D devm_mfd_add_devices(&client->dev, -1,\n" "> -\t\t\t\t rk808s, ARRAY_SIZE(rk808s), NULL, 0,\n" "> -\t\t\t\t regmap_irq_get_domain(rk808->irq_data));\n" - "> +\tret = devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE,\n" + "> +\tret =3D devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_NONE,\n" "> +\t\t\t rk808->cells, rk808->nr_cells, NULL, 0,\n" "> +\t\t\t regmap_irq_get_domain(rk808->irq_data));\n" "> \tif (ret) {\n" @@ -413,14 +417,14 @@ "> @@ -245,14 +408,9 @@ static int rk808_remove(struct i2c_client *client)\n" "> \treturn 0;\n" "> }\n" - "> \n" - "> -static const struct of_device_id rk808_of_match[] = {\n" - "> -\t{ .compatible = \"rockchip,rk808\" },\n" + "> =20\n" + "> -static const struct of_device_id rk808_of_match[] =3D {\n" + "> -\t{ .compatible =3D \"rockchip,rk808\" },\n" "> -\t{ },\n" "> -};\n" "> -MODULE_DEVICE_TABLE(of, rk808_of_match);\n" "> -\n" - "> static const struct i2c_device_id rk808_ids[] = {\n" + "> static const struct i2c_device_id rk808_ids[] =3D {\n" "> \t{ \"rk808\" },\n" "> +\t{ \"rk818\" },\n" "> \t{ },\n" @@ -451,33 +455,34 @@ "> + *\n" "> + * Author: Wadim Egorov <w.egorov@phytec.de>\n" "> + *\n" - "> * This program is free software; you can redistribute it and/or modify it\n" + "> * This program is free software; you can redistribute it and/or modify =\n" + "it\n" "> * under the terms and conditions of the GNU General Public License,\n" "> * version 2, as published by the Free Software Foundation.\n" "> @@ -16,8 +20,8 @@\n" "> * more details.\n" "> */\n" - "> \n" + "> =20\n" "> -#ifndef __LINUX_REGULATOR_rk808_H\n" "> -#define __LINUX_REGULATOR_rk808_H\n" "> +#ifndef __LINUX_REGULATOR_RK808_H\n" "> +#define __LINUX_REGULATOR_RK808_H\n" - "> \n" + "> =20\n" "> #include <linux/regulator/machine.h>\n" "> #include <linux/regmap.h>\n" "> @@ -28,7 +32,7 @@\n" - "> \n" + "> =20\n" "> #define RK808_DCDC1\t0 /* (0+RK808_START) */\n" "> #define RK808_LDO1\t4 /* (4+RK808_START) */\n" "> -#define RK808_NUM_REGULATORS 14\n" "> +#define RK808_NUM_REGULATORS\t14\n" - "> \n" + "> =20\n" "> enum rk808_reg {\n" "> \tRK808_ID_DCDC1,\n" "> @@ -115,7 +119,92 @@ enum rk808_reg {\n" "> #define RK808_INT_STS_MSK_REG2\t0x4f\n" "> #define RK808_IO_POL_REG\t0x50\n" - "> \n" + "> =20\n" "> -/* IRQ Definitions */\n" "> +/* RK818 */\n" "> +#define RK818_DCDC1\t\t\t0\n" @@ -571,7 +576,7 @@ "> @@ -137,6 +226,43 @@ enum rk808_reg {\n" "> #define RK808_IRQ_PLUG_IN_INT_MSK\tBIT(0)\n" "> #define RK808_IRQ_PLUG_OUT_INT_MSK\tBIT(1)\n" - "> \n" + "> =20\n" "> +/* RK818 IRQ Definitions */\n" "> +#define RK818_IRQ_VOUT_LO\t0\n" "> +#define RK818_IRQ_VB_LO\t\t1\n" @@ -615,7 +620,7 @@ "> @@ -191,9 +317,27 @@ enum {\n" "> \tBOOST_ILMIN_250MA,\n" "> };\n" - "> \n" + "> =20\n" "> +enum {\n" "> +\tRK808_ID,\n" "> +\tRK818_ID,\n" @@ -645,10 +650,22 @@ "> -#endif /* __LINUX_REGULATOR_rk808_H */\n" "> +#endif /* __LINUX_REGULATOR_RK808_H */\n" "\n" - "-- \n" + "--=20\n" "Lee Jones\n" "Linaro STMicroelectronics Landing Team Lead\n" - "Linaro.org \342\224\202 Open source software for ARM SoCs\n" - Follow Linaro: Facebook | Twitter | Blog + "Linaro.org =E2=94=82 Open source software for ARM SoCs\n" + "Follow Linaro: Facebook | Twitter | Blog\n" + "\n" + "--=20\n" + "You received this message because you are subscribed to \"rtc-linux\".\n" + "Membership options at http://groups.google.com/group/rtc-linux .\n" + "Please read http://groups.google.com/group/rtc-linux/web/checklist\n" + "before submitting a driver.\n" + "---=20\n" + "You received this message because you are subscribed to the Google Groups \"=\n" + "rtc-linux\" group.\n" + "To unsubscribe from this group and stop receiving emails from it, send an e=\n" + "mail to rtc-linux+unsubscribe@googlegroups.com.\n" + For more options, visit https://groups.google.com/d/optout. -680e5463964f863b7f900f53b28504ae99f68b7246e311f6895e4b012355b665 +bdffcad0b342850af865f3d1158c5d324c98710470aa179f29348a703ce3d994
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.