Linux Audio

Check our new training course

Linux BSP development engineering services

Need help to port Linux and bootloaders to your hardware?
Loading...
Note: File does not exist in v6.13.7.
  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/platform_device.h>
 18#include <linux/pwm.h>
 19#include <linux/pwm_backlight.h>
 20#include <linux/memblock.h>
 21
 22#include <linux/mtd/physmap.h>
 23#include <linux/mtd/partitions.h>
 24
 25#include <asm/setup.h>
 26#include <asm/mach/map.h>
 27#include <asm/mach/arch.h>
 28#include <asm/mach-types.h>
 29
 30#include <video/platform_lcd.h>
 31
 32#include <mach/hardware.h>
 33
 34#include "common.h"
 35#include "devices.h"
 36
 37#define VIDEORAM_SIZE		SZ_128K
 38
 39#define EDB7211_LCD_DC_DC_EN	CLPS711X_GPIO(3, 1)
 40#define EDB7211_LCDEN		CLPS711X_GPIO(3, 2)
 41#define EDB7211_LCDBL		CLPS711X_GPIO(3, 3)
 42
 43#define EDB7211_I2C_SDA		CLPS711X_GPIO(3, 4)
 44#define EDB7211_I2C_SCL		CLPS711X_GPIO(3, 5)
 45
 46#define EDB7211_FLASH0_BASE	(CS0_PHYS_BASE)
 47#define EDB7211_FLASH1_BASE	(CS1_PHYS_BASE)
 48
 49#define EDB7211_CS8900_BASE	(CS2_PHYS_BASE + 0x300)
 50#define EDB7211_CS8900_IRQ	(IRQ_EINT3)
 51
 52/* The extra 8 lines of the keyboard matrix */
 53#define EDB7211_EXTKBD_BASE	(CS3_PHYS_BASE)
 54
 55static struct i2c_gpio_platform_data edb7211_i2c_pdata __initdata = {
 56	.sda_pin	= EDB7211_I2C_SDA,
 57	.scl_pin	= EDB7211_I2C_SCL,
 58	.scl_is_output_only = 1,
 59};
 60
 61static struct resource edb7211_cs8900_resource[] __initdata = {
 62	DEFINE_RES_MEM(EDB7211_CS8900_BASE, SZ_1K),
 63	DEFINE_RES_IRQ(EDB7211_CS8900_IRQ),
 64};
 65
 66static struct mtd_partition edb7211_flash_partitions[] __initdata = {
 67	{
 68		.name	= "Flash",
 69		.offset	= 0,
 70		.size	= MTDPART_SIZ_FULL,
 71	},
 72};
 73
 74static struct physmap_flash_data edb7211_flash_pdata __initdata = {
 75	.width		= 4,
 76	.parts		= edb7211_flash_partitions,
 77	.nr_parts	= ARRAY_SIZE(edb7211_flash_partitions),
 78};
 79
 80static struct resource edb7211_flash_resources[] __initdata = {
 81	DEFINE_RES_MEM(EDB7211_FLASH0_BASE, SZ_8M),
 82	DEFINE_RES_MEM(EDB7211_FLASH1_BASE, SZ_8M),
 83};
 84
 85static struct platform_device edb7211_flash_pdev __initdata = {
 86	.name		= "physmap-flash",
 87	.id		= 0,
 88	.resource	= edb7211_flash_resources,
 89	.num_resources	= ARRAY_SIZE(edb7211_flash_resources),
 90	.dev	= {
 91		.platform_data	= &edb7211_flash_pdata,
 92	},
 93};
 94
 95static void edb7211_lcd_power_set(struct plat_lcd_data *pd, unsigned int power)
 96{
 97	if (power) {
 98		gpio_set_value(EDB7211_LCDEN, 1);
 99		udelay(100);
100		gpio_set_value(EDB7211_LCD_DC_DC_EN, 1);
101	} else {
102		gpio_set_value(EDB7211_LCD_DC_DC_EN, 0);
103		udelay(100);
104		gpio_set_value(EDB7211_LCDEN, 0);
105	}
106}
107
108static struct plat_lcd_data edb7211_lcd_power_pdata = {
109	.set_power	= edb7211_lcd_power_set,
110};
111
112static struct pwm_lookup edb7211_pwm_lookup[] = {
113	PWM_LOOKUP("clps711x-pwm", 0, "pwm-backlight.0", NULL,
114		   0, PWM_POLARITY_NORMAL),
115};
116
117static struct platform_pwm_backlight_data pwm_bl_pdata = {
118	.dft_brightness	= 0x01,
119	.max_brightness	= 0x0f,
120	.enable_gpio	= EDB7211_LCDBL,
121};
122
123static struct resource clps711x_pwm_res =
124	DEFINE_RES_MEM(CLPS711X_PHYS_BASE + PMPCON, SZ_4);
125
126static struct gpio edb7211_gpios[] __initconst = {
127	{ EDB7211_LCD_DC_DC_EN,	GPIOF_OUT_INIT_LOW,	"LCD DC-DC" },
128	{ EDB7211_LCDEN,	GPIOF_OUT_INIT_LOW,	"LCD POWER" },
129};
130
131/* Reserve screen memory region at the start of main system memory. */
132static void __init edb7211_reserve(void)
133{
134	memblock_reserve(PHYS_OFFSET, VIDEORAM_SIZE);
135}
136
137static void __init
138fixup_edb7211(struct tag *tags, char **cmdline)
139{
140	/*
141	 * Bank start addresses are not present in the information
142	 * passed in from the boot loader.  We could potentially
143	 * detect them, but instead we hard-code them.
144	 *
145	 * Banks sizes _are_ present in the param block, but we're
146	 * not using that information yet.
147	 */
148	memblock_add(0xc0000000, SZ_8M);
149	memblock_add(0xc1000000, SZ_8M);
150}
151
152static void __init edb7211_init_late(void)
153{
154	gpio_request_array(edb7211_gpios, ARRAY_SIZE(edb7211_gpios));
155
156	platform_device_register(&edb7211_flash_pdev);
157
158	platform_device_register_data(NULL, "platform-lcd", 0,
159				      &edb7211_lcd_power_pdata,
160				      sizeof(edb7211_lcd_power_pdata));
161
162	platform_device_register_simple("clps711x-pwm", PLATFORM_DEVID_NONE,
163					&clps711x_pwm_res, 1);
164	pwm_add_table(edb7211_pwm_lookup, ARRAY_SIZE(edb7211_pwm_lookup));
165
166	platform_device_register_data(&platform_bus, "pwm-backlight", 0,
167				      &pwm_bl_pdata, sizeof(pwm_bl_pdata));
168
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(NULL, "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_irq	= clps711x_init_irq,
184	.init_time	= clps711x_timer_init,
185	.init_machine	= clps711x_devices_init,
186	.init_late	= edb7211_init_late,
187	.restart	= clps711x_restart,
188MACHINE_END