Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.17.
  1/*
  2 *  Copyright (C) 2000, 2001 Blue Mug, Inc.  All Rights Reserved.
  3 *
  4 * This program is free software; you can redistribute it and/or modify
  5 * it under the terms of the GNU General Public License as published by
  6 * the Free Software Foundation; either version 2 of the License, or
  7 * (at your option) any later version.
  8 */
  9
 10#include <linux/init.h>
 11#include <linux/gpio.h>
 12#include <linux/delay.h>
 13#include <linux/memblock.h>
 14#include <linux/types.h>
 15#include <linux/i2c-gpio.h>
 16#include <linux/interrupt.h>
 17#include <linux/backlight.h>
 18#include <linux/platform_device.h>
 19
 20#include <linux/mtd/physmap.h>
 21#include <linux/mtd/partitions.h>
 22
 23#include <asm/setup.h>
 24#include <asm/mach/map.h>
 25#include <asm/mach/arch.h>
 26#include <asm/mach-types.h>
 27
 28#include <video/platform_lcd.h>
 29
 30#include <mach/hardware.h>
 31
 32#include "common.h"
 33#include "devices.h"
 34
 35#define VIDEORAM_SIZE		SZ_128K
 36
 37#define EDB7211_LCD_DC_DC_EN	CLPS711X_GPIO(3, 1)
 38#define EDB7211_LCDEN		CLPS711X_GPIO(3, 2)
 39#define EDB7211_LCDBL		CLPS711X_GPIO(3, 3)
 40
 41#define EDB7211_I2C_SDA		CLPS711X_GPIO(3, 4)
 42#define EDB7211_I2C_SCL		CLPS711X_GPIO(3, 5)
 43
 44#define EDB7211_FLASH0_BASE	(CS0_PHYS_BASE)
 45#define EDB7211_FLASH1_BASE	(CS1_PHYS_BASE)
 46
 47#define EDB7211_CS8900_BASE	(CS2_PHYS_BASE + 0x300)
 48#define EDB7211_CS8900_IRQ	(IRQ_EINT3)
 49
 50/* The extra 8 lines of the keyboard matrix */
 51#define EDB7211_EXTKBD_BASE	(CS3_PHYS_BASE)
 52
 53static struct i2c_gpio_platform_data edb7211_i2c_pdata __initdata = {
 54	.sda_pin	= EDB7211_I2C_SDA,
 55	.scl_pin	= EDB7211_I2C_SCL,
 56	.scl_is_output_only = 1,
 57};
 58
 59static struct resource edb7211_cs8900_resource[] __initdata = {
 60	DEFINE_RES_MEM(EDB7211_CS8900_BASE, SZ_1K),
 61	DEFINE_RES_IRQ(EDB7211_CS8900_IRQ),
 62};
 63
 64static struct mtd_partition edb7211_flash_partitions[] __initdata = {
 65	{
 66		.name	= "Flash",
 67		.offset	= 0,
 68		.size	= MTDPART_SIZ_FULL,
 69	},
 70};
 71
 72static struct physmap_flash_data edb7211_flash_pdata __initdata = {
 73	.width		= 4,
 74	.parts		= edb7211_flash_partitions,
 75	.nr_parts	= ARRAY_SIZE(edb7211_flash_partitions),
 76};
 77
 78static struct resource edb7211_flash_resources[] __initdata = {
 79	DEFINE_RES_MEM(EDB7211_FLASH0_BASE, SZ_8M),
 80	DEFINE_RES_MEM(EDB7211_FLASH1_BASE, SZ_8M),
 81};
 82
 83static struct platform_device edb7211_flash_pdev __initdata = {
 84	.name		= "physmap-flash",
 85	.id		= 0,
 86	.resource	= edb7211_flash_resources,
 87	.num_resources	= ARRAY_SIZE(edb7211_flash_resources),
 88	.dev	= {
 89		.platform_data	= &edb7211_flash_pdata,
 90	},
 91};
 92
 93static void edb7211_lcd_power_set(struct plat_lcd_data *pd, unsigned int power)
 94{
 95	if (power) {
 96		gpio_set_value(EDB7211_LCDEN, 1);
 97		udelay(100);
 98		gpio_set_value(EDB7211_LCD_DC_DC_EN, 1);
 99	} else {
100		gpio_set_value(EDB7211_LCD_DC_DC_EN, 0);
101		udelay(100);
102		gpio_set_value(EDB7211_LCDEN, 0);
103	}
104}
105
106static struct plat_lcd_data edb7211_lcd_power_pdata = {
107	.set_power	= edb7211_lcd_power_set,
108};
109
110static void edb7211_lcd_backlight_set_intensity(int intensity)
111{
112	gpio_set_value(EDB7211_LCDBL, !!intensity);
113	clps_writel((clps_readl(PMPCON) & 0xf0ff) | (intensity << 8), PMPCON);
114}
115
116static struct generic_bl_info edb7211_lcd_backlight_pdata = {
117	.name			= "lcd-backlight.0",
118	.default_intensity	= 0x01,
119	.max_intensity		= 0x0f,
120	.set_bl_intensity	= edb7211_lcd_backlight_set_intensity,
121};
122
123static struct gpio edb7211_gpios[] __initconst = {
124	{ EDB7211_LCD_DC_DC_EN,	GPIOF_OUT_INIT_LOW,	"LCD DC-DC" },
125	{ EDB7211_LCDEN,	GPIOF_OUT_INIT_LOW,	"LCD POWER" },
126	{ EDB7211_LCDBL,	GPIOF_OUT_INIT_LOW,	"LCD BACKLIGHT" },
127};
128
129/* Reserve screen memory region at the start of main system memory. */
130static void __init edb7211_reserve(void)
131{
132	memblock_reserve(PHYS_OFFSET, VIDEORAM_SIZE);
133}
134
135static void __init
136fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi)
137{
138	/*
139	 * Bank start addresses are not present in the information
140	 * passed in from the boot loader.  We could potentially
141	 * detect them, but instead we hard-code them.
142	 *
143	 * Banks sizes _are_ present in the param block, but we're
144	 * not using that information yet.
145	 */
146	mi->bank[0].start = 0xc0000000;
147	mi->bank[0].size = SZ_8M;
148	mi->bank[1].start = 0xc1000000;
149	mi->bank[1].size = SZ_8M;
150	mi->nr_banks = 2;
151}
152
153static void __init edb7211_init(void)
154{
155	clps711x_devices_init();
156}
157
158static void __init edb7211_init_late(void)
159{
160	gpio_request_array(edb7211_gpios, ARRAY_SIZE(edb7211_gpios));
161
162	platform_device_register(&edb7211_flash_pdev);
163	platform_device_register_data(&platform_bus, "platform-lcd", 0,
164				      &edb7211_lcd_power_pdata,
165				      sizeof(edb7211_lcd_power_pdata));
166	platform_device_register_data(&platform_bus, "generic-bl", 0,
167				      &edb7211_lcd_backlight_pdata,
168				      sizeof(edb7211_lcd_backlight_pdata));
169	platform_device_register_simple("video-clps711x", 0, NULL, 0);
170	platform_device_register_simple("cs89x0", 0, edb7211_cs8900_resource,
171					ARRAY_SIZE(edb7211_cs8900_resource));
172	platform_device_register_data(&platform_bus, "i2c-gpio", 0,
173				      &edb7211_i2c_pdata,
174				      sizeof(edb7211_i2c_pdata));
175}
176
177MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)")
178	/* Maintainer: Jon McClintock */
179	.atag_offset	= VIDEORAM_SIZE + 0x100,
180	.fixup		= fixup_edb7211,
181	.reserve	= edb7211_reserve,
182	.map_io		= clps711x_map_io,
183	.init_early	= clps711x_init_early,
184	.init_irq	= clps711x_init_irq,
185	.init_time	= clps711x_timer_init,
186	.init_machine	= edb7211_init,
187	.init_late	= edb7211_init_late,
188	.restart	= clps711x_restart,
189MACHINE_END