On Mon, Oct 28, 2013 at 9:35 AM, Inki Dae <inki.dae at samsung.com> wrote: > This patch makes callback funtions of each sub driver to be called > with device object instead of display and manager. > > Exynos drm framework doesn't need to pass a manager or a display > when calling callback function of each sub driver, and each sub > driver can get its own context from device object. So this patch > hides sub driver's context from framework. >
Inki, The reason I don't like this patch is that it moves us further away from a flat drm driver. When I originally wrote the code for these hooks to accept exynos_drm_manager/exynos_drm_display, it's because they convert almost 1:1 to drm_crtc/drm_[encoder|connector]. The drm_crtc_funcs/drm_encoder_funcs/drm_connector_funcs all take drm_crtc/drm_encoder/drm_connector directly, not a device pointer. Another benefit of keeping it as-is is that the managers and displays need not necessarily be their own device drivers, they could easily be something like ptn3460 where they just hang off the root drm driver. Sean > Signed-off-by: Inki Dae <inki.dae at samsung.com> > Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com> > --- > drivers/gpu/drm/exynos/exynos_drm_connector.c | 10 +-- > drivers/gpu/drm/exynos/exynos_drm_core.c | 8 +- > drivers/gpu/drm/exynos/exynos_drm_crtc.c | 23 ++--- > drivers/gpu/drm/exynos/exynos_drm_drv.h | 62 +++++++------- > drivers/gpu/drm/exynos/exynos_drm_encoder.c | 10 +-- > drivers/gpu/drm/exynos/exynos_drm_fimd.c | 114 > ++++++++++++------------- > drivers/gpu/drm/exynos/exynos_hdmi.c | 64 +++++++------- > drivers/gpu/drm/exynos/exynos_mixer.c | 70 +++++++-------- > 8 files changed, 177 insertions(+), 184 deletions(-) > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_connector.c > b/drivers/gpu/drm/exynos/exynos_drm_connector.c > index 9a16dbe..d13f637 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_connector.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_connector.c > @@ -46,7 +46,7 @@ static int exynos_drm_connector_get_modes(struct > drm_connector *connector) > * because lcd panel has only one mode. > */ > if (display->ops->get_edid) { > - edid = display->ops->get_edid(display, connector); > + edid = display->ops->get_edid(display->dev, connector); > if (IS_ERR_OR_NULL(edid)) { > ret = PTR_ERR(edid); > edid = NULL; > @@ -70,7 +70,7 @@ static int exynos_drm_connector_get_modes(struct > drm_connector *connector) > } > > if (display->ops->get_panel) > - panel = display->ops->get_panel(display); > + panel = display->ops->get_panel(display->dev); > else { > drm_mode_destroy(connector->dev, mode); > return 0; > @@ -105,7 +105,7 @@ static int exynos_drm_connector_mode_valid(struct > drm_connector *connector, > DRM_DEBUG_KMS("%s\n", __FILE__); > > if (display->ops->check_mode) > - if (!display->ops->check_mode(display, mode)) > + if (!display->ops->check_mode(display->dev, mode)) > ret = MODE_OK; > > return ret; > @@ -155,7 +155,7 @@ static int exynos_drm_connector_fill_modes(struct > drm_connector *connector, > * resolution then get max width and height from that driver. > */ > if (display->ops->get_max_resol) > - display->ops->get_max_resol(display, &width, &height); > + display->ops->get_max_resol(display->dev, &width, &height); > > return drm_helper_probe_single_connector_modes(connector, width, > height); > @@ -171,7 +171,7 @@ exynos_drm_connector_detect(struct drm_connector > *connector, bool force) > enum drm_connector_status status = connector_status_disconnected; > > if (display->ops->is_connected) { > - if (display->ops->is_connected(display)) > + if (display->ops->is_connected(display->dev)) > status = connector_status_connected; > else > status = connector_status_disconnected; > diff --git a/drivers/gpu/drm/exynos/exynos_drm_core.c > b/drivers/gpu/drm/exynos/exynos_drm_core.c > index 0e11754..d59691d 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_core.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_core.c > @@ -103,7 +103,7 @@ int exynos_drm_initialize_managers(struct drm_device *dev) > > list_for_each_entry(manager, &exynos_drm_manager_list, list) { > if (manager->ops->initialize) { > - ret = manager->ops->initialize(manager, dev, pipe); > + ret = manager->ops->initialize(manager->dev, dev, > pipe); > if (ret) { > DRM_ERROR("Mgr init [%d] failed with %d\n", > manager->type, ret); > @@ -148,7 +148,7 @@ int exynos_drm_initialize_displays(struct drm_device *dev) > > list_for_each_entry(display, &exynos_drm_display_list, list) { > if (display->ops->initialize) { > - ret = display->ops->initialize(display, dev); > + ret = display->ops->initialize(display->dev, dev); > if (ret) { > DRM_ERROR("Display init [%d] failed with > %d\n", > display->type, ret); > @@ -233,7 +233,7 @@ int exynos_drm_manager_register(struct exynos_drm_manager > *manager) > int exynos_drm_manager_unregister(struct exynos_drm_manager *manager) > { > if (manager->ops->remove) > - manager->ops->remove(manager); > + manager->ops->remove(manager->dev); > > list_del(&manager->list); > return 0; > @@ -249,7 +249,7 @@ int exynos_drm_display_register(struct exynos_drm_display > *display) > int exynos_drm_display_unregister(struct exynos_drm_display *display) > { > if (display->ops->remove) > - display->ops->remove(display); > + display->ops->remove(display->dev); > > list_del(&display->list); > return 0; > diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c > b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > index 100a561..f2f232e 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c > @@ -75,7 +75,7 @@ static void exynos_drm_crtc_dpms(struct drm_crtc *crtc, int > mode) > } > > if (manager->ops->dpms) > - manager->ops->dpms(manager, mode); > + manager->ops->dpms(manager->dev, mode); > > exynos_crtc->dpms = mode; > } > @@ -95,7 +95,7 @@ static void exynos_drm_crtc_commit(struct drm_crtc *crtc) > exynos_plane_commit(exynos_crtc->plane); > > if (manager->ops->commit) > - manager->ops->commit(manager); > + manager->ops->commit(manager->dev); > > exynos_plane_dpms(exynos_crtc->plane, DRM_MODE_DPMS_ON); > } > @@ -109,7 +109,8 @@ exynos_drm_crtc_mode_fixup(struct drm_crtc *crtc, > struct exynos_drm_manager *manager = exynos_crtc->manager; > > if (manager->ops->mode_fixup) > - return manager->ops->mode_fixup(manager, mode, adjusted_mode); > + return manager->ops->mode_fixup(manager->dev, mode, > + adjusted_mode); > > return true; > } > @@ -136,7 +137,7 @@ exynos_drm_crtc_mode_set(struct drm_crtc *crtc, struct > drm_display_mode *mode, > crtc_h = crtc->fb->height - y; > > if (manager->ops->mode_set) > - manager->ops->mode_set(manager, &crtc->mode); > + manager->ops->mode_set(manager->dev, &crtc->mode); > > ret = exynos_plane_mode_set(plane, crtc, crtc->fb, 0, 0, crtc_w, > crtc_h, > x, y, crtc_w, crtc_h); > @@ -390,7 +391,7 @@ int exynos_drm_crtc_enable_vblank(struct drm_device *dev, > int pipe) > return -EPERM; > > if (manager->ops->enable_vblank) > - manager->ops->enable_vblank(manager); > + manager->ops->enable_vblank(manager->dev); > > return 0; > } > @@ -406,7 +407,7 @@ void exynos_drm_crtc_disable_vblank(struct drm_device > *dev, int pipe) > return; > > if (manager->ops->disable_vblank) > - manager->ops->disable_vblank(manager); > + manager->ops->disable_vblank(manager->dev); > } > > void exynos_drm_crtc_finish_pageflip(struct drm_device *dev, int pipe) > @@ -441,7 +442,7 @@ void exynos_drm_crtc_plane_mode_set(struct drm_crtc *crtc, > struct exynos_drm_manager *manager = to_exynos_crtc(crtc)->manager; > > if (manager->ops->win_mode_set) > - manager->ops->win_mode_set(manager, overlay); > + manager->ops->win_mode_set(manager->dev, overlay); > } > > void exynos_drm_crtc_plane_commit(struct drm_crtc *crtc, int zpos) > @@ -449,7 +450,7 @@ void exynos_drm_crtc_plane_commit(struct drm_crtc *crtc, > int zpos) > struct exynos_drm_manager *manager = to_exynos_crtc(crtc)->manager; > > if (manager->ops->win_commit) > - manager->ops->win_commit(manager, zpos); > + manager->ops->win_commit(manager->dev, zpos); > } > > void exynos_drm_crtc_plane_enable(struct drm_crtc *crtc, int zpos) > @@ -457,7 +458,7 @@ void exynos_drm_crtc_plane_enable(struct drm_crtc *crtc, > int zpos) > struct exynos_drm_manager *manager = to_exynos_crtc(crtc)->manager; > > if (manager->ops->win_enable) > - manager->ops->win_enable(manager, zpos); > + manager->ops->win_enable(manager->dev, zpos); > } > > void exynos_drm_crtc_plane_disable(struct drm_crtc *crtc, int zpos) > @@ -465,7 +466,7 @@ void exynos_drm_crtc_plane_disable(struct drm_crtc *crtc, > int zpos) > struct exynos_drm_manager *manager = to_exynos_crtc(crtc)->manager; > > if (manager->ops->win_disable) > - manager->ops->win_disable(manager, zpos); > + manager->ops->win_disable(manager->dev, zpos); > } > > void exynos_drm_crtc_complete_scanout(struct drm_framebuffer *fb) > @@ -487,6 +488,6 @@ void exynos_drm_crtc_complete_scanout(struct > drm_framebuffer *fb) > * real hardware. > */ > if (manager->ops->wait_for_vblank) > - manager->ops->wait_for_vblank(manager); > + manager->ops->wait_for_vblank(manager->dev); > } > } > diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h > b/drivers/gpu/drm/exynos/exynos_drm_drv.h > index 97bdfcc..d92c9f9 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_drv.h > +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h > @@ -137,26 +137,22 @@ struct exynos_drm_overlay { > */ > struct exynos_drm_display; > struct exynos_drm_display_ops { > - int (*initialize)(struct exynos_drm_display *display, > + int (*initialize)(struct device *dev, > struct drm_device *drm_dev); > - void (*remove)(struct exynos_drm_display *display); > - bool (*is_connected)(struct exynos_drm_display *display); > - void (*get_max_resol)(struct exynos_drm_display *display, > - unsigned int *width, > + void (*remove)(struct device *dev); > + bool (*is_connected)(struct device *dev); > + void (*get_max_resol)(struct device *dev, unsigned int *width, > unsigned int *height); > - struct edid *(*get_edid)(struct exynos_drm_display *display, > + struct edid *(*get_edid)(struct device *dev, > struct drm_connector *connector); > - void *(*get_panel)(struct exynos_drm_display *display); > - void (*mode_fixup)(struct exynos_drm_display *display, > - struct drm_connector *connector, > + void *(*get_panel)(struct device *dev); > + void (*mode_fixup)(struct device *dev, struct drm_connector > *connector, > const struct drm_display_mode *mode, > struct drm_display_mode *adjusted_mode); > - void (*mode_set)(struct exynos_drm_display *display, > - struct drm_display_mode *mode); > - int (*check_mode)(struct exynos_drm_display *display, > - struct drm_display_mode *mode); > - void (*dpms)(struct exynos_drm_display *display, int mode); > - void (*commit)(struct exynos_drm_display *display); > + void (*mode_set)(struct device *dev, struct drm_display_mode *mode); > + int (*check_mode)(struct device *dev, struct drm_display_mode *mode); > + void (*dpms)(struct device *dev, int mode); > + void (*commit)(struct device *dev); > }; > > /* > @@ -167,7 +163,7 @@ struct exynos_drm_display_ops { > * @encoder: encoder object this display maps to > * @connector: connector object this display maps to > * @ops: pointer to callbacks for exynos drm specific functionality > - * @ctx: A pointer to the display's implementation specific context > + * @dev: device object of display device driver > */ > struct exynos_drm_display { > struct list_head list; > @@ -175,7 +171,7 @@ struct exynos_drm_display { > struct drm_encoder *encoder; > struct drm_connector *connector; > struct exynos_drm_display_ops *ops; > - void *ctx; > + struct device *dev; > }; > > /* > @@ -198,24 +194,24 @@ struct exynos_drm_display { > */ > struct exynos_drm_manager; > struct exynos_drm_manager_ops { > - int (*initialize)(struct exynos_drm_manager *mgr, > - struct drm_device *drm_dev, int pipe); > - void (*remove)(struct exynos_drm_manager *mgr); > - void (*dpms)(struct exynos_drm_manager *mgr, int mode); > - bool (*mode_fixup)(struct exynos_drm_manager *mgr, > + int (*initialize)(struct device *dev, struct drm_device *drm_dev, > + int pipe); > + void (*remove)(struct device *dev); > + void (*dpms)(struct device *dev, int mode); > + bool (*mode_fixup)(struct device *dev, > const struct drm_display_mode *mode, > struct drm_display_mode *adjusted_mode); > - void (*mode_set)(struct exynos_drm_manager *mgr, > + void (*mode_set)(struct device *dev, > const struct drm_display_mode *mode); > - void (*commit)(struct exynos_drm_manager *mgr); > - int (*enable_vblank)(struct exynos_drm_manager *mgr); > - void (*disable_vblank)(struct exynos_drm_manager *mgr); > - void (*wait_for_vblank)(struct exynos_drm_manager *mgr); > - void (*win_mode_set)(struct exynos_drm_manager *mgr, > + void (*commit)(struct device *dev); > + int (*enable_vblank)(struct device *dev); > + void (*disable_vblank)(struct device *dev); > + void (*wait_for_vblank)(struct device *dev); > + void (*win_mode_set)(struct device *dev, > struct exynos_drm_overlay *overlay); > - void (*win_commit)(struct exynos_drm_manager *mgr, int zpos); > - void (*win_enable)(struct exynos_drm_manager *mgr, int zpos); > - void (*win_disable)(struct exynos_drm_manager *mgr, int zpos); > + void (*win_commit)(struct device *dev, int zpos); > + void (*win_enable)(struct device *dev, int zpos); > + void (*win_disable)(struct device *dev, int zpos); > }; > > /* > @@ -226,7 +222,7 @@ struct exynos_drm_manager_ops { > * @drm_dev: pointer to the drm device > * @pipe: the pipe number for this crtc/manager > * @ops: pointer to callbacks for exynos drm specific functionality > - * @ctx: A pointer to the manager's implementation specific context > + * @dev: device object of manager device driver > */ > struct exynos_drm_manager { > struct list_head list; > @@ -234,7 +230,7 @@ struct exynos_drm_manager { > struct drm_device *drm_dev; > int pipe; > struct exynos_drm_manager_ops *ops; > - void *ctx; > + struct device *dev; > }; > > struct exynos_drm_g2d_private { > diff --git a/drivers/gpu/drm/exynos/exynos_drm_encoder.c > b/drivers/gpu/drm/exynos/exynos_drm_encoder.c > index bfa2f17..5a7342c 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_encoder.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_encoder.c > @@ -41,7 +41,7 @@ static void exynos_drm_encoder_dpms(struct drm_encoder > *encoder, int mode) > DRM_DEBUG_KMS("encoder dpms: %d\n", mode); > > if (display->ops->dpms) > - display->ops->dpms(display, mode); > + display->ops->dpms(display->dev, mode); > } > > static bool > @@ -59,7 +59,7 @@ exynos_drm_encoder_mode_fixup(struct drm_encoder *encoder, > continue; > > if (display->ops->mode_fixup) > - display->ops->mode_fixup(display, connector, mode, > + display->ops->mode_fixup(display->dev, connector, > mode, > adjusted_mode); > } > > @@ -74,7 +74,7 @@ static void exynos_drm_encoder_mode_set(struct drm_encoder > *encoder, > struct exynos_drm_display *display = exynos_encoder->display; > > if (display->ops->mode_set) > - display->ops->mode_set(display, adjusted_mode); > + display->ops->mode_set(display->dev, adjusted_mode); > } > > static void exynos_drm_encoder_prepare(struct drm_encoder *encoder) > @@ -88,10 +88,10 @@ static void exynos_drm_encoder_commit(struct drm_encoder > *encoder) > struct exynos_drm_display *display = exynos_encoder->display; > > if (display->ops->dpms) > - display->ops->dpms(display, DRM_MODE_DPMS_ON); > + display->ops->dpms(display->dev, DRM_MODE_DPMS_ON); > > if (display->ops->commit) > - display->ops->commit(display); > + display->ops->commit(display->dev); > } > > static void exynos_drm_encoder_disable(struct drm_encoder *encoder) > diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > index 03657b2..384e53b 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c > @@ -62,7 +62,7 @@ > /* FIMD has totally five hardware windows. */ > #define WINDOWS_NR 5 > > -#define get_fimd_manager(mgr) platform_get_drvdata(to_platform_device(dev)) > +#define get_fimd_context(dev) platform_get_drvdata(to_platform_device(dev)) > > struct fimd_driver_data { > unsigned int timing_base; > @@ -158,22 +158,21 @@ static inline struct fimd_driver_data > *drm_fimd_get_driver_data( > return (struct fimd_driver_data *)of_id->data; > } > > -static bool fimd_display_is_connected(struct exynos_drm_display *display) > +static bool fimd_display_is_connected(struct device *dev) > { > /* TODO. */ > > return true; > } > > -static void *fimd_get_panel(struct exynos_drm_display *display) > +static void *fimd_get_panel(struct device *dev) > { > - struct fimd_context *ctx = display->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > > return &ctx->panel; > } > > -static int fimd_check_mode(struct exynos_drm_display *display, > - struct drm_display_mode *mode) > +static int fimd_check_mode(struct device *dev, struct drm_display_mode *mode) > { > /* TODO. */ > > @@ -191,10 +190,10 @@ static struct exynos_drm_display fimd_display = { > .ops = &fimd_display_ops, > }; > > -static void fimd_win_mode_set(struct exynos_drm_manager *mgr, > - struct exynos_drm_overlay *overlay) > +static void fimd_win_mode_set(struct device *dev, > + struct exynos_drm_overlay *overlay) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > struct fimd_win_data *win_data; > int win; > unsigned long offset; > @@ -337,9 +336,9 @@ static void fimd_shadow_protect_win(struct fimd_context > *ctx, > writel(val, ctx->regs + reg); > } > > -static void fimd_win_commit(struct exynos_drm_manager *mgr, int zpos) > +static void fimd_win_commit(struct device *dev, int zpos) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > struct fimd_win_data *win_data; > int win = zpos; > unsigned long val, alpha, size; > @@ -463,9 +462,9 @@ static void fimd_win_commit(struct exynos_drm_manager > *mgr, int zpos) > win_data->enabled = true; > } > > -static void fimd_win_disable(struct exynos_drm_manager *mgr, int zpos) > +static void fimd_win_disable(struct device *dev, int zpos) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > struct fimd_win_data *win_data; > int win = zpos; > u32 val; > @@ -504,10 +503,10 @@ static void fimd_win_disable(struct exynos_drm_manager > *mgr, int zpos) > win_data->enabled = false; > } > > -static int fimd_mgr_initialize(struct exynos_drm_manager *mgr, > - struct drm_device *drm_dev, int pipe) > +static int fimd_mgr_initialize(struct device *dev, struct drm_device > *drm_dev, > + int pipe) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > > ctx->drm_dev = drm_dev; > ctx->pipe = pipe; > @@ -536,9 +535,9 @@ static int fimd_mgr_initialize(struct exynos_drm_manager > *mgr, > return 0; > } > > -static void fimd_mgr_remove(struct exynos_drm_manager *mgr) > +static void fimd_mgr_remove(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > > if (is_drm_iommu_supported(ctx->drm_dev)) > drm_iommu_detach_device(ctx->drm_dev, ctx->dev); > @@ -556,9 +555,9 @@ static u32 fimd_calc_clkdiv(struct fimd_context *ctx, > return (clkdiv < 0x100) ? clkdiv : 0xff; > } > > -static bool fimd_mode_fixup(struct exynos_drm_manager *mgr, > - const struct drm_display_mode *mode, > - struct drm_display_mode *adjusted_mode) > +static bool fimd_mode_fixup(struct device *dev, > + const struct drm_display_mode *mode, > + struct drm_display_mode *adjusted_mode) > { > if (adjusted_mode->vrefresh == 0) > adjusted_mode->vrefresh = FIMD_DEFAULT_FRAMERATE; > @@ -566,10 +565,10 @@ static bool fimd_mode_fixup(struct exynos_drm_manager > *mgr, > return true; > } > > -static void fimd_mode_set(struct exynos_drm_manager *mgr, > +static void fimd_mode_set(struct device *dev, > const struct drm_display_mode *in_mode) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > struct fimd_mode_data *mode = &ctx->mode; > int hblank, vblank; > > @@ -590,9 +589,9 @@ static void fimd_mode_set(struct exynos_drm_manager *mgr, > mode->clkdiv = fimd_calc_clkdiv(ctx, in_mode); > } > > -static void fimd_commit(struct exynos_drm_manager *mgr) > +static void fimd_commit(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > struct fimd_mode_data *mode = &ctx->mode; > struct fimd_driver_data *driver_data; > u32 val; > @@ -649,24 +648,24 @@ static void fimd_commit(struct exynos_drm_manager *mgr) > writel(val, ctx->regs + VIDCON0); > } > > -static void fimd_apply(struct exynos_drm_manager *mgr) > +static void fimd_apply(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > struct fimd_win_data *win_data; > int i; > > for (i = 0; i < WINDOWS_NR; i++) { > win_data = &ctx->win_data[i]; > if (win_data->enabled) > - fimd_win_commit(mgr, i); > + fimd_win_commit(dev, i); > } > > - fimd_commit(mgr); > + fimd_commit(dev); > } > > -static int fimd_enable_vblank(struct exynos_drm_manager *mgr) > +static int fimd_enable_vblank(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > u32 val; > > if (ctx->suspended) > @@ -689,9 +688,9 @@ static int fimd_enable_vblank(struct exynos_drm_manager > *mgr) > return 0; > } > > -static void fimd_disable_vblank(struct exynos_drm_manager *mgr) > +static void fimd_disable_vblank(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > u32 val; > > if (ctx->suspended) > @@ -707,9 +706,9 @@ static void fimd_disable_vblank(struct exynos_drm_manager > *mgr) > } > } > > -static void fimd_wait_for_vblank(struct exynos_drm_manager *mgr) > +static void fimd_wait_for_vblank(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > > if (ctx->suspended) > return; > @@ -726,9 +725,9 @@ static void fimd_wait_for_vblank(struct > exynos_drm_manager *mgr) > DRM_DEBUG_KMS("vblank wait timed out.\n"); > } > > -static void fimd_window_suspend(struct exynos_drm_manager *mgr) > +static void fimd_window_suspend(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > struct fimd_win_data *win_data; > int i; > > @@ -736,14 +735,14 @@ static void fimd_window_suspend(struct > exynos_drm_manager *mgr) > win_data = &ctx->win_data[i]; > win_data->resume = win_data->enabled; > if (win_data->enabled) > - fimd_win_disable(mgr, i); > + fimd_win_disable(dev, i); > } > - fimd_wait_for_vblank(mgr); > + fimd_wait_for_vblank(dev); > } > > -static void fimd_window_resume(struct exynos_drm_manager *mgr) > +static void fimd_window_resume(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > struct fimd_win_data *win_data; > int i; > > @@ -754,9 +753,9 @@ static void fimd_window_resume(struct exynos_drm_manager > *mgr) > } > } > > -static int fimd_poweron(struct exynos_drm_manager *mgr) > +static int fimd_poweron(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > int ret; > > if (!ctx->suspended) > @@ -780,16 +779,16 @@ static int fimd_poweron(struct exynos_drm_manager *mgr) > > /* if vblank was enabled status, enable it again. */ > if (test_and_clear_bit(0, &ctx->irq_flags)) { > - ret = fimd_enable_vblank(mgr); > + ret = fimd_enable_vblank(dev); > if (ret) { > DRM_ERROR("Failed to re-enable vblank [%d]\n", ret); > goto enable_vblank_err; > } > } > > - fimd_window_resume(mgr); > + fimd_window_resume(dev); > > - fimd_apply(mgr); > + fimd_apply(dev); > > return 0; > > @@ -802,9 +801,9 @@ bus_clk_err: > return ret; > } > > -static int fimd_poweroff(struct exynos_drm_manager *mgr) > +static int fimd_poweroff(struct device *dev) > { > - struct fimd_context *ctx = mgr->ctx; > + struct fimd_context *ctx = get_fimd_context(dev); > > if (ctx->suspended) > return 0; > @@ -814,7 +813,7 @@ static int fimd_poweroff(struct exynos_drm_manager *mgr) > * suspend that connector. Otherwise we might try to scan from > * a destroyed buffer later. > */ > - fimd_window_suspend(mgr); > + fimd_window_suspend(dev); > > clk_disable_unprepare(ctx->lcd_clk); > clk_disable_unprepare(ctx->bus_clk); > @@ -825,18 +824,18 @@ static int fimd_poweroff(struct exynos_drm_manager *mgr) > return 0; > } > > -static void fimd_dpms(struct exynos_drm_manager *mgr, int mode) > +static void fimd_dpms(struct device *dev, int mode) > { > DRM_DEBUG_KMS("%s, %d\n", __FILE__, mode); > > switch (mode) { > case DRM_MODE_DPMS_ON: > - fimd_poweron(mgr); > + fimd_poweron(dev); > break; > case DRM_MODE_DPMS_STANDBY: > case DRM_MODE_DPMS_SUSPEND: > case DRM_MODE_DPMS_OFF: > - fimd_poweroff(mgr); > + fimd_poweroff(dev); > break; > default: > DRM_DEBUG_KMS("unspecified mode %d\n", mode); > @@ -985,12 +984,12 @@ static int fimd_probe(struct platform_device *pdev) > DRM_INIT_WAITQUEUE(&ctx->wait_vsync_queue); > atomic_set(&ctx->wait_vsync_event, 0); > > - platform_set_drvdata(pdev, &fimd_manager); > + platform_set_drvdata(pdev, ctx); > > - fimd_manager.ctx = ctx; > + fimd_manager.dev = dev; > exynos_drm_manager_register(&fimd_manager); > > - fimd_display.ctx = ctx; > + fimd_display.dev = dev; > exynos_drm_display_register(&fimd_display); > > /* > @@ -1010,12 +1009,13 @@ static int fimd_probe(struct platform_device *pdev) > > static int fimd_remove(struct platform_device *pdev) > { > - struct exynos_drm_manager *mgr = platform_get_drvdata(pdev); > + struct device *dev = &pdev->dev; > + struct fimd_context *ctx = platform_get_drvdata(pdev); > > exynos_drm_display_unregister(&fimd_display); > exynos_drm_manager_unregister(&fimd_manager); > > - fimd_dpms(mgr, DRM_MODE_DPMS_OFF); > + fimd_dpms(dev, DRM_MODE_DPMS_OFF); > > pm_runtime_disable(&pdev->dev); > > diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c > b/drivers/gpu/drm/exynos/exynos_hdmi.c > index 130b109..32ce9a6 100644 > --- a/drivers/gpu/drm/exynos/exynos_hdmi.c > +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c > @@ -45,7 +45,7 @@ > > #define MAX_WIDTH 1920 > #define MAX_HEIGHT 1080 > -#define get_hdmi_display(dev) platform_get_drvdata(to_platform_device(dev)) > +#define get_hdmi_context(dev) platform_get_drvdata(to_platform_device(dev)) > > /* AVI header and aspect ratio */ > #define HDMI_AVI_VERSION 0x02 > @@ -739,28 +739,27 @@ static void hdmi_reg_infoframe(struct hdmi_context > *hdata, > } > } > > -static int hdmi_initialize(struct exynos_drm_display *display, > - struct drm_device *drm_dev) > +static int hdmi_initialize(struct device *dev, struct drm_device *drm_dev) > { > - struct hdmi_context *hdata = display->ctx; > + struct hdmi_context *hdata = get_hdmi_context(dev); > > hdata->drm_dev = drm_dev; > > return 0; > } > > -static bool hdmi_is_connected(struct exynos_drm_display *display) > +static bool hdmi_is_connected(struct device *dev) > { > - struct hdmi_context *hdata = display->ctx; > + struct hdmi_context *hdata = get_hdmi_context(dev); > > return hdata->hpd; > } > > -static struct edid *hdmi_get_edid(struct exynos_drm_display *display, > - struct drm_connector *connector) > +static struct edid *hdmi_get_edid(struct device *dev, > + struct drm_connector *connector) > { > struct edid *raw_edid; > - struct hdmi_context *hdata = display->ctx; > + struct hdmi_context *hdata = get_hdmi_context(dev); > > if (!hdata->ddc_port) > return ERR_PTR(-ENODEV); > @@ -799,10 +798,10 @@ static int hdmi_find_phy_conf(struct hdmi_context > *hdata, u32 pixel_clock) > return -EINVAL; > } > > -static int hdmi_check_mode(struct exynos_drm_display *display, > +static int hdmi_check_mode(struct device *dev, > struct drm_display_mode *mode) > { > - struct hdmi_context *hdata = display->ctx; > + struct hdmi_context *hdata = get_hdmi_context(dev); > int ret; > > DRM_DEBUG_KMS("xres=%d, yres=%d, refresh=%d, intl=%d clock=%d\n", > @@ -820,8 +819,7 @@ static int hdmi_check_mode(struct exynos_drm_display > *display, > return 0; > } > > -static void hdmi_mode_fixup(struct exynos_drm_display *display, > - struct drm_connector *connector, > +static void hdmi_mode_fixup(struct device *dev, struct drm_connector > *connector, > const struct drm_display_mode *mode, > struct drm_display_mode *adjusted_mode) > { > @@ -832,7 +830,7 @@ static void hdmi_mode_fixup(struct exynos_drm_display > *display, > > drm_mode_set_crtcinfo(adjusted_mode, 0); > > - mode_ok = hdmi_check_mode(display, adjusted_mode); > + mode_ok = hdmi_check_mode(dev, adjusted_mode); > > /* just return if user desired mode exists. */ > if (mode_ok == 0) > @@ -843,7 +841,7 @@ static void hdmi_mode_fixup(struct exynos_drm_display > *display, > * to adjusted_mode. > */ > list_for_each_entry(m, &connector->modes, head) { > - mode_ok = hdmi_check_mode(display, m); > + mode_ok = hdmi_check_mode(dev, m); > > if (mode_ok == 0) { > DRM_INFO("desired mode doesn't exist so\n"); > @@ -1683,10 +1681,9 @@ static void hdmi_v14_mode_set(struct hdmi_context > *hdata, > hdmi_set_reg(tg->tg_3d, 1, 0x0); > } > > -static void hdmi_mode_set(struct exynos_drm_display *display, > - struct drm_display_mode *mode) > +static void hdmi_mode_set(struct device *dev, struct drm_display_mode *mode) > { > - struct hdmi_context *hdata = display->ctx; > + struct hdmi_context *hdata = get_hdmi_context(dev); > struct drm_display_mode *m = mode; > > DRM_DEBUG_KMS("xres=%d, yres=%d, refresh=%d, intl=%s\n", > @@ -1700,16 +1697,16 @@ static void hdmi_mode_set(struct exynos_drm_display > *display, > hdmi_v14_mode_set(hdata, mode); > } > > -static void hdmi_get_max_resol(struct exynos_drm_display *display, > - unsigned int *width, unsigned int *height) > +static void hdmi_get_max_resol(struct device *dev, unsigned int *width, > + unsigned int *height) > { > *width = MAX_WIDTH; > *height = MAX_HEIGHT; > } > > -static void hdmi_commit(struct exynos_drm_display *display) > +static void hdmi_commit(struct device *dev) > { > - struct hdmi_context *hdata = display->ctx; > + struct hdmi_context *hdata = get_hdmi_context(dev); > > mutex_lock(&hdata->hdmi_mutex); > if (!hdata->powered) { > @@ -1721,9 +1718,9 @@ static void hdmi_commit(struct exynos_drm_display > *display) > hdmi_conf_apply(hdata); > } > > -static void hdmi_poweron(struct exynos_drm_display *display) > +static void hdmi_poweron(struct device *dev) > { > - struct hdmi_context *hdata = display->ctx; > + struct hdmi_context *hdata = get_hdmi_context(dev); > struct hdmi_resources *res = &hdata->res; > > mutex_lock(&hdata->hdmi_mutex); > @@ -1744,12 +1741,12 @@ static void hdmi_poweron(struct exynos_drm_display > *display) > clk_prepare_enable(res->sclk_hdmi); > > hdmiphy_poweron(hdata); > - hdmi_commit(display); > + hdmi_commit(dev); > } > > -static void hdmi_poweroff(struct exynos_drm_display *display) > +static void hdmi_poweroff(struct device *dev) > { > - struct hdmi_context *hdata = display->ctx; > + struct hdmi_context *hdata = get_hdmi_context(dev); > struct hdmi_resources *res = &hdata->res; > > mutex_lock(&hdata->hdmi_mutex); > @@ -1776,18 +1773,18 @@ out: > mutex_unlock(&hdata->hdmi_mutex); > } > > -static void hdmi_dpms(struct exynos_drm_display *display, int mode) > +static void hdmi_dpms(struct device *dev, int mode) > { > DRM_DEBUG_KMS("mode %d\n", mode); > > switch (mode) { > case DRM_MODE_DPMS_ON: > - hdmi_poweron(display); > + hdmi_poweron(dev); > break; > case DRM_MODE_DPMS_STANDBY: > case DRM_MODE_DPMS_SUSPEND: > case DRM_MODE_DPMS_OFF: > - hdmi_poweroff(display); > + hdmi_poweroff(dev); > break; > default: > DRM_DEBUG_KMS("unknown dpms mode: %d\n", mode); > @@ -1956,7 +1953,7 @@ static int hdmi_probe(struct platform_device *pdev) > > mutex_init(&hdata->hdmi_mutex); > > - platform_set_drvdata(pdev, &hdmi_display); > + platform_set_drvdata(pdev, hdata); > > match = of_match_node(hdmi_match_types, dev->of_node); > if (!match) > @@ -2027,7 +2024,7 @@ static int hdmi_probe(struct platform_device *pdev) > goto err_hdmiphy; > } > > - hdmi_display.ctx = hdata; > + hdmi_display.dev = dev; > exynos_drm_display_register(&hdmi_display); > > return 0; > @@ -2042,8 +2039,7 @@ err_ddc: > static int hdmi_remove(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > - struct exynos_drm_display *display = get_hdmi_display(dev); > - struct hdmi_context *hdata = display->ctx; > + struct hdmi_context *hdata = get_hdmi_context(dev); > > put_device(&hdata->hdmiphy_port->dev); > put_device(&hdata->ddc_port->dev); > diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c > b/drivers/gpu/drm/exynos/exynos_mixer.c > index 985391d..2e8c0e8 100644 > --- a/drivers/gpu/drm/exynos/exynos_mixer.c > +++ b/drivers/gpu/drm/exynos/exynos_mixer.c > @@ -39,7 +39,7 @@ > #include "exynos_drm_iommu.h" > #include "exynos_mixer.h" > > -#define get_mixer_manager(dev) platform_get_drvdata(to_platform_device(dev)) > +#define get_mixer_context(dev) platform_get_drvdata(to_platform_device(dev)) > > #define MIXER_WIN_NR 3 > #define MIXER_DEFAULT_WIN 0 > @@ -687,10 +687,10 @@ static void mixer_win_reset(struct mixer_context *ctx) > spin_unlock_irqrestore(&res->reg_slock, flags); > } > > -static int mixer_initialize(struct exynos_drm_manager *mgr, > - struct drm_device *drm_dev, int pipe) > +static int mixer_initialize(struct device *dev, struct drm_device *drm_dev, > + int pipe) > { > - struct mixer_context *mixer_ctx = mgr->ctx; > + struct mixer_context *mixer_ctx = get_mixer_context(dev); > > mixer_ctx->drm_dev = drm_dev; > mixer_ctx->pipe = pipe; > @@ -701,17 +701,17 @@ static int mixer_initialize(struct exynos_drm_manager > *mgr, > return drm_iommu_attach_device(mixer_ctx->drm_dev, mixer_ctx->dev); > } > > -static void mixer_mgr_remove(struct exynos_drm_manager *mgr) > +static void mixer_mgr_remove(struct device *dev) > { > - struct mixer_context *mixer_ctx = mgr->ctx; > + struct mixer_context *mixer_ctx = get_mixer_context(dev); > > if (is_drm_iommu_supported(mixer_ctx->drm_dev)) > drm_iommu_detach_device(mixer_ctx->drm_dev, mixer_ctx->dev); > } > > -static int mixer_enable_vblank(struct exynos_drm_manager *mgr) > +static int mixer_enable_vblank(struct device *dev) > { > - struct mixer_context *mixer_ctx = mgr->ctx; > + struct mixer_context *mixer_ctx = get_mixer_context(dev); > struct mixer_resources *res = &mixer_ctx->mixer_res; > > if (!mixer_ctx->powered) { > @@ -726,19 +726,19 @@ static int mixer_enable_vblank(struct > exynos_drm_manager *mgr) > return 0; > } > > -static void mixer_disable_vblank(struct exynos_drm_manager *mgr) > +static void mixer_disable_vblank(struct device *dev) > { > - struct mixer_context *mixer_ctx = mgr->ctx; > + struct mixer_context *mixer_ctx = get_mixer_context(dev); > struct mixer_resources *res = &mixer_ctx->mixer_res; > > /* disable vsync interrupt */ > mixer_reg_writemask(res, MXR_INT_EN, 0, MXR_INT_EN_VSYNC); > } > > -static void mixer_win_mode_set(struct exynos_drm_manager *mgr, > +static void mixer_win_mode_set(struct device *dev, > struct exynos_drm_overlay *overlay) > { > - struct mixer_context *mixer_ctx = mgr->ctx; > + struct mixer_context *mixer_ctx = get_mixer_context(dev); > struct hdmi_win_data *win_data; > int win; > > @@ -787,9 +787,9 @@ static void mixer_win_mode_set(struct exynos_drm_manager > *mgr, > win_data->scan_flags = overlay->scan_flag; > } > > -static void mixer_win_commit(struct exynos_drm_manager *mgr, int zpos) > +static void mixer_win_commit(struct device *dev, int zpos) > { > - struct mixer_context *mixer_ctx = mgr->ctx; > + struct mixer_context *mixer_ctx = get_mixer_context(dev); > int win = zpos == DEFAULT_ZPOS ? MIXER_DEFAULT_WIN : zpos; > > DRM_DEBUG_KMS("win: %d\n", win); > @@ -809,9 +809,9 @@ static void mixer_win_commit(struct exynos_drm_manager > *mgr, int zpos) > mixer_ctx->win_data[win].enabled = true; > } > > -static void mixer_win_disable(struct exynos_drm_manager *mgr, int zpos) > +static void mixer_win_disable(struct device *dev, int zpos) > { > - struct mixer_context *mixer_ctx = mgr->ctx; > + struct mixer_context *mixer_ctx = get_mixer_context(dev); > struct mixer_resources *res = &mixer_ctx->mixer_res; > int win = zpos == DEFAULT_ZPOS ? MIXER_DEFAULT_WIN : zpos; > unsigned long flags; > @@ -837,9 +837,9 @@ static void mixer_win_disable(struct exynos_drm_manager > *mgr, int zpos) > mixer_ctx->win_data[win].enabled = false; > } > > -static void mixer_wait_for_vblank(struct exynos_drm_manager *mgr) > +static void mixer_wait_for_vblank(struct device *dev) > { > - struct mixer_context *mixer_ctx = mgr->ctx; > + struct mixer_context *mixer_ctx = get_mixer_context(dev); > > mutex_lock(&mixer_ctx->mixer_mutex); > if (!mixer_ctx->powered) { > @@ -860,23 +860,23 @@ static void mixer_wait_for_vblank(struct > exynos_drm_manager *mgr) > DRM_DEBUG_KMS("vblank wait timed out.\n"); > } > > -static void mixer_window_suspend(struct exynos_drm_manager *mgr) > +static void mixer_window_suspend(struct device *dev) > { > - struct mixer_context *ctx = mgr->ctx; > + struct mixer_context *ctx = get_mixer_context(dev); > struct hdmi_win_data *win_data; > int i; > > for (i = 0; i < MIXER_WIN_NR; i++) { > win_data = &ctx->win_data[i]; > win_data->resume = win_data->enabled; > - mixer_win_disable(mgr, i); > + mixer_win_disable(dev, i); > } > - mixer_wait_for_vblank(mgr); > + mixer_wait_for_vblank(dev); > } > > -static void mixer_window_resume(struct exynos_drm_manager *mgr) > +static void mixer_window_resume(struct device *dev) > { > - struct mixer_context *ctx = mgr->ctx; > + struct mixer_context *ctx = get_mixer_context(dev); > struct hdmi_win_data *win_data; > int i; > > @@ -885,13 +885,13 @@ static void mixer_window_resume(struct > exynos_drm_manager *mgr) > win_data->enabled = win_data->resume; > win_data->resume = false; > if (win_data->enabled) > - mixer_win_commit(mgr, i); > + mixer_win_commit(dev, i); > } > } > > -static void mixer_poweron(struct exynos_drm_manager *mgr) > +static void mixer_poweron(struct device *dev) > { > - struct mixer_context *ctx = mgr->ctx; > + struct mixer_context *ctx = get_mixer_context(dev); > struct mixer_resources *res = &ctx->mixer_res; > > mutex_lock(&ctx->mixer_mutex); > @@ -913,12 +913,12 @@ static void mixer_poweron(struct exynos_drm_manager > *mgr) > mixer_reg_write(res, MXR_INT_EN, ctx->int_en); > mixer_win_reset(ctx); > > - mixer_window_resume(mgr); > + mixer_window_resume(dev); > } > > -static void mixer_poweroff(struct exynos_drm_manager *mgr) > +static void mixer_poweroff(struct device *dev) > { > - struct mixer_context *ctx = mgr->ctx; > + struct mixer_context *ctx = get_mixer_context(dev); > struct mixer_resources *res = &ctx->mixer_res; > > mutex_lock(&ctx->mixer_mutex); > @@ -926,7 +926,7 @@ static void mixer_poweroff(struct exynos_drm_manager *mgr) > goto out; > mutex_unlock(&ctx->mixer_mutex); > > - mixer_window_suspend(mgr); > + mixer_window_suspend(dev); > > ctx->int_en = mixer_reg_read(res, MXR_INT_EN); > > @@ -945,16 +945,16 @@ out: > mutex_unlock(&ctx->mixer_mutex); > } > > -static void mixer_dpms(struct exynos_drm_manager *mgr, int mode) > +static void mixer_dpms(struct device *dev, int mode) > { > switch (mode) { > case DRM_MODE_DPMS_ON: > - mixer_poweron(mgr); > + mixer_poweron(dev); > break; > case DRM_MODE_DPMS_STANDBY: > case DRM_MODE_DPMS_SUSPEND: > case DRM_MODE_DPMS_OFF: > - mixer_poweroff(mgr); > + mixer_poweroff(dev); > break; > default: > DRM_DEBUG_KMS("unknown dpms mode: %d\n", mode); > @@ -1235,7 +1235,7 @@ static int mixer_probe(struct platform_device *pdev) > } > } > > - mixer_manager.ctx = ctx; > + mixer_manager.dev = ctx->dev; > platform_set_drvdata(pdev, &mixer_manager); > exynos_drm_manager_register(&mixer_manager); > > -- > 1.7.9.5 > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel