Message ID | 1395047958-17953-2-git-send-email-k.kozlowski@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Quoting Krzysztof Kozlowski (2014-03-17 02:19:16) > This patch adds support for S2MPS14 PMIC clocks (BT and AP) to the > s2mps11 clock driver. > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > Reviewed-by: Yadwinder Singh Brar <yadi.brar@samsung.com> > Reviewed-by: Tomasz Figa <t.figa@samsung.com> This does not apply cleanly to to clk tree trip, nor does it compile after manually merging due to changes introducing linux/mfd/samsung/s2mps14.h. The changes look OK to me so maybe Lee can take it with my Ack? Acked-by: Mike Turquette <mturquette@linaro.org> Regards, Mike > --- > drivers/clk/Kconfig | 8 +++--- > drivers/clk/clk-s2mps11.c | 61 ++++++++++++++++++++++++++++++++++----------- > 2 files changed, 50 insertions(+), 19 deletions(-) > > diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig > index 6f56d3a4f010..8f9ce8ba036d 100644 > --- a/drivers/clk/Kconfig > +++ b/drivers/clk/Kconfig > @@ -65,12 +65,12 @@ config COMMON_CLK_SI570 > clock generators. > > config COMMON_CLK_S2MPS11 > - tristate "Clock driver for S2MPS11/S5M8767 MFD" > + tristate "Clock driver for S2MPS1X/S5M8767 MFD" > depends on MFD_SEC_CORE > ---help--- > - This driver supports S2MPS11/S5M8767 crystal oscillator clock. These > - multi-function devices have 3 fixed-rate oscillators, clocked at > - 32KHz each. > + This driver supports S2MPS11/S2MPS14/S5M8767 crystal oscillator > + clock. These multi-function devices have two (S2MPS14) or three > + (S2MPS11, S5M8767) fixed-rate oscillators, clocked at 32KHz each. > > config CLK_TWL6040 > tristate "External McPDM functional clock from twl6040" > diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c > index 508875535e1e..8dafb552274f 100644 > --- a/drivers/clk/clk-s2mps11.c > +++ b/drivers/clk/clk-s2mps11.c > @@ -1,7 +1,7 @@ > /* > * clk-s2mps11.c - Clock driver for S2MPS11. > * > - * Copyright (C) 2013 Samsung Electornics > + * Copyright (C) 2013,2014 Samsung Electornics > * > * This program is free software; you can redistribute it and/or modify it > * under the terms of the GNU General Public License as published by the > @@ -13,10 +13,6 @@ > * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > * GNU General Public License for more details. > * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > - * > */ > > #include <linux/module.h> > @@ -27,6 +23,7 @@ > #include <linux/clk-provider.h> > #include <linux/platform_device.h> > #include <linux/mfd/samsung/s2mps11.h> > +#include <linux/mfd/samsung/s2mps14.h> > #include <linux/mfd/samsung/s5m8767.h> > #include <linux/mfd/samsung/core.h> > > @@ -125,7 +122,21 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = { > }, > }; > > -static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev) > +static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = { > + [S2MPS11_CLK_AP] = { > + .name = "s2mps14_ap", > + .ops = &s2mps11_clk_ops, > + .flags = CLK_IS_ROOT, > + }, > + [S2MPS11_CLK_BT] = { > + .name = "s2mps14_bt", > + .ops = &s2mps11_clk_ops, > + .flags = CLK_IS_ROOT, > + }, > +}; > + > +static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev, > + struct clk_init_data *clks_init) > { > struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent); > struct device_node *clk_np; > @@ -145,9 +156,12 @@ static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev) > if (!clk_table) > return ERR_PTR(-ENOMEM); > > - for (i = 0; i < S2MPS11_CLKS_NUM; i++) > + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { > + if (!clks_init[i].name) > + continue; /* Skip clocks not present in some devices */ > of_property_read_string_index(clk_np, "clock-output-names", i, > - &s2mps11_clks_init[i].name); > + &clks_init[i].name); > + } > > return clk_np; > } > @@ -158,6 +172,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev) > struct s2mps11_clk *s2mps11_clks, *s2mps11_clk; > struct device_node *clk_np = NULL; > unsigned int s2mps11_reg; > + struct clk_init_data *clks_init; > int i, ret = 0; > u32 val; > > @@ -168,25 +183,33 @@ static int s2mps11_clk_probe(struct platform_device *pdev) > > s2mps11_clk = s2mps11_clks; > > - clk_np = s2mps11_clk_parse_dt(pdev); > - if (IS_ERR(clk_np)) > - return PTR_ERR(clk_np); > - > switch (platform_get_device_id(pdev)->driver_data) { > case S2MPS11X: > s2mps11_reg = S2MPS11_REG_RTC_CTRL; > + clks_init = s2mps11_clks_init; > + break; > + case S2MPS14X: > + s2mps11_reg = S2MPS14_REG_RTCCTRL; > + clks_init = s2mps14_clks_init; > break; > case S5M8767X: > s2mps11_reg = S5M8767_REG_CTRL1; > + clks_init = s2mps11_clks_init; > break; > default: > dev_err(&pdev->dev, "Invalid device type\n"); > return -EINVAL; > }; > > + clk_np = s2mps11_clk_parse_dt(pdev, clks_init); > + if (IS_ERR(clk_np)) > + return PTR_ERR(clk_np); > + > for (i = 0; i < S2MPS11_CLKS_NUM; i++, s2mps11_clk++) { > + if (!clks_init[i].name) > + continue; /* Skip clocks not present in some devices */ > s2mps11_clk->iodev = iodev; > - s2mps11_clk->hw.init = &s2mps11_clks_init[i]; > + s2mps11_clk->hw.init = &clks_init[i]; > s2mps11_clk->mask = 1 << i; > s2mps11_clk->reg = s2mps11_reg; > > @@ -220,8 +243,12 @@ static int s2mps11_clk_probe(struct platform_device *pdev) > } > > if (clk_table) { > - for (i = 0; i < S2MPS11_CLKS_NUM; i++) > + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { > + /* Skip clocks not present on S2MPS14 */ > + if (!clks_init[i].name) > + continue; > clk_table[i] = s2mps11_clks[i].clk; > + } > > clk_data.clks = clk_table; > clk_data.clk_num = S2MPS11_CLKS_NUM; > @@ -250,14 +277,18 @@ static int s2mps11_clk_remove(struct platform_device *pdev) > struct s2mps11_clk *s2mps11_clks = platform_get_drvdata(pdev); > int i; > > - for (i = 0; i < S2MPS11_CLKS_NUM; i++) > + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { > + if (!s2mps11_clks[i].lookup) > + continue; /* Skip clocks not present in some devices */ > clkdev_drop(s2mps11_clks[i].lookup); > + } > > return 0; > } > > static const struct platform_device_id s2mps11_clk_id[] = { > { "s2mps11-clk", S2MPS11X}, > + { "s2mps14-clk", S2MPS14X}, > { "s5m8767-clk", S5M8767X}, > { }, > }; > -- > 1.7.9.5 >
Quoting Krzysztof Kozlowski (2014-03-17 02:19:16) > This patch adds support for S2MPS14 PMIC clocks (BT and AP) to the > s2mps11 clock driver. > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > Reviewed-by: Yadwinder Singh Brar <yadi.brar@samsung.com> > Reviewed-by: Tomasz Figa <t.figa@samsung.com> Taken into clk-next. Regards, Mike > --- > drivers/clk/Kconfig | 8 +++--- > drivers/clk/clk-s2mps11.c | 61 ++++++++++++++++++++++++++++++++++----------- > 2 files changed, 50 insertions(+), 19 deletions(-) > > diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig > index 6f56d3a4f010..8f9ce8ba036d 100644 > --- a/drivers/clk/Kconfig > +++ b/drivers/clk/Kconfig > @@ -65,12 +65,12 @@ config COMMON_CLK_SI570 > clock generators. > > config COMMON_CLK_S2MPS11 > - tristate "Clock driver for S2MPS11/S5M8767 MFD" > + tristate "Clock driver for S2MPS1X/S5M8767 MFD" > depends on MFD_SEC_CORE > ---help--- > - This driver supports S2MPS11/S5M8767 crystal oscillator clock. These > - multi-function devices have 3 fixed-rate oscillators, clocked at > - 32KHz each. > + This driver supports S2MPS11/S2MPS14/S5M8767 crystal oscillator > + clock. These multi-function devices have two (S2MPS14) or three > + (S2MPS11, S5M8767) fixed-rate oscillators, clocked at 32KHz each. > > config CLK_TWL6040 > tristate "External McPDM functional clock from twl6040" > diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c > index 508875535e1e..8dafb552274f 100644 > --- a/drivers/clk/clk-s2mps11.c > +++ b/drivers/clk/clk-s2mps11.c > @@ -1,7 +1,7 @@ > /* > * clk-s2mps11.c - Clock driver for S2MPS11. > * > - * Copyright (C) 2013 Samsung Electornics > + * Copyright (C) 2013,2014 Samsung Electornics > * > * This program is free software; you can redistribute it and/or modify it > * under the terms of the GNU General Public License as published by the > @@ -13,10 +13,6 @@ > * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > * GNU General Public License for more details. > * > - * You should have received a copy of the GNU General Public License > - * along with this program; if not, write to the Free Software > - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > - * > */ > > #include <linux/module.h> > @@ -27,6 +23,7 @@ > #include <linux/clk-provider.h> > #include <linux/platform_device.h> > #include <linux/mfd/samsung/s2mps11.h> > +#include <linux/mfd/samsung/s2mps14.h> > #include <linux/mfd/samsung/s5m8767.h> > #include <linux/mfd/samsung/core.h> > > @@ -125,7 +122,21 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = { > }, > }; > > -static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev) > +static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = { > + [S2MPS11_CLK_AP] = { > + .name = "s2mps14_ap", > + .ops = &s2mps11_clk_ops, > + .flags = CLK_IS_ROOT, > + }, > + [S2MPS11_CLK_BT] = { > + .name = "s2mps14_bt", > + .ops = &s2mps11_clk_ops, > + .flags = CLK_IS_ROOT, > + }, > +}; > + > +static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev, > + struct clk_init_data *clks_init) > { > struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent); > struct device_node *clk_np; > @@ -145,9 +156,12 @@ static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev) > if (!clk_table) > return ERR_PTR(-ENOMEM); > > - for (i = 0; i < S2MPS11_CLKS_NUM; i++) > + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { > + if (!clks_init[i].name) > + continue; /* Skip clocks not present in some devices */ > of_property_read_string_index(clk_np, "clock-output-names", i, > - &s2mps11_clks_init[i].name); > + &clks_init[i].name); > + } > > return clk_np; > } > @@ -158,6 +172,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev) > struct s2mps11_clk *s2mps11_clks, *s2mps11_clk; > struct device_node *clk_np = NULL; > unsigned int s2mps11_reg; > + struct clk_init_data *clks_init; > int i, ret = 0; > u32 val; > > @@ -168,25 +183,33 @@ static int s2mps11_clk_probe(struct platform_device *pdev) > > s2mps11_clk = s2mps11_clks; > > - clk_np = s2mps11_clk_parse_dt(pdev); > - if (IS_ERR(clk_np)) > - return PTR_ERR(clk_np); > - > switch (platform_get_device_id(pdev)->driver_data) { > case S2MPS11X: > s2mps11_reg = S2MPS11_REG_RTC_CTRL; > + clks_init = s2mps11_clks_init; > + break; > + case S2MPS14X: > + s2mps11_reg = S2MPS14_REG_RTCCTRL; > + clks_init = s2mps14_clks_init; > break; > case S5M8767X: > s2mps11_reg = S5M8767_REG_CTRL1; > + clks_init = s2mps11_clks_init; > break; > default: > dev_err(&pdev->dev, "Invalid device type\n"); > return -EINVAL; > }; > > + clk_np = s2mps11_clk_parse_dt(pdev, clks_init); > + if (IS_ERR(clk_np)) > + return PTR_ERR(clk_np); > + > for (i = 0; i < S2MPS11_CLKS_NUM; i++, s2mps11_clk++) { > + if (!clks_init[i].name) > + continue; /* Skip clocks not present in some devices */ > s2mps11_clk->iodev = iodev; > - s2mps11_clk->hw.init = &s2mps11_clks_init[i]; > + s2mps11_clk->hw.init = &clks_init[i]; > s2mps11_clk->mask = 1 << i; > s2mps11_clk->reg = s2mps11_reg; > > @@ -220,8 +243,12 @@ static int s2mps11_clk_probe(struct platform_device *pdev) > } > > if (clk_table) { > - for (i = 0; i < S2MPS11_CLKS_NUM; i++) > + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { > + /* Skip clocks not present on S2MPS14 */ > + if (!clks_init[i].name) > + continue; > clk_table[i] = s2mps11_clks[i].clk; > + } > > clk_data.clks = clk_table; > clk_data.clk_num = S2MPS11_CLKS_NUM; > @@ -250,14 +277,18 @@ static int s2mps11_clk_remove(struct platform_device *pdev) > struct s2mps11_clk *s2mps11_clks = platform_get_drvdata(pdev); > int i; > > - for (i = 0; i < S2MPS11_CLKS_NUM; i++) > + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { > + if (!s2mps11_clks[i].lookup) > + continue; /* Skip clocks not present in some devices */ > clkdev_drop(s2mps11_clks[i].lookup); > + } > > return 0; > } > > static const struct platform_device_id s2mps11_clk_id[] = { > { "s2mps11-clk", S2MPS11X}, > + { "s2mps14-clk", S2MPS14X}, > { "s5m8767-clk", S5M8767X}, > { }, > }; > -- > 1.7.9.5 >
On Tue, Mar 18, 2014 at 6:09 PM, Mike Turquette <mturquette@linaro.org> wrote: > Quoting Krzysztof Kozlowski (2014-03-17 02:19:16) >> This patch adds support for S2MPS14 PMIC clocks (BT and AP) to the >> s2mps11 clock driver. >> >> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> >> Reviewed-by: Yadwinder Singh Brar <yadi.brar@samsung.com> >> Reviewed-by: Tomasz Figa <t.figa@samsung.com> > > Taken into clk-next. Oops. Please disregard. My auto patch application script sent his by accident. I have not applied this patches, as indicated in my previous mail were I gave out an Ack. Regards, Mike > > Regards, > Mike > >> --- >> drivers/clk/Kconfig | 8 +++--- >> drivers/clk/clk-s2mps11.c | 61 ++++++++++++++++++++++++++++++++++----------- >> 2 files changed, 50 insertions(+), 19 deletions(-) >> >> diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig >> index 6f56d3a4f010..8f9ce8ba036d 100644 >> --- a/drivers/clk/Kconfig >> +++ b/drivers/clk/Kconfig >> @@ -65,12 +65,12 @@ config COMMON_CLK_SI570 >> clock generators. >> >> config COMMON_CLK_S2MPS11 >> - tristate "Clock driver for S2MPS11/S5M8767 MFD" >> + tristate "Clock driver for S2MPS1X/S5M8767 MFD" >> depends on MFD_SEC_CORE >> ---help--- >> - This driver supports S2MPS11/S5M8767 crystal oscillator clock. These >> - multi-function devices have 3 fixed-rate oscillators, clocked at >> - 32KHz each. >> + This driver supports S2MPS11/S2MPS14/S5M8767 crystal oscillator >> + clock. These multi-function devices have two (S2MPS14) or three >> + (S2MPS11, S5M8767) fixed-rate oscillators, clocked at 32KHz each. >> >> config CLK_TWL6040 >> tristate "External McPDM functional clock from twl6040" >> diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c >> index 508875535e1e..8dafb552274f 100644 >> --- a/drivers/clk/clk-s2mps11.c >> +++ b/drivers/clk/clk-s2mps11.c >> @@ -1,7 +1,7 @@ >> /* >> * clk-s2mps11.c - Clock driver for S2MPS11. >> * >> - * Copyright (C) 2013 Samsung Electornics >> + * Copyright (C) 2013,2014 Samsung Electornics >> * >> * This program is free software; you can redistribute it and/or modify it >> * under the terms of the GNU General Public License as published by the >> @@ -13,10 +13,6 @@ >> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> * GNU General Public License for more details. >> * >> - * You should have received a copy of the GNU General Public License >> - * along with this program; if not, write to the Free Software >> - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA >> - * >> */ >> >> #include <linux/module.h> >> @@ -27,6 +23,7 @@ >> #include <linux/clk-provider.h> >> #include <linux/platform_device.h> >> #include <linux/mfd/samsung/s2mps11.h> >> +#include <linux/mfd/samsung/s2mps14.h> >> #include <linux/mfd/samsung/s5m8767.h> >> #include <linux/mfd/samsung/core.h> >> >> @@ -125,7 +122,21 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = { >> }, >> }; >> >> -static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev) >> +static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = { >> + [S2MPS11_CLK_AP] = { >> + .name = "s2mps14_ap", >> + .ops = &s2mps11_clk_ops, >> + .flags = CLK_IS_ROOT, >> + }, >> + [S2MPS11_CLK_BT] = { >> + .name = "s2mps14_bt", >> + .ops = &s2mps11_clk_ops, >> + .flags = CLK_IS_ROOT, >> + }, >> +}; >> + >> +static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev, >> + struct clk_init_data *clks_init) >> { >> struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent); >> struct device_node *clk_np; >> @@ -145,9 +156,12 @@ static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev) >> if (!clk_table) >> return ERR_PTR(-ENOMEM); >> >> - for (i = 0; i < S2MPS11_CLKS_NUM; i++) >> + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { >> + if (!clks_init[i].name) >> + continue; /* Skip clocks not present in some devices */ >> of_property_read_string_index(clk_np, "clock-output-names", i, >> - &s2mps11_clks_init[i].name); >> + &clks_init[i].name); >> + } >> >> return clk_np; >> } >> @@ -158,6 +172,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev) >> struct s2mps11_clk *s2mps11_clks, *s2mps11_clk; >> struct device_node *clk_np = NULL; >> unsigned int s2mps11_reg; >> + struct clk_init_data *clks_init; >> int i, ret = 0; >> u32 val; >> >> @@ -168,25 +183,33 @@ static int s2mps11_clk_probe(struct platform_device *pdev) >> >> s2mps11_clk = s2mps11_clks; >> >> - clk_np = s2mps11_clk_parse_dt(pdev); >> - if (IS_ERR(clk_np)) >> - return PTR_ERR(clk_np); >> - >> switch (platform_get_device_id(pdev)->driver_data) { >> case S2MPS11X: >> s2mps11_reg = S2MPS11_REG_RTC_CTRL; >> + clks_init = s2mps11_clks_init; >> + break; >> + case S2MPS14X: >> + s2mps11_reg = S2MPS14_REG_RTCCTRL; >> + clks_init = s2mps14_clks_init; >> break; >> case S5M8767X: >> s2mps11_reg = S5M8767_REG_CTRL1; >> + clks_init = s2mps11_clks_init; >> break; >> default: >> dev_err(&pdev->dev, "Invalid device type\n"); >> return -EINVAL; >> }; >> >> + clk_np = s2mps11_clk_parse_dt(pdev, clks_init); >> + if (IS_ERR(clk_np)) >> + return PTR_ERR(clk_np); >> + >> for (i = 0; i < S2MPS11_CLKS_NUM; i++, s2mps11_clk++) { >> + if (!clks_init[i].name) >> + continue; /* Skip clocks not present in some devices */ >> s2mps11_clk->iodev = iodev; >> - s2mps11_clk->hw.init = &s2mps11_clks_init[i]; >> + s2mps11_clk->hw.init = &clks_init[i]; >> s2mps11_clk->mask = 1 << i; >> s2mps11_clk->reg = s2mps11_reg; >> >> @@ -220,8 +243,12 @@ static int s2mps11_clk_probe(struct platform_device *pdev) >> } >> >> if (clk_table) { >> - for (i = 0; i < S2MPS11_CLKS_NUM; i++) >> + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { >> + /* Skip clocks not present on S2MPS14 */ >> + if (!clks_init[i].name) >> + continue; >> clk_table[i] = s2mps11_clks[i].clk; >> + } >> >> clk_data.clks = clk_table; >> clk_data.clk_num = S2MPS11_CLKS_NUM; >> @@ -250,14 +277,18 @@ static int s2mps11_clk_remove(struct platform_device *pdev) >> struct s2mps11_clk *s2mps11_clks = platform_get_drvdata(pdev); >> int i; >> >> - for (i = 0; i < S2MPS11_CLKS_NUM; i++) >> + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { >> + if (!s2mps11_clks[i].lookup) >> + continue; /* Skip clocks not present in some devices */ >> clkdev_drop(s2mps11_clks[i].lookup); >> + } >> >> return 0; >> } >> >> static const struct platform_device_id s2mps11_clk_id[] = { >> { "s2mps11-clk", S2MPS11X}, >> + { "s2mps14-clk", S2MPS14X}, >> { "s5m8767-clk", S5M8767X}, >> { }, >> }; >> -- >> 1.7.9.5 >>
On Tue, 2014-03-18 at 17:16 -0700, Mike Turquette wrote: > Quoting Krzysztof Kozlowski (2014-03-17 02:19:16) > > This patch adds support for S2MPS14 PMIC clocks (BT and AP) to the > > s2mps11 clock driver. > > > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > > Reviewed-by: Yadwinder Singh Brar <yadi.brar@samsung.com> > > Reviewed-by: Tomasz Figa <t.figa@samsung.com> > > This does not apply cleanly to to clk tree trip, nor does it compile > after manually merging due to changes introducing > linux/mfd/samsung/s2mps14.h. > > The changes look OK to me so maybe Lee can take it with my Ack? > > Acked-by: Mike Turquette <mturquette@linaro.org> > Hi, Thanks for the Ack. The patch depends on Tushar Behera's patches: - [PATCH V2 0/2] Add support for clocks in S5M8767 http://thread.gmane.org/gmane.linux.kernel.samsung-soc/27264 which are waiting for some time. Both patchsets should be pulled together. Best regards, Krzysztof
Quoting Krzysztof Kozlowski (2014-03-19 00:50:08) > On Tue, 2014-03-18 at 17:16 -0700, Mike Turquette wrote: > > Quoting Krzysztof Kozlowski (2014-03-17 02:19:16) > > > This patch adds support for S2MPS14 PMIC clocks (BT and AP) to the > > > s2mps11 clock driver. > > > > > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > > > Reviewed-by: Yadwinder Singh Brar <yadi.brar@samsung.com> > > > Reviewed-by: Tomasz Figa <t.figa@samsung.com> > > > > This does not apply cleanly to to clk tree trip, nor does it compile > > after manually merging due to changes introducing > > linux/mfd/samsung/s2mps14.h. > > > > The changes look OK to me so maybe Lee can take it with my Ack? > > > > Acked-by: Mike Turquette <mturquette@linaro.org> > > > > Hi, > > Thanks for the Ack. The patch depends on Tushar Behera's patches: > - [PATCH V2 0/2] Add support for clocks in S5M8767 > http://thread.gmane.org/gmane.linux.kernel.samsung-soc/27264 > which are waiting for some time. Both patchsets should be pulled > together. I took those patches in yesterday. So we have three options: 1) MFD tree can pull a stable commit from the clk tree. I'm happy to make a topic branch for this. Then these patches can be applied. 2) clk tree can pull a stable commit from the mfd tree if the mfd folks can provide one. 3) Wait until after the merge window to apply this one to the clk tree. I don't currently plan to send 2 PRs during the merge window, so this could either go in 3.16 or maybe into 3.15 if a split PR is sent. Regards, Mike > > Best regards, > Krzysztof >
On Wed, 2014-03-19 at 12:11 -0700, Mike Turquette wrote: > Quoting Krzysztof Kozlowski (2014-03-19 00:50:08) > > On Tue, 2014-03-18 at 17:16 -0700, Mike Turquette wrote: > > > Quoting Krzysztof Kozlowski (2014-03-17 02:19:16) > > > > This patch adds support for S2MPS14 PMIC clocks (BT and AP) to the > > > > s2mps11 clock driver. > > > > > > > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > > > > Reviewed-by: Yadwinder Singh Brar <yadi.brar@samsung.com> > > > > Reviewed-by: Tomasz Figa <t.figa@samsung.com> > > > > > > This does not apply cleanly to to clk tree trip, nor does it compile > > > after manually merging due to changes introducing > > > linux/mfd/samsung/s2mps14.h. > > > > > > The changes look OK to me so maybe Lee can take it with my Ack? > > > > > > Acked-by: Mike Turquette <mturquette@linaro.org> > > > > > > > Hi, > > > > Thanks for the Ack. The patch depends on Tushar Behera's patches: > > - [PATCH V2 0/2] Add support for clocks in S5M8767 > > http://thread.gmane.org/gmane.linux.kernel.samsung-soc/27264 > > which are waiting for some time. Both patchsets should be pulled > > together. > > I took those patches in yesterday. So we have three options: Great! Thanks. > > 1) MFD tree can pull a stable commit from the clk tree. I'm happy to > make a topic branch for this. Then these patches can be applied. > > 2) clk tree can pull a stable commit from the mfd tree if the mfd folks > can provide one. > > 3) Wait until after the merge window to apply this one to the clk tree. > I don't currently plan to send 2 PRs during the merge window, so this > could either go in 3.16 or maybe into 3.15 if a split PR is sent. Dear Lee, How do you wish to proceed? The patchset depends on changes in sec-core MFD driver. Best regards, Krzysztof
> > > > > This patch adds support for S2MPS14 PMIC clocks (BT and AP) to the > > > > > s2mps11 clock driver. > > > > > > > > > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > > > > > Reviewed-by: Yadwinder Singh Brar <yadi.brar@samsung.com> > > > > > Reviewed-by: Tomasz Figa <t.figa@samsung.com> > > > > > > > > This does not apply cleanly to to clk tree trip, nor does it compile > > > > after manually merging due to changes introducing > > > > linux/mfd/samsung/s2mps14.h. > > > > > > > > The changes look OK to me so maybe Lee can take it with my Ack? > > > > > > > > Acked-by: Mike Turquette <mturquette@linaro.org> > > > > > > > > > > Hi, > > > > > > Thanks for the Ack. The patch depends on Tushar Behera's patches: > > > - [PATCH V2 0/2] Add support for clocks in S5M8767 > > > http://thread.gmane.org/gmane.linux.kernel.samsung-soc/27264 > > > which are waiting for some time. Both patchsets should be pulled > > > together. > > > > I took those patches in yesterday. So we have three options: > > Great! Thanks. > > > > > 1) MFD tree can pull a stable commit from the clk tree. I'm happy to > > make a topic branch for this. Then these patches can be applied. > > > > 2) clk tree can pull a stable commit from the mfd tree if the mfd folks > > can provide one. > > > > 3) Wait until after the merge window to apply this one to the clk tree. > > I don't currently plan to send 2 PRs during the merge window, so this > > could either go in 3.16 or maybe into 3.15 if a split PR is sent. > > Dear Lee, > > How do you wish to proceed? The patchset depends on changes in sec-core > MFD driver. The MFD tree is betting pretty complicated with sec-core stuff at the minuite. Can I vote for option 3?
Quoting Lee Jones (2014-03-20 06:42:19) > > > > > > This patch adds support for S2MPS14 PMIC clocks (BT and AP) to the > > > > > > s2mps11 clock driver. > > > > > > > > > > > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> > > > > > > Reviewed-by: Yadwinder Singh Brar <yadi.brar@samsung.com> > > > > > > Reviewed-by: Tomasz Figa <t.figa@samsung.com> > > > > > > > > > > This does not apply cleanly to to clk tree trip, nor does it compile > > > > > after manually merging due to changes introducing > > > > > linux/mfd/samsung/s2mps14.h. > > > > > > > > > > The changes look OK to me so maybe Lee can take it with my Ack? > > > > > > > > > > Acked-by: Mike Turquette <mturquette@linaro.org> > > > > > > > > > > > > > Hi, > > > > > > > > Thanks for the Ack. The patch depends on Tushar Behera's patches: > > > > - [PATCH V2 0/2] Add support for clocks in S5M8767 > > > > http://thread.gmane.org/gmane.linux.kernel.samsung-soc/27264 > > > > which are waiting for some time. Both patchsets should be pulled > > > > together. > > > > > > I took those patches in yesterday. So we have three options: > > > > Great! Thanks. > > > > > > > > 1) MFD tree can pull a stable commit from the clk tree. I'm happy to > > > make a topic branch for this. Then these patches can be applied. > > > > > > 2) clk tree can pull a stable commit from the mfd tree if the mfd folks > > > can provide one. > > > > > > 3) Wait until after the merge window to apply this one to the clk tree. > > > I don't currently plan to send 2 PRs during the merge window, so this > > > could either go in 3.16 or maybe into 3.15 if a split PR is sent. > > > > Dear Lee, > > > > How do you wish to proceed? The patchset depends on changes in sec-core > > MFD driver. > > The MFD tree is betting pretty complicated with sec-core stuff at the > minuite. Can I vote for option 3? Sure. clock tree feels the same way. ;-) Regards, Mike > > -- > Lee Jones > Linaro STMicroelectronics Landing Team Lead > Linaro.org ? Open source software for ARM SoCs > Follow Linaro: Facebook | Twitter | Blog
diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig index 6f56d3a4f010..8f9ce8ba036d 100644 --- a/drivers/clk/Kconfig +++ b/drivers/clk/Kconfig @@ -65,12 +65,12 @@ config COMMON_CLK_SI570 clock generators. config COMMON_CLK_S2MPS11 - tristate "Clock driver for S2MPS11/S5M8767 MFD" + tristate "Clock driver for S2MPS1X/S5M8767 MFD" depends on MFD_SEC_CORE ---help--- - This driver supports S2MPS11/S5M8767 crystal oscillator clock. These - multi-function devices have 3 fixed-rate oscillators, clocked at - 32KHz each. + This driver supports S2MPS11/S2MPS14/S5M8767 crystal oscillator + clock. These multi-function devices have two (S2MPS14) or three + (S2MPS11, S5M8767) fixed-rate oscillators, clocked at 32KHz each. config CLK_TWL6040 tristate "External McPDM functional clock from twl6040" diff --git a/drivers/clk/clk-s2mps11.c b/drivers/clk/clk-s2mps11.c index 508875535e1e..8dafb552274f 100644 --- a/drivers/clk/clk-s2mps11.c +++ b/drivers/clk/clk-s2mps11.c @@ -1,7 +1,7 @@ /* * clk-s2mps11.c - Clock driver for S2MPS11. * - * Copyright (C) 2013 Samsung Electornics + * Copyright (C) 2013,2014 Samsung Electornics * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -13,10 +13,6 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * */ #include <linux/module.h> @@ -27,6 +23,7 @@ #include <linux/clk-provider.h> #include <linux/platform_device.h> #include <linux/mfd/samsung/s2mps11.h> +#include <linux/mfd/samsung/s2mps14.h> #include <linux/mfd/samsung/s5m8767.h> #include <linux/mfd/samsung/core.h> @@ -125,7 +122,21 @@ static struct clk_init_data s2mps11_clks_init[S2MPS11_CLKS_NUM] = { }, }; -static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev) +static struct clk_init_data s2mps14_clks_init[S2MPS11_CLKS_NUM] = { + [S2MPS11_CLK_AP] = { + .name = "s2mps14_ap", + .ops = &s2mps11_clk_ops, + .flags = CLK_IS_ROOT, + }, + [S2MPS11_CLK_BT] = { + .name = "s2mps14_bt", + .ops = &s2mps11_clk_ops, + .flags = CLK_IS_ROOT, + }, +}; + +static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev, + struct clk_init_data *clks_init) { struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent); struct device_node *clk_np; @@ -145,9 +156,12 @@ static struct device_node *s2mps11_clk_parse_dt(struct platform_device *pdev) if (!clk_table) return ERR_PTR(-ENOMEM); - for (i = 0; i < S2MPS11_CLKS_NUM; i++) + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { + if (!clks_init[i].name) + continue; /* Skip clocks not present in some devices */ of_property_read_string_index(clk_np, "clock-output-names", i, - &s2mps11_clks_init[i].name); + &clks_init[i].name); + } return clk_np; } @@ -158,6 +172,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev) struct s2mps11_clk *s2mps11_clks, *s2mps11_clk; struct device_node *clk_np = NULL; unsigned int s2mps11_reg; + struct clk_init_data *clks_init; int i, ret = 0; u32 val; @@ -168,25 +183,33 @@ static int s2mps11_clk_probe(struct platform_device *pdev) s2mps11_clk = s2mps11_clks; - clk_np = s2mps11_clk_parse_dt(pdev); - if (IS_ERR(clk_np)) - return PTR_ERR(clk_np); - switch (platform_get_device_id(pdev)->driver_data) { case S2MPS11X: s2mps11_reg = S2MPS11_REG_RTC_CTRL; + clks_init = s2mps11_clks_init; + break; + case S2MPS14X: + s2mps11_reg = S2MPS14_REG_RTCCTRL; + clks_init = s2mps14_clks_init; break; case S5M8767X: s2mps11_reg = S5M8767_REG_CTRL1; + clks_init = s2mps11_clks_init; break; default: dev_err(&pdev->dev, "Invalid device type\n"); return -EINVAL; }; + clk_np = s2mps11_clk_parse_dt(pdev, clks_init); + if (IS_ERR(clk_np)) + return PTR_ERR(clk_np); + for (i = 0; i < S2MPS11_CLKS_NUM; i++, s2mps11_clk++) { + if (!clks_init[i].name) + continue; /* Skip clocks not present in some devices */ s2mps11_clk->iodev = iodev; - s2mps11_clk->hw.init = &s2mps11_clks_init[i]; + s2mps11_clk->hw.init = &clks_init[i]; s2mps11_clk->mask = 1 << i; s2mps11_clk->reg = s2mps11_reg; @@ -220,8 +243,12 @@ static int s2mps11_clk_probe(struct platform_device *pdev) } if (clk_table) { - for (i = 0; i < S2MPS11_CLKS_NUM; i++) + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { + /* Skip clocks not present on S2MPS14 */ + if (!clks_init[i].name) + continue; clk_table[i] = s2mps11_clks[i].clk; + } clk_data.clks = clk_table; clk_data.clk_num = S2MPS11_CLKS_NUM; @@ -250,14 +277,18 @@ static int s2mps11_clk_remove(struct platform_device *pdev) struct s2mps11_clk *s2mps11_clks = platform_get_drvdata(pdev); int i; - for (i = 0; i < S2MPS11_CLKS_NUM; i++) + for (i = 0; i < S2MPS11_CLKS_NUM; i++) { + if (!s2mps11_clks[i].lookup) + continue; /* Skip clocks not present in some devices */ clkdev_drop(s2mps11_clks[i].lookup); + } return 0; } static const struct platform_device_id s2mps11_clk_id[] = { { "s2mps11-clk", S2MPS11X}, + { "s2mps14-clk", S2MPS14X}, { "s5m8767-clk", S5M8767X}, { }, };