diff for duplicates of <577C77DF.9060706@rock-chips.com> diff --git a/a/1.txt b/N1/1.txt index 16ab669..7f0d3ad 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -25,7 +25,7 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: >>> So we can reuse the RTC and Clkout functionality. >> 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 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: >>> * >>> * 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, @@ -409,10 +409,10 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> 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 @@ -425,12 +425,12 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> * >>> * 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, @@ -628,8 +628,14 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 > > _______________________________________________ > Linux-rockchip mailing list -> Linux-rockchip@lists.infradead.org +> Linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org > http://lists.infradead.org/mailman/listinfo/linux-rockchip > > > + + +-- +To unsubscribe from this list: send the line "unsubscribe devicetree" in +the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org +More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/a/content_digest b/N1/content_digest index 0627020..6ab6b29 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,29 +1,30 @@ "ref\01464850228-17244-1-git-send-email-w.egorov@phytec.de\0" "ref\020160608141735.GE14888@dell\0" "ref\05759277D.7090101@phytec.de\0" - "From\0Andy Yan <andy.yan@rock-chips.com>\0" + "ref\05759277D.7090101-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org\0" + "From\0Andy Yan <andy.yan-TNX95d0MmH7DzftRWevZcw@public.gmane.org>\0" "Subject\0Re: [RESEND PATCH v5 1/5] mfd: RK808: Add RK818 support\0" "Date\0Wed, 6 Jul 2016 11:15:43 +0800\0" - "To\0Wadim Egorov <w.egorov@phytec.de>" - " Lee Jones <lee.jones@linaro.org>\0" - "Cc\0mark.rutland@arm.com" - devicetree@vger.kernel.org - a.zummo@towertech.it - pawel.moll@arm.com - rtc-linux@googlegroups.com - ijc+devicetree@hellion.org.uk - mturquette@baylibre.com - sboyd@codeaurora.org - linux-kernel@vger.kernel.org - lgirdwood@gmail.com - linux-rockchip@lists.infradead.org - robh+dt@kernel.org - alexandre.belloni@free-electrons.com - broonie@kernel.org - dianders@chromium.org - galak@codeaurora.org - zyw@rock-chips.com - " linux-clk@vger.kernel.org\0" + "To\0Wadim Egorov <w.egorov-guT5V/WYfQezQB+pC5nmwQ@public.gmane.org>" + " Lee Jones <lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>\0" + "Cc\0mark.rutland-5wv7dgnIgG8@public.gmane.org" + devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org + a.zummo-BfzFCNDTiLLj+vYz1yj4TQ@public.gmane.org + pawel.moll-5wv7dgnIgG8@public.gmane.org + rtc-linux-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org + ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org + mturquette-rdvid1DuHRBWk0Htik3J/w@public.gmane.org + sboyd-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org + linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org + lgirdwood-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org + linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org + robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org + alexandre.belloni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org + broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org + dianders-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org + galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org + zyw-TNX95d0MmH7DzftRWevZcw@public.gmane.org + " linux-clk-u79uwXL29TY76Z2rM5mHXA@public.gmane.org\0" "\00:1\0" "b\0" "Hi Wadim:\n" @@ -53,7 +54,7 @@ ">>> So we can reuse the RTC and Clkout functionality.\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" @@ -93,12 +94,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" @@ -437,10 +438,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" @@ -453,12 +454,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" @@ -656,10 +657,16 @@ ">\n" "> _______________________________________________\n" "> Linux-rockchip mailing list\n" - "> Linux-rockchip@lists.infradead.org\n" + "> Linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org\n" "> http://lists.infradead.org/mailman/listinfo/linux-rockchip\n" ">\n" ">\n" - > + ">\n" + "\n" + "\n" + "--\n" + "To unsubscribe from this list: send the line \"unsubscribe devicetree\" in\n" + "the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org\n" + More majordomo info at http://vger.kernel.org/majordomo-info.html -88aafefe5f14b0557f06d4c61aa788057a080e0ec4eff452fe8cc41ee3d5bb5a +ec27b9ae42220995c15df9c7fb7c108c588893b6fb674e35622e38fb64314d5d
diff --git a/a/1.txt b/N2/1.txt index 16ab669..ca390fd 100644 --- a/a/1.txt +++ b/N2/1.txt @@ -1,6 +1,6 @@ Hi Wadim: -On 2016年06月09日 16:23, Wadim Egorov wrote: +On 2016=E5=B9=B406=E6=9C=8809=E6=97=A5 16:23, Wadim Egorov wrote: > Hi, > > On 08.06.2016 16:17, Lee Jones wrote: @@ -28,7 +28,8 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: >>> 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(-) >>> @@ -38,7 +39,7 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: >>> +++ 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 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: >>> + * >>> + * 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 modi= +fy 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,53 +91,56 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: > It is now part of the rk808 struct. > >>> +#include <linux/of_device.h> ->>> ->>> static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg) +>>> =20 +>>> static bool rk808_is_volatile_reg(struct device *dev, unsigned int re= +g) >>> { ->>> @@ -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? > I don't know. It is a normal clock driver. > ->>> + { .name = "rk808-regulator", }, +>>> + { .name =3D "rk808-regulator", }, >>> + { ->>> + .name = "rk808-rtc", ->>> + .num_resources = ARRAY_SIZE(rtc_resources), ->>> + .resources = &rtc_resources[0], ->> .resources = rtc_resources, ? +>>> + .name =3D "rk808-rtc", +>>> + .num_resources =3D ARRAY_SIZE(rtc_resources), +>>> + .resources =3D &rtc_resources[0], +>> .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 */ @@ -153,100 +158,100 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: >> The alignment here looks odd. > I will fix it in the next version. > ->>> 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; @@ -255,10 +260,10 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: >>> @@ -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); @@ -272,29 +277,29 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: >>> +{ >>> + 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); @@ -309,18 +314,18 @@ On 2016年06月09日 16:23, Wadim Egorov wrote: >>> @@ -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? > AFAIK there is no device ID register. At least it is not documented in @@ -335,17 +340,17 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> + 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) { @@ -357,8 +362,8 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> + 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); @@ -366,11 +371,11 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> 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); @@ -381,11 +386,11 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> + 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) { @@ -394,14 +399,14 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> @@ -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" }, >>> { }, @@ -432,33 +437,34 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> + * >>> + * 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 modi= +fy 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 @@ -552,7 +558,7 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> @@ -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 @@ -596,7 +602,7 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 >>> @@ -191,9 +317,27 @@ enum { >>> BOOST_ILMIN_250MA, >>> }; ->>> +>>> =20 >>> +enum { >>> + RK808_ID, >>> + RK818_ID, @@ -633,3 +639,16 @@ for RK818, register 0x17 is 0x81, 0x18 is 0x81 > > > + + +--=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 0627020..a94a144 100644 --- a/a/content_digest +++ b/N2/content_digest @@ -2,7 +2,7 @@ "ref\020160608141735.GE14888@dell\0" "ref\05759277D.7090101@phytec.de\0" "From\0Andy Yan <andy.yan@rock-chips.com>\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, 6 Jul 2016 11:15:43 +0800\0" "To\0Wadim Egorov <w.egorov@phytec.de>" " Lee Jones <lee.jones@linaro.org>\0" @@ -28,7 +28,7 @@ "b\0" "Hi Wadim:\n" "\n" - "On 2016\345\271\26406\346\234\21009\346\227\245 16:23, Wadim Egorov wrote:\n" + "On 2016=E5=B9=B406=E6=9C=8809=E6=97=A5 16:23, Wadim Egorov wrote:\n" "> Hi,\n" ">\n" "> On 08.06.2016 16:17, Lee Jones wrote:\n" @@ -56,7 +56,8 @@ ">>> 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" @@ -66,7 +67,7 @@ ">>> +++ 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" @@ -100,7 +101,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 modi=\n" + "fy 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" @@ -117,53 +119,56 @@ "> It is now part of the rk808 struct.\n" ">\n" ">>> +#include <linux/of_device.h>\n" - ">>> \n" - ">>> static bool rk808_is_volatile_reg(struct device *dev, unsigned int reg)\n" + ">>> =20\n" + ">>> static bool rk808_is_volatile_reg(struct device *dev, unsigned int re=\n" + "g)\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" ">> How does this differ to a normal -clock driver?\n" "> I don't know. It is 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" - ">> .resources = rtc_resources, ?\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" + ">> .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[] =\n" + "=3D {\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" @@ -181,100 +186,100 @@ ">> The alignment here looks odd.\n" "> I will fix it in the next version.\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" @@ -283,10 +288,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" @@ -300,29 +305,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" @@ -337,18 +342,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" ">> Is there a way to dynamically probe the device? No device ID you can\n" ">> read directly from the silicon?\n" "> AFAIK there is no device ID register. At least it is not documented in\n" @@ -363,17 +368,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" @@ -385,8 +390,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" @@ -394,11 +399,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" @@ -409,11 +414,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" @@ -422,14 +427,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" @@ -460,33 +465,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 modi=\n" + "fy 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" @@ -580,7 +586,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" @@ -624,7 +630,7 @@ ">>> @@ -191,9 +317,27 @@ enum {\n" ">>> \tBOOST_ILMIN_250MA,\n" ">>> };\n" - ">>> \n" + ">>> =20\n" ">>> +enum {\n" ">>> +\tRK808_ID,\n" ">>> +\tRK818_ID,\n" @@ -660,6 +666,19 @@ "> http://lists.infradead.org/mailman/listinfo/linux-rockchip\n" ">\n" ">\n" - > + ">\n" + "\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. -88aafefe5f14b0557f06d4c61aa788057a080e0ec4eff452fe8cc41ee3d5bb5a +12736d4730660632425b25401fbb917ae7c7a533554c8d366e5bd214922af568
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.