1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
/*
* linux/arch/arm/mach-pxa/tavorevb3.c
*
* Support for the Marvell EVB3 Development Platform.
*
* Copyright: (C) Copyright 2008-2010 Marvell International Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* publishhed by the Free Software Foundation.
*/
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/i2c.h>
#include <linux/i2c/pxa-i2c.h>
#include <linux/gpio.h>
#include <linux/mfd/88pm860x.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <mach/pxa930.h>
#include "devices.h"
#include "generic.h"
#define TAVOREVB3_NR_IRQS (IRQ_BOARD_START + 24)
static mfp_cfg_t evb3_mfp_cfg[] __initdata = {
/* UART */
GPIO53_UART1_TXD,
GPIO54_UART1_RXD,
/* PMIC */
PMIC_INT_GPIO83,
};
#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
static struct pm860x_touch_pdata evb3_touch = {
.gpadc_prebias = 1,
.slot_cycle = 1,
.tsi_prebias = 6,
.pen_prebias = 16,
.pen_prechg = 2,
.res_x = 300,
};
static struct pm860x_backlight_pdata evb3_backlight[] = {
{
.id = PM8606_ID_BACKLIGHT,
.iset = PM8606_WLED_CURRENT(24),
.flags = PM8606_BACKLIGHT1,
},
{},
};
static struct pm860x_led_pdata evb3_led[] = {
{
.id = PM8606_ID_LED,
.iset = PM8606_LED_CURRENT(12),
.flags = PM8606_LED1_RED,
}, {
.id = PM8606_ID_LED,
.iset = PM8606_LED_CURRENT(12),
.flags = PM8606_LED1_GREEN,
}, {
.id = PM8606_ID_LED,
.iset = PM8606_LED_CURRENT(12),
.flags = PM8606_LED1_BLUE,
}, {
.id = PM8606_ID_LED,
.iset = PM8606_LED_CURRENT(12),
.flags = PM8606_LED2_RED,
}, {
.id = PM8606_ID_LED,
.iset = PM8606_LED_CURRENT(12),
.flags = PM8606_LED2_GREEN,
}, {
.id = PM8606_ID_LED,
.iset = PM8606_LED_CURRENT(12),
.flags = PM8606_LED2_BLUE,
},
};
static struct pm860x_platform_data evb3_pm8607_info = {
.touch = &evb3_touch,
.backlight = &evb3_backlight[0],
.led = &evb3_led[0],
.companion_addr = 0x10,
.irq_mode = 0,
.irq_base = IRQ_BOARD_START,
.i2c_port = GI2C_PORT,
};
static struct i2c_board_info evb3_i2c_info[] = {
{
.type = "88PM860x",
.addr = 0x34,
.platform_data = &evb3_pm8607_info,
.irq = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO83)),
},
};
static void __init evb3_init_i2c(void)
{
pxa_set_i2c_info(NULL);
i2c_register_board_info(0, ARRAY_AND_SIZE(evb3_i2c_info));
}
#else
static inline void evb3_init_i2c(void) {}
#endif
static void __init evb3_init(void)
{
/* initialize MFP configurations */
pxa3xx_mfp_config(ARRAY_AND_SIZE(evb3_mfp_cfg));
pxa_set_ffuart_info(NULL);
evb3_init_i2c();
}
MACHINE_START(TAVOREVB3, "PXA950 Evaluation Board (aka TavorEVB3)")
.atag_offset = 0x100,
.map_io = pxa3xx_map_io,
.nr_irqs = TAVOREVB3_NR_IRQS,
.init_irq = pxa3xx_init_irq,
.handle_irq = pxa3xx_handle_irq,
.timer = &pxa_timer,
.init_machine = evb3_init,
MACHINE_END
|