All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Boyd <swboyd@chromium.org>
To: Douglas Anderson <dianders@chromium.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jani Nikula <jani.nikula@linux.intel.com>
Cc: Saravana Kannan <saravanak@google.com>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Daniel Vetter <daniel.vetter@ffwll.ch>,
	Russell King <rmk+kernel@arm.linux.org.uk>,
	freedreno@lists.freedesktop.org, Ingo Molnar <mingo@kernel.org>
Subject: Re: [PATCH v5 03/32] component: Move struct aggregate_device out to header file
Date: Fri, 7 Jan 2022 12:12:49 -0800	[thread overview]
Message-ID: <CAE-0n53yT2D7q7gXCPq19EGUqN8NRLYq9WUd=wPPR8JY9SSqoQ@mail.gmail.com> (raw)
In-Reply-To: <87pmp3lmmo.fsf@intel.com>

Quoting Jani Nikula (2022-01-07 05:07:59)
> On Thu, 06 Jan 2022, Stephen Boyd <swboyd@chromium.org> wrote:
> > This allows aggregate driver writers to use the device passed to their
> > probe/remove/shutdown functions properly instead of treating it as an
> > opaque pointer.
>
> You say it like having opaque pointers with interfaces instead of
> exposed data is a bad thing.

I didn't intend to convey that message at all and in fact I didn't write
that opaque pointers are a bad thing.

>
> Data is not an interface. IMO if you can get by with keeping the types
> private, go for it. Unless I'm missing something, you only need the
> parent dev pointer. Maybe add a helper function for it?

Sure I'll add a function for that.

>
> It's trivial to expose the guts like this, but it's usually a lot of
> hard work to go the other way. Look at the dependencies of component.h
> now. To keep it self-contained, i.e. buildable without implicit
> dependencies, you'd need to add #include <device.h>, which goes on to
> include the world. Then have a look at [1].
>
> Please at least let's not do this lightly.
>

Got it. Thanks! How does this look?

---8<---
diff --git a/drivers/base/component.c b/drivers/base/component.c
index cd50137753b4..e8f09945c261 100644
--- a/drivers/base/component.c
+++ b/drivers/base/component.c
@@ -56,6 +56,27 @@ struct component_match {
 	struct component_match_array *compare;
 };

+struct aggregate_device {
+	const struct component_master_ops *ops;
+	struct device *parent;
+	struct device dev;
+	struct component_match *match;
+	struct aggregate_driver *adrv;
+
+	int id;
+};
+
+static inline struct aggregate_device *to_aggregate_device(struct device *d)
+{
+	return container_of(d, struct aggregate_device, dev);
+}
+
+struct device *aggregate_device_parent(struct aggregate_device *adev)
+{
+	return adev->parent;
+}
+EXPORT_SYMBOL_GPL(aggregate_device_parent);
+
 struct component {
 	struct list_head node;
 	struct aggregate_device *adev;
diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
b/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
index 0463386a6ed2..5fa868cf9825 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_drv.c
@@ -27,7 +27,7 @@ struct komeda_dev *dev_to_mdev(struct device *dev)

 static void komeda_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct komeda_drv *mdrv = dev_get_drvdata(dev);

 	if (!mdrv)
@@ -48,7 +48,7 @@ static void komeda_unbind(struct aggregate_device *adev)

 static int komeda_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct komeda_drv *mdrv;
 	int err;

diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index 5c03eb98d814..e3ed925797d5 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -272,7 +272,7 @@ static const struct drm_driver hdlcd_driver = {

 static int hdlcd_drm_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm;
 	struct hdlcd_drm_private *hdlcd;
 	int ret;
@@ -347,7 +347,7 @@ static int hdlcd_drm_bind(struct aggregate_device *adev)

 static void hdlcd_drm_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);
 	struct hdlcd_drm_private *hdlcd = drm->dev_private;

diff --git a/drivers/gpu/drm/arm/malidp_drv.c b/drivers/gpu/drm/arm/malidp_drv.c
index e6ee4d1e3bb8..7b946b962b22 100644
--- a/drivers/gpu/drm/arm/malidp_drv.c
+++ b/drivers/gpu/drm/arm/malidp_drv.c
@@ -704,7 +704,7 @@ static int malidp_runtime_pm_resume(struct device *dev)

 static int malidp_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct resource *res;
 	struct drm_device *drm;
 	struct malidp_drm *malidp;
@@ -897,7 +897,7 @@ static int malidp_bind(struct aggregate_device *adev)

 static void malidp_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);
 	struct malidp_drm *malidp = drm->dev_private;
 	struct malidp_hw_device *hwdev = malidp->dev;
diff --git a/drivers/gpu/drm/armada/armada_drv.c
b/drivers/gpu/drm/armada/armada_drv.c
index b3559363ea43..27739cbe2291 100644
--- a/drivers/gpu/drm/armada/armada_drv.c
+++ b/drivers/gpu/drm/armada/armada_drv.c
@@ -62,7 +62,7 @@ static const struct drm_mode_config_funcs
armada_drm_mode_config_funcs = {

 static int armada_drm_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct armada_private *priv;
 	struct resource *mem = NULL;
 	int ret, n;
@@ -162,7 +162,7 @@ static int armada_drm_bind(struct aggregate_device *adev)

 static void armada_drm_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);
 	struct armada_private *priv = drm_to_armada_dev(drm);

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index 95d1e518ff13..2ea655fd7a70 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -496,7 +496,7 @@ static const struct drm_driver etnaviv_drm_driver = {
  */
 static int etnaviv_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct etnaviv_drm_private *priv;
 	struct drm_device *drm;
 	int ret;
@@ -555,7 +555,7 @@ static int etnaviv_bind(struct aggregate_device *adev)

 static void etnaviv_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);
 	struct etnaviv_drm_private *priv = drm->dev_private;

diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c
b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index dcb52ec2bd35..f58c3069b591 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -255,7 +255,7 @@ static struct component_match
*exynos_drm_match_add(struct device *dev)

 static int exynos_drm_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct exynos_drm_private *private;
 	struct drm_encoder *encoder;
 	struct drm_device *drm;
@@ -333,7 +333,7 @@ static int exynos_drm_bind(struct aggregate_device *adev)

 static void exynos_drm_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);

 	drm_dev_unregister(drm);
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index 00d47c784cbb..338077908177 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -219,7 +219,7 @@ static int kirin_drm_kms_cleanup(struct drm_device *dev)

 static int kirin_drm_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct kirin_drm_data *driver_data;
 	struct drm_device *drm_dev;
 	int ret;
@@ -256,7 +256,7 @@ static int kirin_drm_bind(struct aggregate_device *adev)

 static void kirin_drm_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm_dev = dev_get_drvdata(dev);

 	drm_dev_unregister(drm_dev);
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c
b/drivers/gpu/drm/imx/imx-drm-core.c
index 9e28bb16364c..82645e42b7d3 100644
--- a/drivers/gpu/drm/imx/imx-drm-core.c
+++ b/drivers/gpu/drm/imx/imx-drm-core.c
@@ -198,7 +198,7 @@ static int compare_of(struct device *dev, void *data)

 static int imx_drm_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm;
 	int ret;

@@ -267,7 +267,7 @@ static int imx_drm_bind(struct aggregate_device *adev)

 static void imx_drm_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);

 	drm_dev_unregister(drm);
diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
index d5330fb486e8..db61efc35b2d 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
@@ -1152,7 +1152,7 @@ static int ingenic_drm_bind(struct device *dev,
bool has_components)

 static int ingenic_drm_bind_with_components(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);

 	return ingenic_drm_bind(dev, true);
 }
@@ -1178,7 +1178,7 @@ static void ingenic_drm_unbind(struct device *dev)

 static void ingenic_aggregate_remove(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);

 	ingenic_drm_unbind(dev);
 }
diff --git a/drivers/gpu/drm/mcde/mcde_drv.c b/drivers/gpu/drm/mcde/mcde_drv.c
index 1652f9e0601d..b8479355844e 100644
--- a/drivers/gpu/drm/mcde/mcde_drv.c
+++ b/drivers/gpu/drm/mcde/mcde_drv.c
@@ -217,7 +217,7 @@ static const struct drm_driver mcde_drm_driver = {

 static int mcde_drm_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);
 	int ret;

@@ -250,7 +250,7 @@ static int mcde_drm_bind(struct aggregate_device *adev)

 static void mcde_drm_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);

 	drm_dev_unregister(drm);
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
index a3f27b8c9769..af0dda5e45bf 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c
@@ -350,7 +350,7 @@ static int compare_of(struct device *dev, void *data)

 static int mtk_drm_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct mtk_drm_private *private = dev_get_drvdata(dev);
 	struct drm_device *drm;
 	int ret;
@@ -383,7 +383,7 @@ static int mtk_drm_bind(struct aggregate_device *adev)

 static void mtk_drm_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct mtk_drm_private *private = dev_get_drvdata(dev);

 	drm_dev_unregister(private->drm);
diff --git a/drivers/gpu/drm/meson/meson_drv.c
b/drivers/gpu/drm/meson/meson_drv.c
index 3028f2a45f66..426caea3d570 100644
--- a/drivers/gpu/drm/meson/meson_drv.c
+++ b/drivers/gpu/drm/meson/meson_drv.c
@@ -358,14 +358,14 @@ static int meson_drv_bind_master(struct device
*dev, bool has_components)

 static int meson_drv_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);

 	return meson_drv_bind_master(dev, true);
 }

 static void meson_drv_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct meson_drm *priv = dev_get_drvdata(dev);
 	struct drm_device *drm = priv->drm;

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index f6e9b0d318f5..b2735355ea81 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -1362,17 +1362,19 @@ static int add_gpu_components(struct device *dev,

 static int msm_drm_bind(struct aggregate_device *adev)
 {
-	return msm_drm_init(adev->parent, &msm_driver);
+	return msm_drm_init(aggregate_device_parent(adev), &msm_driver);
 }

 static void msm_drm_unbind(struct aggregate_device *adev)
 {
-	msm_drm_uninit(adev->parent);
+	msm_drm_uninit(aggregate_device_parent(adev));
 }

 static void msm_drm_shutdown(struct aggregate_device *adev)
 {
-	struct drm_device *drm =
platform_get_drvdata(to_platform_device(adev->parent));
+	const struct device *parent = aggregate_device_parent(adev);
+	const struct platform_device *pdev = to_platform_device(parent);
+	struct drm_device *drm = platform_get_drvdata(pdev);
 	struct msm_drm_private *priv = drm ? drm->dev_private : NULL;

 	if (!priv || !priv->kms)
diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c
b/drivers/gpu/drm/omapdrm/dss/dss.c
index 9328d97f19ab..6226ef389694 100644
--- a/drivers/gpu/drm/omapdrm/dss/dss.c
+++ b/drivers/gpu/drm/omapdrm/dss/dss.c
@@ -1306,7 +1306,7 @@ static const struct soc_device_attribute
dss_soc_devices[] = {

 static int dss_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct dss_device *dss = dev_get_drvdata(dev);
 	struct platform_device *drm_pdev;
 	struct dss_pdata pdata;
@@ -1333,7 +1333,7 @@ static int dss_bind(struct aggregate_device *adev)

 static void dss_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct dss_device *dss = dev_get_drvdata(dev);

 	platform_device_unregister(dss->drm_pdev);
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index 6c755361d376..5179ca899dbb 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -111,7 +111,7 @@ static void rockchip_iommu_cleanup(struct
drm_device *drm_dev)

 static int rockchip_drm_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm_dev;
 	struct rockchip_drm_private *private;
 	int ret;
@@ -186,7 +186,7 @@ static int rockchip_drm_bind(struct aggregate_device *adev)

 static void rockchip_drm_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm_dev = dev_get_drvdata(dev);

 	drm_dev_unregister(drm_dev);
diff --git a/drivers/gpu/drm/sti/sti_drv.c b/drivers/gpu/drm/sti/sti_drv.c
index b277cc679154..958db315d547 100644
--- a/drivers/gpu/drm/sti/sti_drv.c
+++ b/drivers/gpu/drm/sti/sti_drv.c
@@ -184,7 +184,7 @@ static void sti_cleanup(struct drm_device *ddev)

 static int sti_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *ddev;
 	int ret;

@@ -219,7 +219,7 @@ static int sti_bind(struct aggregate_device *adev)

 static void sti_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *ddev = dev_get_drvdata(dev);

 	drm_dev_unregister(ddev);
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c
b/drivers/gpu/drm/sun4i/sun4i_drv.c
index 700f5e32eaf7..35c5e575132f 100644
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
@@ -58,7 +58,7 @@ static const struct drm_driver sun4i_drv_driver = {

 static int sun4i_drv_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm;
 	struct sun4i_drv *drv;
 	int ret;
@@ -128,7 +128,7 @@ static int sun4i_drv_bind(struct aggregate_device *adev)

 static void sun4i_drv_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);

 	drm_dev_unregister(drm);
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
index 92ff516fb6de..c12c579ce66f 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_drv.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_drv.c
@@ -531,14 +531,14 @@ static const struct dev_pm_ops tilcdc_pm_ops = {
  */
 static int tilcdc_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);

 	return tilcdc_init(&tilcdc_driver, dev);
 }

 static void tilcdc_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *ddev = dev_get_drvdata(dev);

 	/* Check if a subcomponent has already triggered the unloading. */
diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
index 82a44ebf9121..297ecddea5fb 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.c
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
@@ -214,7 +214,7 @@ static void vc4_match_add_drivers(struct device *dev,

 static int vc4_drm_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct platform_device *pdev = to_platform_device(dev);
 	struct drm_device *drm;
 	struct vc4_dev *vc4;
@@ -287,7 +287,7 @@ static int vc4_drm_bind(struct aggregate_device *adev)

 static void vc4_drm_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_device *drm = dev_get_drvdata(dev);

 	drm_dev_unregister(drm);
diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h
index 064fd4f4eade..125be5819c42 100644
--- a/drivers/iommu/mtk_iommu.h
+++ b/drivers/iommu/mtk_iommu.h
@@ -96,7 +96,7 @@ static inline void release_of(struct device *dev, void *data)

 static inline int mtk_iommu_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct mtk_iommu_data *data = dev_get_drvdata(dev);

 	return component_bind_all(dev, &data->larb_imu);
@@ -104,7 +104,7 @@ static inline int mtk_iommu_bind(struct
aggregate_device *adev)

 static inline void mtk_iommu_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct mtk_iommu_data *data = dev_get_drvdata(dev);

 	component_unbind_all(dev, &data->larb_imu);
diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index ae903a09fb06..3c6e4e3bf212 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -734,7 +734,7 @@ static const struct i915_hdcp_component_ops mei_hdcp_ops = {

 static int mei_hdcp_aggregate_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct mei_cl_device *cldev = to_mei_cl_device(dev);
 	struct i915_hdcp_comp_master *comp_master =
 						mei_cldev_get_drvdata(cldev);
@@ -752,7 +752,7 @@ static int mei_hdcp_aggregate_bind(struct
aggregate_device *adev)

 static void mei_hdcp_aggregate_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct mei_cl_device *cldev = to_mei_cl_device(dev);
 	struct i915_hdcp_comp_master *comp_master =
 						mei_cldev_get_drvdata(cldev);
diff --git a/drivers/misc/mei/pxp/mei_pxp.c b/drivers/misc/mei/pxp/mei_pxp.c
index 7b7bd7c0e8b1..887e43e6ba5f 100644
--- a/drivers/misc/mei/pxp/mei_pxp.c
+++ b/drivers/misc/mei/pxp/mei_pxp.c
@@ -85,7 +85,7 @@ static const struct i915_pxp_component_ops mei_pxp_ops = {

 static int mei_pxp_aggregate_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct mei_cl_device *cldev = to_mei_cl_device(dev);
 	struct i915_pxp_component *comp_master = mei_cldev_get_drvdata(cldev);
 	int ret;
@@ -101,7 +101,7 @@ static int mei_pxp_aggregate_bind(struct
aggregate_device *adev)

 static void mei_pxp_aggregate_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct mei_cl_device *cldev = to_mei_cl_device(dev);
 	struct i915_pxp_component *comp_master = mei_cldev_get_drvdata(cldev);

diff --git a/drivers/power/supply/ab8500_charger.c
b/drivers/power/supply/ab8500_charger.c
index 52d4105e28f2..e1e5c9387b57 100644
--- a/drivers/power/supply/ab8500_charger.c
+++ b/drivers/power/supply/ab8500_charger.c
@@ -3314,7 +3314,7 @@ static const struct power_supply_desc
ab8500_usb_chg_desc = {

 static int ab8500_charger_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct ab8500_charger *di = dev_get_drvdata(dev);
 	int ch_stat;
 	int ret;
@@ -3357,7 +3357,7 @@ static int ab8500_charger_bind(struct
aggregate_device *adev)

 static void ab8500_charger_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct ab8500_charger *di = dev_get_drvdata(dev);
 	int ret;

diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss.c
b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
index f12663c39ceb..0bdb9f909992 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/dss.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
@@ -1069,7 +1069,7 @@ static int dss_video_pll_probe(struct
platform_device *pdev)
 /* DSS HW IP initialisation */
 static int dss_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct platform_device *pdev = to_platform_device(dev);
 	struct resource *dss_mem;
 	u32 rev;
@@ -1170,7 +1170,7 @@ static int dss_bind(struct aggregate_device *adev)

 static void dss_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct platform_device *pdev = to_platform_device(dev);

 	dss_initialized = false;
diff --git a/include/linux/component.h b/include/linux/component.h
index 07fe481d4e3b..7c86f4cc718e 100644
--- a/include/linux/component.h
+++ b/include/linux/component.h
@@ -8,6 +8,8 @@
 struct component_match;
 struct aggregate_device;

+struct device *aggregate_device_parent(struct aggregate_device *adev);
+
 /**
  * struct component_ops - callbacks for component drivers
  *
@@ -63,20 +65,6 @@ void component_del(struct device *, const struct
component_ops *);
 int component_bind_all(struct device *master, void *master_data);
 void component_unbind_all(struct device *master, void *master_data);

-struct aggregate_device {
-	struct device *parent;
-	struct device dev;
-	struct component_match *match;
-	struct aggregate_driver *adrv;
-
-	int id;
-};
-
-static inline struct aggregate_device *to_aggregate_device(struct device *d)
-{
-	return container_of(d, struct aggregate_device, dev);
-}
-
 /**
  * struct aggregate_driver - Aggregate driver (made up of other drivers)
  * @driver: device driver
diff --git a/sound/hda/hdac_component.c b/sound/hda/hdac_component.c
index 9e4dab97f485..4ec5d9bf8533 100644
--- a/sound/hda/hdac_component.c
+++ b/sound/hda/hdac_component.c
@@ -183,7 +183,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_acomp_get_eld);

 static int hdac_component_master_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_audio_component *acomp = hdac_get_acomp(dev);
 	int ret;

@@ -225,7 +225,7 @@ static int hdac_component_master_bind(struct
aggregate_device *adev)

 static void hdac_component_master_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct drm_audio_component *acomp = hdac_get_acomp(dev);

 	if (acomp->audio_ops && acomp->audio_ops->master_unbind)
diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c
index f44f5d41bfdb..6edb040d0639 100644
--- a/sound/soc/codecs/wcd938x.c
+++ b/sound/soc/codecs/wcd938x.c
@@ -4318,7 +4318,7 @@ static struct snd_soc_dai_driver wcd938x_dais[] = {

 static int wcd938x_bind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct wcd938x_priv *wcd938x = dev_get_drvdata(dev);
 	int ret;

@@ -4403,7 +4403,7 @@ static int wcd938x_bind(struct aggregate_device *adev)

 static void wcd938x_unbind(struct aggregate_device *adev)
 {
-	struct device *dev = adev->parent;
+	struct device *dev = aggregate_device_parent(adev);
 	struct wcd938x_priv *wcd938x = dev_get_drvdata(dev);

 	device_link_remove(dev, wcd938x->txdev);

  reply	other threads:[~2022-01-07 20:12 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-06 21:45 [PATCH v5 00/32] component: Make into an aggregate bus Stephen Boyd
2022-01-06 21:45 ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 01/32] component: Replace most references to 'master' with 'aggregate device' Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 02/32] component: Introduce the aggregate bus_type Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 03/32] component: Move struct aggregate_device out to header file Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-07 13:07   ` Jani Nikula
2022-01-07 20:12     ` Stephen Boyd [this message]
2022-01-10 11:23       ` Jani Nikula
2022-01-06 21:45 ` [PATCH v5 04/32] component: Add {bind, unbind}_component() ops that take aggregate device Stephen Boyd
2022-01-06 21:45   ` [PATCH v5 04/32] component: Add {bind,unbind}_component() " Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 05/32] drm/of: Add a drm_of_aggregate_probe() API Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 06/32] drm/msm: Migrate to aggregate driver Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 07/32] drm/komeda: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 08/32] drm/arm/hdlcd: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 09/32] drm/malidp: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 10/32] drm/armada: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 11/32] drm/etnaviv: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 12/32] drm/kirin: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 13/32] drm/exynos: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 14/32] drm/imx: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 15/32] drm/ingenic: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 16/32] drm/mcde: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 17/32] drm/mediatek: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 18/32] drm/meson: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 19/32] drm/omap: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 20/32] drm/rockchip: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 21/32] drm/sti: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 22/32] drm/sun4i: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 23/32] drm/tilcdc: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 24/32] drm/vc4: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 25/32] iommu/mtk: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-11 12:22   ` Yong Wu
2022-01-11 12:22     ` Yong Wu
2022-01-11 12:22     ` Yong Wu
2022-01-12  0:27     ` Stephen Boyd
2022-01-12  0:27       ` Stephen Boyd
2022-01-12  0:27       ` Stephen Boyd
2022-01-12  9:09       ` Yong Wu
2022-01-12  9:09         ` Yong Wu
2022-01-12  9:09         ` Yong Wu
2022-01-12  9:09         ` Yong Wu
2022-01-13  4:25         ` Stephen Boyd
2022-01-13  4:25           ` Stephen Boyd
2022-01-13  4:25           ` Stephen Boyd
2022-01-13  4:25           ` Stephen Boyd
2022-01-14  9:06           ` Yong Wu
2022-01-14  9:06             ` Yong Wu
2022-01-14  9:06             ` Yong Wu
2022-01-14  9:06             ` Yong Wu
2022-01-14 21:30             ` Stephen Boyd
2022-01-14 21:30               ` Stephen Boyd
2022-01-14 21:30               ` Stephen Boyd
2022-01-14 21:30               ` Stephen Boyd
2022-01-15  7:39               ` Yong Wu
2022-01-15  7:39                 ` Yong Wu
2022-01-15  7:39                 ` Yong Wu
2022-01-15  7:39                 ` Yong Wu
2022-01-15  7:50                 ` Stephen Boyd
2022-01-15  7:50                   ` Stephen Boyd
2022-01-15  7:50                   ` Stephen Boyd
2022-01-15  7:50                   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 26/32] mei: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 27/32] power: supply: ab8500: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 28/32] fbdev: omap2: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 29/32] sound: hdac: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 30/32] ASoC: codecs: wcd938x: " Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 31/32] component: Get rid of drm_of_component_probe() Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd
2022-01-06 21:45 ` [PATCH v5 32/32] component: Remove component_master_ops and friends Stephen Boyd
2022-01-06 21:45   ` Stephen Boyd

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='CAE-0n53yT2D7q7gXCPq19EGUqN8NRLYq9WUd=wPPR8JY9SSqoQ@mail.gmail.com' \
    --to=swboyd@chromium.org \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dianders@chromium.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=freedreno@lists.freedesktop.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jani.nikula@linux.intel.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=rafael@kernel.org \
    --cc=rmk+kernel@arm.linux.org.uk \
    --cc=saravanak@google.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: link
Be 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.