From: Stephen Boyd <sboyd@codeaurora.org> To: Maxime Ripard <maxime.ripard@free-electrons.com> Cc: Mike Turquette <mturquette@baylibre.com>, David Airlie <airlied@linux.ie>, Thierry Reding <thierry.reding@gmail.com>, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-sunxi@googlegroups.com, Laurent Pinchart <laurent.pinchart@ideasonboard.com>, Chen-Yu Tsai <wens@csie.org>, Hans de Goede <hdegoede@redhat.com>, Alexander Kaplan <alex@nextthing.co>, Wynter Woods <wynter@nextthing.co>, Boris Brezillon <boris.brezillon@free-electrons.com>, Thomas Petazzoni <thomas.petazzoni@free-electrons.com>, Rob Clark <robdclark@gmail.com>, Daniel Vetter <daniel@ffwll.ch> Subject: Re: [PATCH 01/19] clk: sunxi: Add display clock Date: Fri, 30 Oct 2015 14:29:02 -0700 [thread overview] Message-ID: <20151030212902.GG19782@codeaurora.org> (raw) In-Reply-To: <1446214865-3972-2-git-send-email-maxime.ripard@free-electrons.com> On 10/30, Maxime Ripard wrote: > diff --git a/drivers/clk/sunxi/clk-sun4i-display.c b/drivers/clk/sunxi/clk-sun4i-display.c > new file mode 100644 > index 000000000000..f13b095c6d7a > --- /dev/null > +++ b/drivers/clk/sunxi/clk-sun4i-display.c > @@ -0,0 +1,199 @@ > +/* > + * Copyright 2015 Maxime Ripard > + * > + * Maxime Ripard <maxime.ripard@free-electrons.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. > + */ > + #include <linux/kernel.h> for container_of? > +#include <linux/clk-provider.h> > +#include <linux/of_address.h> > +#include <linux/reset-controller.h> > +#include <linux/slab.h> > +#include <linux/spinlock.h> > + > +#define SUN4I_A10_DISPLAY_PARENTS 3 > + > +#define SUN4I_A10_DISPLAY_GATE_BIT 31 > +#define SUN4I_A10_DISPLAY_RESET_BIT 30 > +#define SUN4I_A10_DISPLAY_MUX_MASK 3 > +#define SUN4I_A10_DISPLAY_MUX_SHIFT 24 > +#define SUN4I_A10_DISPLAY_DIV_WIDTH 4 > +#define SUN4I_A10_DISPLAY_DIV_SHIFT 0 > + > +struct reset_data { > + void __iomem *reg; > + spinlock_t *lock; > + struct reset_controller_dev rcdev; > +}; > + > +static DEFINE_SPINLOCK(sun4i_a10_display_lock); > + > +static int sun4i_a10_display_assert(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct reset_data *data = container_of(rcdev, > + struct reset_data, > + rcdev); Can this be a macro rcdev_to_reset_data() or something? > + unsigned long flags; [..] > + > +static int sun4i_a10_display_status(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct reset_data *data = container_of(rcdev, > + struct reset_data, > + rcdev); > + > + return !(readl(data->reg) & BIT(SUN4I_A10_DISPLAY_RESET_BIT)); > +} > + > +static struct reset_control_ops sun4i_a10_display_reset_ops = { Someone should make it so this can be const... > + .assert = sun4i_a10_display_assert, > + .deassert = sun4i_a10_display_deassert, > + .status = sun4i_a10_display_status, > +}; > + > +static int sun4i_a10_display_reset_xlate(struct reset_controller_dev *rcdev, > + const struct of_phandle_args *spec) > +{ > + if (WARN_ON(spec->args_count != rcdev->of_reset_n_cells)) > + return -EINVAL; Do we really need this check? Seems like something the reset core should handle. > + > + /* We only have a single reset signal */ > + return 0; > +} > + > +static void __init sun4i_a10_display_setup(struct device_node *node) > +{ > + const char *parents[SUN4I_A10_DISPLAY_PARENTS]; > + const char *clk_name = node->name; > + struct reset_data *reset_data; > + struct clk_divider *div; > + struct clk_gate *gate; > + struct clk_mux *mux; > + void __iomem *reg; > + struct clk *clk; > + int i; > + > + of_property_read_string(node, "clock-output-names", &clk_name); > + > + reg = of_io_request_and_map(node, 0, of_node_full_name(node)); > + if (IS_ERR(reg)) { > + pr_err("%s: Could not map the clock registers\n", clk_name); > + return; > + } > + > + for (i = 0; i < SUN4I_A10_DISPLAY_PARENTS; i++) > + parents[i] = of_clk_get_parent_name(node, i); of_clk_parent_fill()? > + > + mux = kzalloc(sizeof(*mux), GFP_KERNEL); > + if (!mux) [..] > + goto free_reset; > + } > + > + return; > + > +free_reset: > + kfree(reset_data); > +free_clk: > + clk_unregister(clk); We really ought to have a clk_composite_unregister() API. -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
WARNING: multiple messages have this Message-ID (diff)
From: sboyd@codeaurora.org (Stephen Boyd) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 01/19] clk: sunxi: Add display clock Date: Fri, 30 Oct 2015 14:29:02 -0700 [thread overview] Message-ID: <20151030212902.GG19782@codeaurora.org> (raw) In-Reply-To: <1446214865-3972-2-git-send-email-maxime.ripard@free-electrons.com> On 10/30, Maxime Ripard wrote: > diff --git a/drivers/clk/sunxi/clk-sun4i-display.c b/drivers/clk/sunxi/clk-sun4i-display.c > new file mode 100644 > index 000000000000..f13b095c6d7a > --- /dev/null > +++ b/drivers/clk/sunxi/clk-sun4i-display.c > @@ -0,0 +1,199 @@ > +/* > + * Copyright 2015 Maxime Ripard > + * > + * Maxime Ripard <maxime.ripard@free-electrons.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. > + */ > + #include <linux/kernel.h> for container_of? > +#include <linux/clk-provider.h> > +#include <linux/of_address.h> > +#include <linux/reset-controller.h> > +#include <linux/slab.h> > +#include <linux/spinlock.h> > + > +#define SUN4I_A10_DISPLAY_PARENTS 3 > + > +#define SUN4I_A10_DISPLAY_GATE_BIT 31 > +#define SUN4I_A10_DISPLAY_RESET_BIT 30 > +#define SUN4I_A10_DISPLAY_MUX_MASK 3 > +#define SUN4I_A10_DISPLAY_MUX_SHIFT 24 > +#define SUN4I_A10_DISPLAY_DIV_WIDTH 4 > +#define SUN4I_A10_DISPLAY_DIV_SHIFT 0 > + > +struct reset_data { > + void __iomem *reg; > + spinlock_t *lock; > + struct reset_controller_dev rcdev; > +}; > + > +static DEFINE_SPINLOCK(sun4i_a10_display_lock); > + > +static int sun4i_a10_display_assert(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct reset_data *data = container_of(rcdev, > + struct reset_data, > + rcdev); Can this be a macro rcdev_to_reset_data() or something? > + unsigned long flags; [..] > + > +static int sun4i_a10_display_status(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct reset_data *data = container_of(rcdev, > + struct reset_data, > + rcdev); > + > + return !(readl(data->reg) & BIT(SUN4I_A10_DISPLAY_RESET_BIT)); > +} > + > +static struct reset_control_ops sun4i_a10_display_reset_ops = { Someone should make it so this can be const... > + .assert = sun4i_a10_display_assert, > + .deassert = sun4i_a10_display_deassert, > + .status = sun4i_a10_display_status, > +}; > + > +static int sun4i_a10_display_reset_xlate(struct reset_controller_dev *rcdev, > + const struct of_phandle_args *spec) > +{ > + if (WARN_ON(spec->args_count != rcdev->of_reset_n_cells)) > + return -EINVAL; Do we really need this check? Seems like something the reset core should handle. > + > + /* We only have a single reset signal */ > + return 0; > +} > + > +static void __init sun4i_a10_display_setup(struct device_node *node) > +{ > + const char *parents[SUN4I_A10_DISPLAY_PARENTS]; > + const char *clk_name = node->name; > + struct reset_data *reset_data; > + struct clk_divider *div; > + struct clk_gate *gate; > + struct clk_mux *mux; > + void __iomem *reg; > + struct clk *clk; > + int i; > + > + of_property_read_string(node, "clock-output-names", &clk_name); > + > + reg = of_io_request_and_map(node, 0, of_node_full_name(node)); > + if (IS_ERR(reg)) { > + pr_err("%s: Could not map the clock registers\n", clk_name); > + return; > + } > + > + for (i = 0; i < SUN4I_A10_DISPLAY_PARENTS; i++) > + parents[i] = of_clk_get_parent_name(node, i); of_clk_parent_fill()? > + > + mux = kzalloc(sizeof(*mux), GFP_KERNEL); > + if (!mux) [..] > + goto free_reset; > + } > + > + return; > + > +free_reset: > + kfree(reset_data); > +free_clk: > + clk_unregister(clk); We really ought to have a clk_composite_unregister() API. -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project
next prev parent reply other threads:[~2015-10-30 21:29 UTC|newest] Thread overview: 167+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-10-30 14:20 [PATCH 00/19] drm: Add Allwinner A10 display engine support Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 01/19] clk: sunxi: Add display clock Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 21:29 ` Stephen Boyd [this message] 2015-10-30 21:29 ` Stephen Boyd 2015-11-06 23:39 ` Maxime Ripard 2015-11-06 23:39 ` Maxime Ripard 2015-11-06 23:39 ` Maxime Ripard 2015-11-12 20:31 ` Stephen Boyd 2015-11-12 20:31 ` Stephen Boyd 2015-11-19 15:42 ` Maxime Ripard 2015-11-19 15:42 ` Maxime Ripard 2015-11-19 15:42 ` Maxime Ripard 2015-10-31 10:28 ` Chen-Yu Tsai 2015-10-31 10:28 ` Chen-Yu Tsai 2015-10-31 10:28 ` Chen-Yu Tsai 2015-11-06 19:42 ` Maxime Ripard 2015-11-06 19:42 ` Maxime Ripard 2015-11-06 19:42 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 02/19] clk: sunxi: Add PLL3 clock Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 21:32 ` Stephen Boyd 2015-10-30 21:32 ` Stephen Boyd 2015-10-30 21:32 ` Stephen Boyd 2015-10-30 14:20 ` [PATCH 03/19] clk: sunxi: Add TCON channel0 clock Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-31 10:19 ` Chen-Yu Tsai 2015-10-31 10:19 ` Chen-Yu Tsai 2015-11-06 22:11 ` Maxime Ripard 2015-11-06 22:11 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 04/19] clk: sunxi: Add TCON channel1 clock Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 21:37 ` Stephen Boyd 2015-10-30 21:37 ` Stephen Boyd 2015-11-07 0:11 ` Maxime Ripard 2015-11-07 0:11 ` Maxime Ripard 2015-11-07 0:11 ` Maxime Ripard 2015-10-31 9:53 ` Chen-Yu Tsai 2015-10-31 9:53 ` Chen-Yu Tsai 2015-10-31 9:53 ` Chen-Yu Tsai 2015-11-07 0:01 ` Maxime Ripard 2015-11-07 0:01 ` Maxime Ripard 2015-11-07 0:01 ` Maxime Ripard 2015-11-09 3:36 ` Chen-Yu Tsai 2015-11-09 3:36 ` Chen-Yu Tsai 2015-11-09 3:36 ` Chen-Yu Tsai 2015-11-19 15:35 ` Maxime Ripard 2015-11-19 15:35 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 05/19] clk: sunxi: add DRAM gates Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-11-09 4:18 ` Chen-Yu Tsai 2015-11-09 4:18 ` Chen-Yu Tsai 2015-11-09 4:18 ` Chen-Yu Tsai 2015-11-13 8:08 ` Chen-Yu Tsai 2015-11-13 8:08 ` Chen-Yu Tsai 2015-11-13 8:08 ` Chen-Yu Tsai 2015-11-19 15:43 ` Maxime Ripard 2015-11-19 15:43 ` Maxime Ripard 2015-11-19 15:43 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 06/19] clk: sunxi: Add Allwinner R8 AHB gates support Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 16:01 ` Chen-Yu Tsai 2015-10-30 16:01 ` Chen-Yu Tsai 2015-10-30 16:01 ` Chen-Yu Tsai 2015-10-30 16:33 ` Hans de Goede 2015-10-30 16:33 ` Hans de Goede 2015-10-30 16:33 ` Hans de Goede 2015-10-30 14:20 ` [PATCH 07/19] drm/panel: simple: Add timings for the Olimex LCD-OLinuXino-4.3TS Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 17:32 ` Thierry Reding 2015-10-30 17:32 ` Thierry Reding 2015-10-30 17:32 ` Thierry Reding 2015-11-07 0:44 ` Maxime Ripard 2015-11-07 0:44 ` Maxime Ripard 2015-11-07 0:44 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 08/19] drm: Add Allwinner A10 Display Engine support Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:44 ` Daniel Vetter 2015-10-30 14:44 ` Daniel Vetter 2015-11-11 22:14 ` Maxime Ripard 2015-11-11 22:14 ` Maxime Ripard 2015-11-11 22:14 ` Maxime Ripard 2015-11-16 15:04 ` Daniel Vetter 2015-11-16 15:04 ` Daniel Vetter 2015-11-16 15:04 ` Daniel Vetter 2015-10-30 14:20 ` [PATCH 09/19] drm: sun4i: Add DT bindings documentation Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 16:40 ` Rob Herring 2015-10-30 16:40 ` Rob Herring 2015-10-30 16:40 ` Rob Herring 2015-10-30 17:37 ` Thierry Reding 2015-10-30 17:37 ` Thierry Reding 2015-10-30 17:37 ` Thierry Reding 2015-10-30 17:37 ` Thierry Reding 2015-11-01 14:28 ` Rob Herring 2015-11-01 14:28 ` Rob Herring 2015-11-01 14:28 ` Rob Herring 2015-11-01 14:28 ` Rob Herring 2015-11-06 22:32 ` Maxime Ripard 2015-11-06 22:32 ` Maxime Ripard 2015-11-06 22:32 ` Maxime Ripard 2015-11-06 22:32 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 10/19] drm: sun4i: Add RGB output Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 11/19] drm: sun4i: Add composite output Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-11-02 2:53 ` [linux-sunxi] " Jonathan Liu 2015-11-02 2:53 ` Jonathan Liu 2015-11-02 2:53 ` Jonathan Liu 2015-11-07 0:35 ` [linux-sunxi] " Maxime Ripard 2015-11-07 0:35 ` Maxime Ripard 2015-11-07 0:35 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 12/19] drm: sun4i: tv: Add PAL output standard Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` [PATCH 13/19] drm: sun4i: tv: Add NTSC " Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:20 ` Maxime Ripard 2015-10-30 14:21 ` [PATCH 14/19] ARM: sun5i: dt: Add pll3 and pll7 clocks Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-11-09 4:24 ` Chen-Yu Tsai 2015-11-09 4:24 ` Chen-Yu Tsai 2015-11-09 4:24 ` Chen-Yu Tsai 2015-10-30 14:21 ` [PATCH 15/19] ARM: sun5i: dt: Add display and TCON clocks Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` [PATCH 16/19] ARM: sun5i: dt: Add DRAM gates Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` [PATCH 17/19] ARM: sun5i: dt: Add display blocks to the DTSI Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` [PATCH 18/19] ARM: sun5i: r8: Add AHB gates " Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` [PATCH 19/19] ARM: sun5i: chip: Enable the TV Encoder Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 14:21 ` Maxime Ripard 2015-10-30 15:20 ` Chen-Yu Tsai 2015-10-30 15:20 ` Chen-Yu Tsai 2015-11-06 19:37 ` Maxime Ripard 2015-11-06 19:37 ` Maxime Ripard 2015-11-06 19:37 ` Maxime Ripard 2015-10-30 14:52 ` [PATCH 00/19] drm: Add Allwinner A10 display engine support Daniel Vetter 2015-10-30 14:52 ` Daniel Vetter 2015-10-30 14:52 ` Daniel Vetter 2015-11-12 5:12 ` Maxime Ripard 2015-11-12 5:12 ` Maxime Ripard 2015-11-12 5:12 ` Maxime Ripard 2015-10-30 15:02 ` Stefan Monnier 2015-11-09 3:43 ` Chen-Yu Tsai 2015-11-09 3:43 ` Chen-Yu Tsai 2015-11-09 3:43 ` Chen-Yu Tsai
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=20151030212902.GG19782@codeaurora.org \ --to=sboyd@codeaurora.org \ --cc=airlied@linux.ie \ --cc=alex@nextthing.co \ --cc=boris.brezillon@free-electrons.com \ --cc=daniel@ffwll.ch \ --cc=devicetree@vger.kernel.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=hdegoede@redhat.com \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-clk@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-sunxi@googlegroups.com \ --cc=maxime.ripard@free-electrons.com \ --cc=mturquette@baylibre.com \ --cc=robdclark@gmail.com \ --cc=thierry.reding@gmail.com \ --cc=thomas.petazzoni@free-electrons.com \ --cc=wens@csie.org \ --cc=wynter@nextthing.co \ /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.