Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c5948707 authored by Dmitry Osipenko's avatar Dmitry Osipenko Committed by Linus Walleij
Browse files

pinctrl: tegra20: Provide CDEV1/2 clock muxes



Muxing of pins MCLK1/2 determine the muxing of the corresponding clocks.
Make pinctrl driver to provide clock muxes for the CDEV1/2 pingroups, so
that main clk-controller driver could get an actual parent clock for the
CDEV1/2 clocks.

Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
Reviewed-by: default avatarMarcel Ziswiler <marcel@ziswiler.com>
Tested-by: default avatarMarcel Ziswiler <marcel@ziswiler.com>
Tested-by: default avatarMarc Dietrich <marvin24@gmx.de>
Acked-by: default avatarPeter De Schrijver <pdeschrijver@nvidia.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent ba5554dc
Loading
Loading
Loading
Loading
+0 −11
Original line number Original line Diff line number Diff line
@@ -33,17 +33,6 @@
#include "../pinctrl-utils.h"
#include "../pinctrl-utils.h"
#include "pinctrl-tegra.h"
#include "pinctrl-tegra.h"


struct tegra_pmx {
	struct device *dev;
	struct pinctrl_dev *pctl;

	const struct tegra_pinctrl_soc_data *soc;
	const char **group_pins;

	int nbanks;
	void __iomem **regs;
};

static inline u32 pmx_readl(struct tegra_pmx *pmx, u32 bank, u32 reg)
static inline u32 pmx_readl(struct tegra_pmx *pmx, u32 bank, u32 reg)
{
{
	return readl(pmx->regs[bank] + reg);
	return readl(pmx->regs[bank] + reg);
+11 −0
Original line number Original line Diff line number Diff line
@@ -16,6 +16,17 @@
#ifndef __PINMUX_TEGRA_H__
#ifndef __PINMUX_TEGRA_H__
#define __PINMUX_TEGRA_H__
#define __PINMUX_TEGRA_H__


struct tegra_pmx {
	struct device *dev;
	struct pinctrl_dev *pctl;

	const struct tegra_pinctrl_soc_data *soc;
	const char **group_pins;

	int nbanks;
	void __iomem **regs;
};

enum tegra_pinconf_param {
enum tegra_pinconf_param {
	/* argument: tegra_pinconf_pull */
	/* argument: tegra_pinconf_pull */
	TEGRA_PINCONF_PARAM_PULL,
	TEGRA_PINCONF_PARAM_PULL,
+29 −1
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@
 * more details.
 * more details.
 */
 */


#include <linux/clk-provider.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/of.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/platform_device.h>
@@ -2231,9 +2232,36 @@ static const struct tegra_pinctrl_soc_data tegra20_pinctrl = {
	.drvtype_in_mux = false,
	.drvtype_in_mux = false,
};
};


static const char *cdev1_parents[] = {
	"dev1_osc_div", "pll_a_out0", "pll_m_out1", "audio",
};

static const char *cdev2_parents[] = {
	"dev2_osc_div", "hclk", "pclk", "pll_p_out4",
};

static void tegra20_pinctrl_register_clock_muxes(struct platform_device *pdev)
{
	struct tegra_pmx *pmx = platform_get_drvdata(pdev);

	clk_register_mux(NULL, "cdev1_mux", cdev1_parents, 4, 0,
			 pmx->regs[1] + 0x8, 2, 2, CLK_MUX_READ_ONLY, NULL);

	clk_register_mux(NULL, "cdev2_mux", cdev2_parents, 4, 0,
			 pmx->regs[1] + 0x8, 4, 2, CLK_MUX_READ_ONLY, NULL);
}

static int tegra20_pinctrl_probe(struct platform_device *pdev)
static int tegra20_pinctrl_probe(struct platform_device *pdev)
{
{
	return tegra_pinctrl_probe(pdev, &tegra20_pinctrl);
	int err;

	err = tegra_pinctrl_probe(pdev, &tegra20_pinctrl);
	if (err)
		return err;

	tegra20_pinctrl_register_clock_muxes(pdev);

	return 0;
}
}


static const struct of_device_id tegra20_pinctrl_of_match[] = {
static const struct of_device_id tegra20_pinctrl_of_match[] = {