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

Commit b06c6987 authored by Tomasz Figa's avatar Tomasz Figa Committed by Mike Turquette
Browse files

clk: max77686: Register OF clock provider



If max77686 chip is instantiated from device tree, it is desirable to
have an OF clock provider to allow device tree based look-up of clocks.
This patch adds OF clock provider registration to the clk-max77686
driver.

Signed-off-by: default avatarTomasz Figa <t.figa@samsung.com>
Acked-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
parent 3966c947
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
Binding for Maxim MAX77686 32k clock generator block

This is a part of device tree bindings of MAX77686 multi-function device.
More information can be found in bindings/mfd/max77686.txt file.

The MAX77686 contains three 32.768khz clock outputs that can be controlled
(gated/ungated) over I2C.

Following properties should be presend in main device node of the MFD chip.

Required properties:
- #clock-cells: simple one-cell clock specifier format is used, where the
  only cell is used as an index of the clock inside the provider. Following
  indices are allowed:
    - 0: 32khz_ap clock,
    - 1: 32khz_cp clock,
    - 2: 32khz_pmic clock.

Example: Node of the MFD chip

	max77686: max77686@09 {
		compatible = "maxim,max77686";
		interrupt-parent = <&wakeup_eint>;
		interrupts = <26 0>;
		reg = <0x09>;
		#clock-cells = <1>;

		/* ... */
	};

Example: Clock consumer node

	foo@0 {
		compatible = "bar,foo";
		/* ... */
		clock-names = "my-clock";
		clocks = <&max77686 2>;
	};
+3 −0
Original line number Diff line number Diff line
@@ -7,6 +7,9 @@ different i2c slave address,presently for which we are statically creating i2c
client while probing.This document describes the binding for mfd device and
PMIC submodule.

Binding for the built-in 32k clock generator block is defined separately
in bindings/clk/maxim,max77686.txt file.

Required properties:
- compatible : Must be "maxim,max77686";
- reg : Specifies the i2c slave address of PMIC block.
+24 −0
Original line number Diff line number Diff line
@@ -169,6 +169,26 @@ static int max77686_clk_probe(struct platform_device *pdev)

	platform_set_drvdata(pdev, clocks);

	if (iodev->dev->of_node) {
		struct clk_onecell_data *of_data;

		of_data = devm_kzalloc(&pdev->dev,
					sizeof(*of_data), GFP_KERNEL);
		if (!of_data) {
			ret = -ENOMEM;
			goto err_clocks;
		}

		of_data->clks = clocks;
		of_data->clk_num = MAX77686_CLKS_NUM;
		ret = of_clk_add_provider(iodev->dev->of_node,
					of_clk_src_onecell_get, of_data);
		if (ret) {
			dev_err(&pdev->dev, "failed to register OF clock provider\n");
			goto err_clocks;
		}
	}

	return 0;

err_clocks:
@@ -182,9 +202,13 @@ static int max77686_clk_probe(struct platform_device *pdev)

static int max77686_clk_remove(struct platform_device *pdev)
{
	struct max77686_dev *iodev = dev_get_drvdata(pdev->dev.parent);
	struct clk **clocks = platform_get_drvdata(pdev);
	int i;

	if (iodev->dev->of_node)
		of_clk_del_provider(iodev->dev->of_node);

	for (i = 0; i < MAX77686_CLKS_NUM; i++) {
		struct clk_hw *hw = __clk_get_hw(clocks[i]);
		struct max77686_clk *max77686 = to_max77686_clk(hw);