diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-12 11:51:39 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-12 11:51:39 -0800 | 
| commit | d01e4afdbb65e030fd6f1f96c30a558e2eb0f279 (patch) | |
| tree | 02ef82b2740cf93a98199eded5ef765fa6e03052 /drivers/video/imxfb.c | |
| parent | 8287361abca36504da813638310d2547469283eb (diff) | |
| parent | 794b175fc0c0c4844dbb7b137a73bbfd01f6c608 (diff) | |
| download | olio-linux-3.10-d01e4afdbb65e030fd6f1f96c30a558e2eb0f279.tar.xz olio-linux-3.10-d01e4afdbb65e030fd6f1f96c30a558e2eb0f279.zip  | |
Merge tag 'cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC cleanups on various subarchitectures from Olof Johansson:
 "Cleanup patches for various ARM platforms and some of their associated
  drivers.  There's also a branch in here that enables Freescale i.MX to
  be part of the multiplatform support -- the first "big" SoC that is
  moved over (more multiplatform work comes in a separate branch later
  during the merge window)."
Conflicts fixed as per Olof, including a silent semantic one in
arch/arm/mach-omap2/board-generic.c (omap_prcm_restart() was renamed to
omap3xxx_restart(), and a new user of the old name was added).
* tag 'cleanup' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (189 commits)
  ARM: omap: fix typo on timer cleanup
  ARM: EXYNOS: Remove unused regs-mem.h file
  ARM: EXYNOS: Remove unused non-dt support for dwmci controller
  ARM: Kirkwood: Use hw_pci.ops instead of hw_pci.scan
  ARM: OMAP3: cm-t3517: use GPTIMER for system clock
  ARM: OMAP2+: timer: remove CONFIG_OMAP_32K_TIMER
  ARM: SAMSUNG: use devm_ functions for ADC driver
  ARM: EXYNOS: no duplicate mask/unmask in eint0_15
  ARM: S3C24XX: SPI clock channel setup is fixed for S3C2443
  ARM: EXYNOS: Remove i2c0 resource information and setting of device names
  ARM: Kirkwood: checkpatch cleanups
  ARM: Kirkwood: Fix sparse warnings.
  ARM: Kirkwood: Remove unused includes
  ARM: kirkwood: cleanup lsxl board includes
  ARM: integrator: use BUG_ON where possible
  ARM: integrator: push down SC dependencies
  ARM: integrator: delete static UART1 mapping
  ARM: integrator: delete SC mapping on the CP
  ARM: integrator: remove static CP syscon mapping
  ARM: integrator: remove static AP syscon mapping
  ...
Diffstat (limited to 'drivers/video/imxfb.c')
| -rw-r--r-- | drivers/video/imxfb.c | 38 | 
1 files changed, 32 insertions, 6 deletions
diff --git a/drivers/video/imxfb.c b/drivers/video/imxfb.c index cf2688de083..e501dbc966b 100644 --- a/drivers/video/imxfb.c +++ b/drivers/video/imxfb.c @@ -33,7 +33,6 @@  #include <linux/math64.h>  #include <linux/platform_data/video-imxfb.h> -#include <mach/hardware.h>  /*   * Complain if VAR is out of range. @@ -53,8 +52,8 @@  #define LCDC_SIZE	0x04  #define SIZE_XMAX(x)	((((x) >> 4) & 0x3f) << 20) -#define YMAX_MASK       (cpu_is_mx1() ? 0x1ff : 0x3ff) -#define SIZE_YMAX(y)	((y) & YMAX_MASK) +#define YMAX_MASK_IMX1	0x1ff +#define YMAX_MASK_IMX21	0x3ff  #define LCDC_VPW	0x08  #define VPW_VPW(x)	((x) & 0x3ff) @@ -128,12 +127,18 @@ struct imxfb_rgb {  	struct fb_bitfield	transp;  }; +enum imxfb_type { +	IMX1_FB, +	IMX21_FB, +}; +  struct imxfb_info {  	struct platform_device  *pdev;  	void __iomem		*regs;  	struct clk		*clk_ipg;  	struct clk		*clk_ahb;  	struct clk		*clk_per; +	enum imxfb_type		devtype;  	/*  	 * These are the addresses we mapped @@ -168,6 +173,24 @@ struct imxfb_info {  	void (*backlight_power)(int);  }; +static struct platform_device_id imxfb_devtype[] = { +	{ +		.name = "imx1-fb", +		.driver_data = IMX1_FB, +	}, { +		.name = "imx21-fb", +		.driver_data = IMX21_FB, +	}, { +		/* sentinel */ +	} +}; +MODULE_DEVICE_TABLE(platform, imxfb_devtype); + +static inline int is_imx1_fb(struct imxfb_info *fbi) +{ +	return fbi->devtype == IMX1_FB; +} +  #define IMX_NAME	"IMX"  /* @@ -366,7 +389,7 @@ static int imxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)  		break;  	case 16:  	default: -		if (cpu_is_mx1()) +		if (is_imx1_fb(fbi))  			pcr |= PCR_BPIX_12;  		else  			pcr |= PCR_BPIX_16; @@ -596,6 +619,7 @@ static struct fb_ops imxfb_ops = {  static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *info)  {  	struct imxfb_info *fbi = info->par; +	u32 ymax_mask = is_imx1_fb(fbi) ? YMAX_MASK_IMX1 : YMAX_MASK_IMX21;  	pr_debug("var: xres=%d hslen=%d lm=%d rm=%d\n",  		var->xres, var->hsync_len, @@ -617,7 +641,7 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf  	if (var->right_margin > 255)  		printk(KERN_ERR "%s: invalid right_margin %d\n",  			info->fix.id, var->right_margin); -	if (var->yres < 1 || var->yres > YMAX_MASK) +	if (var->yres < 1 || var->yres > ymax_mask)  		printk(KERN_ERR "%s: invalid yres %d\n",  			info->fix.id, var->yres);  	if (var->vsync_len > 100) @@ -645,7 +669,7 @@ static int imxfb_activate_var(struct fb_var_screeninfo *var, struct fb_info *inf  		VCR_V_WAIT_2(var->upper_margin),  		fbi->regs + LCDC_VCR); -	writel(SIZE_XMAX(var->xres) | SIZE_YMAX(var->yres), +	writel(SIZE_XMAX(var->xres) | (var->yres & ymax_mask),  			fbi->regs + LCDC_SIZE);  	writel(fbi->pcr, fbi->regs + LCDC_PCR); @@ -765,6 +789,7 @@ static int __init imxfb_probe(struct platform_device *pdev)  		return -ENOMEM;  	fbi = info->par; +	fbi->devtype = pdev->id_entry->driver_data;  	if (!fb_mode)  		fb_mode = pdata->mode[0].mode.name; @@ -939,6 +964,7 @@ static struct platform_driver imxfb_driver = {  	.driver		= {  		.name	= DRIVER_NAME,  	}, +	.id_table	= imxfb_devtype,  };  static int imxfb_setup(void)  |