From: Alan Cox Date: Tue, 5 Jul 2011 14:39:50 +0000 (+0100) Subject: gma500: add more ops X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=80f51c32c4b52e88c192de8471135dbbd158cc13;p=linux-beck.git gma500: add more ops Split the 2d properties, name, and various function vectors out so that we can get rid of more conditional gloop in favour of a per device structure. Signed-off-by: Alan Cox Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/gma500/mdfld_device.c b/drivers/staging/gma500/mdfld_device.c index e86e476d99b5..3955448bac89 100644 --- a/drivers/staging/gma500/mdfld_device.c +++ b/drivers/staging/gma500/mdfld_device.c @@ -687,6 +687,11 @@ static int mdfld_power_up(struct drm_device *dev) } const struct psb_ops mdfld_chip_ops = { + .name = "Medfield", + .accel_2d = 0, + .crtc_helper = &mdfld_helper_funcs, + .crtc_funcs = &mdfld_intel_crtc_funcs, + .output_init = mdfld_output_init, #ifdef CONFIG_BACKLIGHT_CLASS_DEVICE diff --git a/drivers/staging/gma500/mrst_device.c b/drivers/staging/gma500/mrst_device.c index daeeb18d9273..79cd784b7805 100644 --- a/drivers/staging/gma500/mrst_device.c +++ b/drivers/staging/gma500/mrst_device.c @@ -352,6 +352,11 @@ static int mrst_power_up(struct drm_device *dev) } const struct psb_ops mrst_chip_ops = { + .name = "Moorestown", + .accel_2d = 1, + .crtc_helper = &mrst_helper_funcs, + .crtc_funcs = &psb_intel_crtc_funcs, + .output_init = mrst_output_init, #ifdef CONFIG_BACKLIGHT_CLASS_DEVICE diff --git a/drivers/staging/gma500/psb_device.c b/drivers/staging/gma500/psb_device.c index 4a3c5169650b..040217136ae3 100644 --- a/drivers/staging/gma500/psb_device.c +++ b/drivers/staging/gma500/psb_device.c @@ -282,6 +282,11 @@ int psb_power_up(struct drm_device *dev) } const struct psb_ops psb_chip_ops = { + .name = "Poulsbo", + .accel_2d = 1, + .crtc_helper = &psb_intel_helper_funcs, + .crtc_funcs = &psb_intel_crtc_funcs, + .output_init = psb_output_init, #ifdef CONFIG_BACKLIGHT_CLASS_DEVICE diff --git a/drivers/staging/gma500/psb_drv.h b/drivers/staging/gma500/psb_drv.h index b0908f2494c7..4bc5e8dbf6b8 100644 --- a/drivers/staging/gma500/psb_drv.h +++ b/drivers/staging/gma500/psb_drv.h @@ -617,6 +617,13 @@ struct drm_psb_private { */ struct psb_ops { + const char *name; + unsigned int accel_2d:1; + + /* Sub functions */ + struct drm_crtc_helper_funcs const *crtc_helper; + struct drm_crtc_funcs const *crtc_funcs; + /* Display management hooks */ int (*output_init)(struct drm_device *dev); /* Power management hooks */ @@ -759,6 +766,10 @@ extern const struct drm_crtc_helper_funcs mrst_helper_funcs; extern void mrst_lvds_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev); +/* psb_intel_display.c */ +extern const struct drm_crtc_helper_funcs psb_intel_helper_funcs; +extern const struct drm_crtc_funcs psb_intel_crtc_funcs; + /* psb_intel_lvds.c */ extern void psb_intel_lvds_prepare(struct drm_encoder *encoder); extern void psb_intel_lvds_commit(struct drm_encoder *encoder); diff --git a/drivers/staging/gma500/psb_fb.c b/drivers/staging/gma500/psb_fb.c index 32d9016b6b1c..349fff850a18 100644 --- a/drivers/staging/gma500/psb_fb.c +++ b/drivers/staging/gma500/psb_fb.c @@ -211,7 +211,7 @@ static int psbfb_ioctl(struct fb_info *info, unsigned int cmd, case 0x12345678: if (!capable(CAP_SYS_RAWIO)) return -EPERM; - if (IS_MFLD(dev)) + if (!dev_priv->ops->accel_2d) return -EOPNOTSUPP; if (get_user(l, p)) return -EFAULT; @@ -240,7 +240,7 @@ static struct fb_ops psbfb_ops = { .fb_ioctl = psbfb_ioctl, }; -static struct fb_ops psbfb_mfld_ops = { +static struct fb_ops psbfb_unaccel_ops = { .owner = THIS_MODULE, .fb_check_var = drm_fb_helper_check_var, .fb_set_par = drm_fb_helper_set_par, @@ -426,8 +426,8 @@ static int psbfb_create(struct psb_fbdev *fbdev, info->flags = FBINFO_DEFAULT; /* No 2D engine */ - if (IS_MFLD(dev)) - info->fbops = &psbfb_mfld_ops; + if (!dev_priv->ops->accel_2d) + info->fbops = &psbfb_unaccel_ops; else info->fbops = &psbfb_ops; diff --git a/drivers/staging/gma500/psb_intel_display.c b/drivers/staging/gma500/psb_intel_display.c index 907c68e845b8..6792d0c88b57 100644 --- a/drivers/staging/gma500/psb_intel_display.c +++ b/drivers/staging/gma500/psb_intel_display.c @@ -1260,7 +1260,7 @@ void psb_intel_crtc_destroy(struct drm_crtc *crtc) kfree(psb_intel_crtc); } -static const struct drm_crtc_helper_funcs psb_intel_helper_funcs = { +const struct drm_crtc_helper_funcs psb_intel_helper_funcs = { .dpms = psb_intel_crtc_dpms, .mode_fixup = psb_intel_crtc_mode_fixup, .mode_set = psb_intel_crtc_mode_set, @@ -1304,12 +1304,8 @@ void psb_intel_crtc_init(struct drm_device *dev, int pipe, return; } - if (IS_MFLD(dev)) - drm_crtc_init(dev, &psb_intel_crtc->base, - &mdfld_intel_crtc_funcs); - else - drm_crtc_init(dev, &psb_intel_crtc->base, - &psb_intel_crtc_funcs); + /* Set the CRTC operations from the chip specific data */ + drm_crtc_init(dev, &psb_intel_crtc->base, dev_priv->ops->crtc_funcs); drm_mode_crtc_set_gamma_size(&psb_intel_crtc->base, 256); psb_intel_crtc->pipe = pipe; @@ -1332,15 +1328,8 @@ void psb_intel_crtc_init(struct drm_device *dev, int pipe, psb_intel_crtc->mode_dev = mode_dev; psb_intel_crtc->cursor_addr = 0; - if (IS_MRST(dev)) - drm_crtc_helper_add(&psb_intel_crtc->base, - &mrst_helper_funcs); - else if (IS_MFLD(dev)) - drm_crtc_helper_add(&psb_intel_crtc->base, - &mdfld_helper_funcs); - else - drm_crtc_helper_add(&psb_intel_crtc->base, - &psb_intel_helper_funcs); + drm_crtc_helper_add(&psb_intel_crtc->base, + dev_priv->ops->crtc_helper); /* Setup the array of drm_connector pointer array */ psb_intel_crtc->mode_set.crtc = &psb_intel_crtc->base;