From: Javier Martinez Canillas <javier.martinez@collabora.co.uk> To: Lee Jones <lee.jones@linaro.org> Cc: Samuel Ortiz <sameo@linux.intel.com>, Mark Brown <broonie@kernel.org>, Mike Turquette <mturquette@linaro.org>, Liam Girdwood <lgirdwood@gmail.com>, Alessandro Zummo <a.zummo@towertech.it>, Kukjin Kim <kgene.kim@samsung.com>, Doug Anderson <dianders@chromium.org>, Olof Johansson <olof@lixom.net>, Sjoerd Simons <sjoerd.simons@collabora.co.uk>, Daniel Stone <daniels@collabora.com>, Tomeu Vizoso <tomeu.vizoso@collabora.com>, Krzysztof Kozlowski <k.kozlowski@samsung.com>, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, Javier Martinez Canillas <javier.martinez@collabora.co.uk> Subject: [PATCH v3 11/14] clk: Add driver for Maxim 77802 PMIC clocks Date: Thu, 19 Jun 2014 20:20:37 +0200 [thread overview] Message-ID: <1403202040-12641-12-git-send-email-javier.martinez@collabora.co.uk> (raw) In-Reply-To: <1403202040-12641-1-git-send-email-javier.martinez@collabora.co.uk> The MAX77802 PMIC has two 32.768kHz Buffered Clock Outputs with Low Jitter Mode. This patch adds support for these two clocks. Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk> --- Changes since v2: None Changes since v1: - Use module_platform_driver() instead of having init/exit functions. Suggested by Mark Brown. - Use the generic maxim clock driver to reduce code duplication with clk-max77686.c driver. drivers/clk/Kconfig | 7 +++ drivers/clk/Makefile | 1 + drivers/clk/clk-max77802.c | 99 ++++++++++++++++++++++++++++++ include/dt-bindings/clock/maxim,max77802.h | 22 +++++++ 4 files changed, 129 insertions(+) create mode 100644 drivers/clk/clk-max77802.c create mode 100644 include/dt-bindings/clock/maxim,max77802.h diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig index 3fd4270..221260b 100644 --- a/drivers/clk/Kconfig +++ b/drivers/clk/Kconfig @@ -42,6 +42,13 @@ config COMMON_CLK_MAX77686 ---help--- This driver supports Maxim 77686 crystal oscillator clock. +config COMMON_CLK_MAX77802 + tristate "Clock driver for Maxim 77802 MFD" + depends on MFD_MAX77802 + select COMMON_CLK_MAX_GEN + ---help--- + This driver supports Maxim 77802 crystal oscillator clock. + config COMMON_CLK_SI5351 tristate "Clock driver for SiLabs 5351A/B/C" depends on I2C diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 6c1aff6..520ff76 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -20,6 +20,7 @@ obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o obj-$(CONFIG_MACH_LOONGSON1) += clk-ls1x.o obj-$(CONFIG_COMMON_CLK_MAX_GEN) += clk-max-gen.o obj-$(CONFIG_COMMON_CLK_MAX77686) += clk-max77686.o +obj-$(CONFIG_COMMON_CLK_MAX77802) += clk-max77802.o obj-$(CONFIG_ARCH_MOXART) += clk-moxart.o obj-$(CONFIG_ARCH_NOMADIK) += clk-nomadik.o obj-$(CONFIG_ARCH_NSPIRE) += clk-nspire.o diff --git a/drivers/clk/clk-max77802.c b/drivers/clk/clk-max77802.c new file mode 100644 index 0000000..4253b44 --- /dev/null +++ b/drivers/clk/clk-max77802.c @@ -0,0 +1,99 @@ +/* + * clk-max77802.c - Clock driver for Maxim 77802 + * + * Copyright (C) 2014 Google, Inc + * + * Copyright (C) 2012 Samsung Electornics + * Jonghwa Lee <jonghwa3.lee@samsung.com> + * + * 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 + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This driver is based on clk-max77686.c + */ + +#include <linux/kernel.h> +#include <linux/slab.h> +#include <linux/err.h> +#include <linux/platform_device.h> +#include <linux/mfd/max77802.h> +#include <linux/mfd/max77802-private.h> +#include <linux/clk-provider.h> +#include <linux/mutex.h> +#include <linux/clkdev.h> + +#include <dt-bindings/clock/maxim,max77802.h> +#include "clk-max-gen.h" + +#define MAX77802_CLOCK_OPMODE_MASK 0x1 +#define MAX77802_CLOCK_LOW_JITTER_SHIFT 0x3 + +static struct clk_init_data max77802_clks_init[MAX77802_CLKS_NUM] = { + [MAX77802_CLK_32K_AP] = { + .name = "32khz_ap", + .ops = &max_gen_clk_ops, + .flags = CLK_IS_ROOT, + }, + [MAX77802_CLK_32K_CP] = { + .name = "32khz_cp", + .ops = &max_gen_clk_ops, + .flags = CLK_IS_ROOT, + }, +}; + +static int max77802_clk_probe(struct platform_device *pdev) +{ + struct max77802_dev *iodev = dev_get_drvdata(pdev->dev.parent); + int ret; + + ret = max_gen_clk_probe(pdev, iodev->regmap, MAX77802_REG_32KHZ, + max77802_clks_init, MAX77802_CLKS_NUM); + + if (ret) { + dev_err(&pdev->dev, "generic probe failed %d\n", ret); + return ret; + } + + /* Enable low-jitter mode on the 32khz clocks. */ + ret = regmap_update_bits(iodev->regmap, MAX77802_REG_32KHZ, + 1 << MAX77802_CLOCK_LOW_JITTER_SHIFT, + 1 << MAX77802_CLOCK_LOW_JITTER_SHIFT); + if (ret < 0) + dev_err(&pdev->dev, "failed to enable low-jitter mode\n"); + + return ret; +} + +static int max77802_clk_remove(struct platform_device *pdev) +{ + return max_gen_clk_remove(pdev, MAX77802_CLKS_NUM); +} + +static const struct platform_device_id max77802_clk_id[] = { + { "max77802-clk", 0}, + { }, +}; +MODULE_DEVICE_TABLE(platform, max77802_clk_id); + +static struct platform_driver max77802_clk_driver = { + .driver = { + .name = "max77802-clk", + .owner = THIS_MODULE, + }, + .probe = max77802_clk_probe, + .remove = max77802_clk_remove, + .id_table = max77802_clk_id, +}; + +module_platform_driver(max77802_clk_driver); + +MODULE_DESCRIPTION("MAXIM 77802 Clock Driver"); +MODULE_AUTHOR("Javier Martinez Canillas <javier.martinez@collabora.co.uk>"); +MODULE_LICENSE("GPL"); diff --git a/include/dt-bindings/clock/maxim,max77802.h b/include/dt-bindings/clock/maxim,max77802.h new file mode 100644 index 0000000..997312e --- /dev/null +++ b/include/dt-bindings/clock/maxim,max77802.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2014 Google, Inc + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Device Tree binding constants clocks for the Maxim 77802 PMIC. + */ + +#ifndef _DT_BINDINGS_CLOCK_MAXIM_MAX77802_CLOCK_H +#define _DT_BINDINGS_CLOCK_MAXIM_MAX77802_CLOCK_H + +/* Fixed rate clocks. */ + +#define MAX77802_CLK_32K_AP 0 +#define MAX77802_CLK_32K_CP 1 + +/* Total number of clocks. */ +#define MAX77802_CLKS_NUM (MAX77802_CLK_32K_CP + 1) + +#endif /* _DT_BINDINGS_CLOCK_MAXIM_MAX77802_CLOCK_H */ -- 2.0.0.rc2
WARNING: multiple messages have this Message-ID (diff)
From: javier.martinez@collabora.co.uk (Javier Martinez Canillas) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v3 11/14] clk: Add driver for Maxim 77802 PMIC clocks Date: Thu, 19 Jun 2014 20:20:37 +0200 [thread overview] Message-ID: <1403202040-12641-12-git-send-email-javier.martinez@collabora.co.uk> (raw) In-Reply-To: <1403202040-12641-1-git-send-email-javier.martinez@collabora.co.uk> The MAX77802 PMIC has two 32.768kHz Buffered Clock Outputs with Low Jitter Mode. This patch adds support for these two clocks. Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk> --- Changes since v2: None Changes since v1: - Use module_platform_driver() instead of having init/exit functions. Suggested by Mark Brown. - Use the generic maxim clock driver to reduce code duplication with clk-max77686.c driver. drivers/clk/Kconfig | 7 +++ drivers/clk/Makefile | 1 + drivers/clk/clk-max77802.c | 99 ++++++++++++++++++++++++++++++ include/dt-bindings/clock/maxim,max77802.h | 22 +++++++ 4 files changed, 129 insertions(+) create mode 100644 drivers/clk/clk-max77802.c create mode 100644 include/dt-bindings/clock/maxim,max77802.h diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig index 3fd4270..221260b 100644 --- a/drivers/clk/Kconfig +++ b/drivers/clk/Kconfig @@ -42,6 +42,13 @@ config COMMON_CLK_MAX77686 ---help--- This driver supports Maxim 77686 crystal oscillator clock. +config COMMON_CLK_MAX77802 + tristate "Clock driver for Maxim 77802 MFD" + depends on MFD_MAX77802 + select COMMON_CLK_MAX_GEN + ---help--- + This driver supports Maxim 77802 crystal oscillator clock. + config COMMON_CLK_SI5351 tristate "Clock driver for SiLabs 5351A/B/C" depends on I2C diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile index 6c1aff6..520ff76 100644 --- a/drivers/clk/Makefile +++ b/drivers/clk/Makefile @@ -20,6 +20,7 @@ obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o obj-$(CONFIG_MACH_LOONGSON1) += clk-ls1x.o obj-$(CONFIG_COMMON_CLK_MAX_GEN) += clk-max-gen.o obj-$(CONFIG_COMMON_CLK_MAX77686) += clk-max77686.o +obj-$(CONFIG_COMMON_CLK_MAX77802) += clk-max77802.o obj-$(CONFIG_ARCH_MOXART) += clk-moxart.o obj-$(CONFIG_ARCH_NOMADIK) += clk-nomadik.o obj-$(CONFIG_ARCH_NSPIRE) += clk-nspire.o diff --git a/drivers/clk/clk-max77802.c b/drivers/clk/clk-max77802.c new file mode 100644 index 0000000..4253b44 --- /dev/null +++ b/drivers/clk/clk-max77802.c @@ -0,0 +1,99 @@ +/* + * clk-max77802.c - Clock driver for Maxim 77802 + * + * Copyright (C) 2014 Google, Inc + * + * Copyright (C) 2012 Samsung Electornics + * Jonghwa Lee <jonghwa3.lee@samsung.com> + * + * 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 + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This driver is based on clk-max77686.c + */ + +#include <linux/kernel.h> +#include <linux/slab.h> +#include <linux/err.h> +#include <linux/platform_device.h> +#include <linux/mfd/max77802.h> +#include <linux/mfd/max77802-private.h> +#include <linux/clk-provider.h> +#include <linux/mutex.h> +#include <linux/clkdev.h> + +#include <dt-bindings/clock/maxim,max77802.h> +#include "clk-max-gen.h" + +#define MAX77802_CLOCK_OPMODE_MASK 0x1 +#define MAX77802_CLOCK_LOW_JITTER_SHIFT 0x3 + +static struct clk_init_data max77802_clks_init[MAX77802_CLKS_NUM] = { + [MAX77802_CLK_32K_AP] = { + .name = "32khz_ap", + .ops = &max_gen_clk_ops, + .flags = CLK_IS_ROOT, + }, + [MAX77802_CLK_32K_CP] = { + .name = "32khz_cp", + .ops = &max_gen_clk_ops, + .flags = CLK_IS_ROOT, + }, +}; + +static int max77802_clk_probe(struct platform_device *pdev) +{ + struct max77802_dev *iodev = dev_get_drvdata(pdev->dev.parent); + int ret; + + ret = max_gen_clk_probe(pdev, iodev->regmap, MAX77802_REG_32KHZ, + max77802_clks_init, MAX77802_CLKS_NUM); + + if (ret) { + dev_err(&pdev->dev, "generic probe failed %d\n", ret); + return ret; + } + + /* Enable low-jitter mode on the 32khz clocks. */ + ret = regmap_update_bits(iodev->regmap, MAX77802_REG_32KHZ, + 1 << MAX77802_CLOCK_LOW_JITTER_SHIFT, + 1 << MAX77802_CLOCK_LOW_JITTER_SHIFT); + if (ret < 0) + dev_err(&pdev->dev, "failed to enable low-jitter mode\n"); + + return ret; +} + +static int max77802_clk_remove(struct platform_device *pdev) +{ + return max_gen_clk_remove(pdev, MAX77802_CLKS_NUM); +} + +static const struct platform_device_id max77802_clk_id[] = { + { "max77802-clk", 0}, + { }, +}; +MODULE_DEVICE_TABLE(platform, max77802_clk_id); + +static struct platform_driver max77802_clk_driver = { + .driver = { + .name = "max77802-clk", + .owner = THIS_MODULE, + }, + .probe = max77802_clk_probe, + .remove = max77802_clk_remove, + .id_table = max77802_clk_id, +}; + +module_platform_driver(max77802_clk_driver); + +MODULE_DESCRIPTION("MAXIM 77802 Clock Driver"); +MODULE_AUTHOR("Javier Martinez Canillas <javier.martinez@collabora.co.uk>"); +MODULE_LICENSE("GPL"); diff --git a/include/dt-bindings/clock/maxim,max77802.h b/include/dt-bindings/clock/maxim,max77802.h new file mode 100644 index 0000000..997312e --- /dev/null +++ b/include/dt-bindings/clock/maxim,max77802.h @@ -0,0 +1,22 @@ +/* + * Copyright (C) 2014 Google, Inc + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Device Tree binding constants clocks for the Maxim 77802 PMIC. + */ + +#ifndef _DT_BINDINGS_CLOCK_MAXIM_MAX77802_CLOCK_H +#define _DT_BINDINGS_CLOCK_MAXIM_MAX77802_CLOCK_H + +/* Fixed rate clocks. */ + +#define MAX77802_CLK_32K_AP 0 +#define MAX77802_CLK_32K_CP 1 + +/* Total number of clocks. */ +#define MAX77802_CLKS_NUM (MAX77802_CLK_32K_CP + 1) + +#endif /* _DT_BINDINGS_CLOCK_MAXIM_MAX77802_CLOCK_H */ -- 2.0.0.rc2
next prev parent reply other threads:[~2014-06-19 18:23 UTC|newest] Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-06-19 18:20 [PATCH v3 00/14] Add Maxim 77802 PMIC support Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 01/14] mfd: max77686: Convert to use regmap_irq Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 02/14] mfd: max77686: Allow the max77686 rtc to wakeup the system Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-25 10:05 ` Krzysztof Kozlowski 2014-06-25 10:05 ` Krzysztof Kozlowski 2014-06-25 10:29 ` Javier Martinez Canillas 2014-06-25 10:29 ` Javier Martinez Canillas 2014-06-25 17:24 ` Doug Anderson 2014-06-25 17:24 ` Doug Anderson 2014-06-25 17:24 ` Doug Anderson 2014-06-25 18:11 ` Javier Martinez Canillas 2014-06-25 18:11 ` Javier Martinez Canillas 2014-06-25 18:11 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 03/14] clk: max77686: Add DT include for MAX77686 PMIC clock Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-25 10:18 ` Krzysztof Kozlowski 2014-06-25 10:18 ` Krzysztof Kozlowski 2014-06-19 18:20 ` [PATCH v3 04/14] clk: max77686: Improve Maxim 77686 PMIC clocks binding Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-25 10:19 ` Krzysztof Kozlowski 2014-06-25 10:19 ` Krzysztof Kozlowski 2014-06-25 18:06 ` Doug Anderson 2014-06-25 18:06 ` Doug Anderson 2014-06-25 18:06 ` Doug Anderson 2014-06-25 18:13 ` Javier Martinez Canillas 2014-06-25 18:13 ` Javier Martinez Canillas 2014-06-25 18:13 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 05/14] clk: Add generic driver for Maxim PMIC clocks Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-25 14:19 ` Krzysztof Kozlowski 2014-06-25 14:19 ` Krzysztof Kozlowski 2014-06-25 14:36 ` Javier Martinez Canillas 2014-06-25 14:36 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 06/14] clk: max77686: Convert to the generic max clock driver Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-25 14:30 ` Krzysztof Kozlowski 2014-06-25 14:30 ` Krzysztof Kozlowski 2014-06-25 14:30 ` Krzysztof Kozlowski 2014-06-19 18:20 ` [PATCH v3 07/14] mfd: Add driver for Maxim 77802 Power Management IC Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 08/14] mfd: max77802: Add DT binding documentation Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 09/14] regmap: Add regmap_reg_copy function Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 10/14] regulator: Add driver for Maxim 77802 PMIC regulators Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas [this message] 2014-06-19 18:20 ` [PATCH v3 11/14] clk: Add driver for Maxim 77802 PMIC clocks Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 12/14] clk: max77802: Add DT binding documentation Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 13/14] rtc: Add driver for Maxim 77802 PMIC Real-Time-Clock Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas 2014-06-19 18:20 ` [PATCH v3 14/14] ARM: dts: Add max77802 device node for exynos5420-peach-pit Javier Martinez Canillas 2014-06-19 18:20 ` Javier Martinez Canillas
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1403202040-12641-12-git-send-email-javier.martinez@collabora.co.uk \ --to=javier.martinez@collabora.co.uk \ --cc=a.zummo@towertech.it \ --cc=broonie@kernel.org \ --cc=daniels@collabora.com \ --cc=devicetree@vger.kernel.org \ --cc=dianders@chromium.org \ --cc=k.kozlowski@samsung.com \ --cc=kgene.kim@samsung.com \ --cc=lee.jones@linaro.org \ --cc=lgirdwood@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-samsung-soc@vger.kernel.org \ --cc=mturquette@linaro.org \ --cc=olof@lixom.net \ --cc=sameo@linux.intel.com \ --cc=sjoerd.simons@collabora.co.uk \ --cc=tomeu.vizoso@collabora.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.