Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
9f1442bb
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9f1442bb
编写于
12月 28, 2008
作者:
E
Eric Miao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ARM] pxa/tavorevb: update board support (smartpanel LCD + keypad)
Signed-off-by:
N
Eric Miao
<
eric.miao@marvell.com
>
上级
3b24f30c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
413 addition
and
0 deletion
+413
-0
arch/arm/mach-pxa/include/mach/mfp-pxa930.h
arch/arm/mach-pxa/include/mach/mfp-pxa930.h
+1
-0
arch/arm/mach-pxa/tavorevb.c
arch/arm/mach-pxa/tavorevb.c
+412
-0
未找到文件。
arch/arm/mach-pxa/include/mach/mfp-pxa930.h
浏览文件 @
9f1442bb
...
...
@@ -421,6 +421,7 @@
#define GPIO20_PWM0 MFP_CFG_LPM(GPIO20, AF2, PULL_LOW)
#define GPIO21_PWM2 MFP_CFG_LPM(GPIO21, AF3, PULL_LOW)
#define GPIO22_PWM3 MFP_CFG_LPM(GPIO22, AF3, PULL_LOW)
#define GPIO32_PWM0 MFP_CFG_LPM(GPIO32, AF4, PULL_LOW)
/* CIR */
#define GPIO46_CIR_OUT MFP_CFG(GPIO46, AF1)
...
...
arch/arm/mach-pxa/tavorevb.c
浏览文件 @
9f1442bb
...
...
@@ -18,12 +18,15 @@
#include <linux/clk.h>
#include <linux/gpio.h>
#include <linux/smc91x.h>
#include <linux/pwm_backlight.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <mach/hardware.h>
#include <mach/pxa3xx-regs.h>
#include <mach/mfp-pxa930.h>
#include <mach/pxafb.h>
#include <mach/pxa27x_keypad.h>
#include "devices.h"
#include "generic.h"
...
...
@@ -33,6 +36,45 @@ static mfp_cfg_t tavorevb_mfp_cfg[] __initdata = {
/* Ethernet */
DF_nCS1_nCS3
,
GPIO47_GPIO
,
/* LCD */
GPIO23_LCD_DD0
,
GPIO24_LCD_DD1
,
GPIO25_LCD_DD2
,
GPIO26_LCD_DD3
,
GPIO27_LCD_DD4
,
GPIO28_LCD_DD5
,
GPIO29_LCD_DD6
,
GPIO44_LCD_DD7
,
GPIO21_LCD_CS
,
GPIO22_LCD_CS2
,
GPIO17_LCD_FCLK_RD
,
GPIO18_LCD_LCLK_A0
,
GPIO19_LCD_PCLK_WR
,
/* LCD Backlight */
GPIO43_PWM3
,
/* primary backlight */
GPIO32_PWM0
,
/* secondary backlight */
/* Keypad */
GPIO0_KP_MKIN_0
,
GPIO2_KP_MKIN_1
,
GPIO4_KP_MKIN_2
,
GPIO6_KP_MKIN_3
,
GPIO8_KP_MKIN_4
,
GPIO10_KP_MKIN_5
,
GPIO12_KP_MKIN_6
,
GPIO1_KP_MKOUT_0
,
GPIO3_KP_MKOUT_1
,
GPIO5_KP_MKOUT_2
,
GPIO7_KP_MKOUT_3
,
GPIO9_KP_MKOUT_4
,
GPIO11_KP_MKOUT_5
,
GPIO13_KP_MKOUT_6
,
GPIO14_KP_DKIN_2
,
GPIO15_KP_DKIN_3
,
};
#define TAVOREVB_ETH_PHYS (0x14000000)
...
...
@@ -64,12 +106,382 @@ static struct platform_device smc91x_device = {
},
};
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
static
unsigned
int
tavorevb_matrix_key_map
[]
=
{
/* KEY(row, col, key_code) */
KEY
(
0
,
4
,
KEY_A
),
KEY
(
0
,
5
,
KEY_B
),
KEY
(
0
,
6
,
KEY_C
),
KEY
(
1
,
4
,
KEY_E
),
KEY
(
1
,
5
,
KEY_F
),
KEY
(
1
,
6
,
KEY_G
),
KEY
(
2
,
4
,
KEY_I
),
KEY
(
2
,
5
,
KEY_J
),
KEY
(
2
,
6
,
KEY_K
),
KEY
(
3
,
4
,
KEY_M
),
KEY
(
3
,
5
,
KEY_N
),
KEY
(
3
,
6
,
KEY_O
),
KEY
(
4
,
5
,
KEY_R
),
KEY
(
4
,
6
,
KEY_S
),
KEY
(
5
,
4
,
KEY_U
),
KEY
(
5
,
4
,
KEY_V
),
KEY
(
5
,
6
,
KEY_W
),
KEY
(
6
,
4
,
KEY_Y
),
KEY
(
6
,
5
,
KEY_Z
),
KEY
(
0
,
3
,
KEY_0
),
KEY
(
2
,
0
,
KEY_1
),
KEY
(
2
,
1
,
KEY_2
),
KEY
(
2
,
2
,
KEY_3
),
KEY
(
2
,
3
,
KEY_4
),
KEY
(
1
,
0
,
KEY_5
),
KEY
(
1
,
1
,
KEY_6
),
KEY
(
1
,
2
,
KEY_7
),
KEY
(
1
,
3
,
KEY_8
),
KEY
(
0
,
2
,
KEY_9
),
KEY
(
6
,
6
,
KEY_SPACE
),
KEY
(
0
,
0
,
KEY_KPASTERISK
),
/* * */
KEY
(
0
,
1
,
KEY_KPDOT
),
/* # */
KEY
(
4
,
1
,
KEY_UP
),
KEY
(
4
,
3
,
KEY_DOWN
),
KEY
(
4
,
0
,
KEY_LEFT
),
KEY
(
4
,
2
,
KEY_RIGHT
),
KEY
(
6
,
0
,
KEY_HOME
),
KEY
(
3
,
2
,
KEY_END
),
KEY
(
6
,
1
,
KEY_DELETE
),
KEY
(
5
,
2
,
KEY_BACK
),
KEY
(
6
,
3
,
KEY_CAPSLOCK
),
/* KEY_LEFTSHIFT), */
KEY
(
4
,
4
,
KEY_ENTER
),
/* scroll push */
KEY
(
6
,
2
,
KEY_ENTER
),
/* keypad action */
KEY
(
3
,
1
,
KEY_SEND
),
KEY
(
5
,
3
,
KEY_RECORD
),
KEY
(
5
,
0
,
KEY_VOLUMEUP
),
KEY
(
5
,
1
,
KEY_VOLUMEDOWN
),
KEY
(
3
,
0
,
KEY_F22
),
/* soft1 */
KEY
(
3
,
3
,
KEY_F23
),
/* soft2 */
};
static
struct
pxa27x_keypad_platform_data
tavorevb_keypad_info
=
{
.
matrix_key_rows
=
7
,
.
matrix_key_cols
=
7
,
.
matrix_key_map
=
tavorevb_matrix_key_map
,
.
matrix_key_map_size
=
ARRAY_SIZE
(
tavorevb_matrix_key_map
),
.
debounce_interval
=
30
,
};
static
void
__init
tavorevb_init_keypad
(
void
)
{
pxa_set_keypad_info
(
&
tavorevb_keypad_info
);
}
#else
static
inline
void
tavorevb_init_keypad
(
void
)
{}
#endif
/* CONFIG_KEYBOARD_PXA27x || CONFIG_KEYBOARD_PXA27x_MODULE */
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
static
struct
platform_pwm_backlight_data
tavorevb_backlight_data
[]
=
{
[
0
]
=
{
/* primary backlight */
.
pwm_id
=
2
,
.
max_brightness
=
100
,
.
dft_brightness
=
100
,
.
pwm_period_ns
=
100000
,
},
[
1
]
=
{
/* secondary backlight */
.
pwm_id
=
0
,
.
max_brightness
=
100
,
.
dft_brightness
=
100
,
.
pwm_period_ns
=
100000
,
},
};
static
struct
platform_device
tavorevb_backlight_devices
[]
=
{
[
0
]
=
{
.
name
=
"pwm-backlight"
,
.
id
=
0
,
.
dev
=
{
.
platform_data
=
&
tavorevb_backlight_data
[
0
],
},
},
[
1
]
=
{
.
name
=
"pwm-backlight"
,
.
id
=
1
,
.
dev
=
{
.
platform_data
=
&
tavorevb_backlight_data
[
1
],
},
},
};
static
uint16_t
panel_init
[]
=
{
/* DSTB OUT */
SMART_CMD
(
0x00
),
SMART_CMD_NOOP
,
SMART_DELAY
(
1
),
SMART_CMD
(
0x00
),
SMART_CMD_NOOP
,
SMART_DELAY
(
1
),
SMART_CMD
(
0x00
),
SMART_CMD_NOOP
,
SMART_DELAY
(
1
),
/* STB OUT */
SMART_CMD
(
0x00
),
SMART_CMD
(
0x1D
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x05
),
SMART_DELAY
(
1
),
/* P-ON Init sequence */
SMART_CMD
(
0x00
),
/* OSC ON */
SMART_CMD
(
0x00
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x01
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x01
),
/* SOURCE DRIVER SHIFT DIRECTION and display RAM setting */
SMART_DAT
(
0x01
),
SMART_DAT
(
0x27
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x02
),
/* LINE INV */
SMART_DAT
(
0x02
),
SMART_DAT
(
0x00
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x03
),
/* IF mode(1) */
SMART_DAT
(
0x01
),
/* 8bit smart mode(8-8),high speed write mode */
SMART_DAT
(
0x30
),
SMART_CMD
(
0x07
),
SMART_CMD
(
0x00
),
/* RAM Write Mode */
SMART_DAT
(
0x00
),
SMART_DAT
(
0x03
),
SMART_CMD
(
0x00
),
/* DISPLAY Setting, 262K, fixed(NO scroll), no split screen */
SMART_CMD
(
0x07
),
SMART_DAT
(
0x40
),
/* 16/18/19 BPP */
SMART_DAT
(
0x00
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x08
),
/* BP, FP Seting, BP=2H, FP=3H */
SMART_DAT
(
0x03
),
SMART_DAT
(
0x02
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x0C
),
/* IF mode(2), using internal clock & MPU */
SMART_DAT
(
0x00
),
SMART_DAT
(
0x00
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x0D
),
/* Frame setting, 1Min. Frequence, 16CLK */
SMART_DAT
(
0x00
),
SMART_DAT
(
0x10
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x12
),
/* Timing(1),ASW W=4CLK, ASW ST=1CLK */
SMART_DAT
(
0x03
),
SMART_DAT
(
0x02
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x13
),
/* Timing(2),OEV ST=0.5CLK, OEV ED=1CLK */
SMART_DAT
(
0x01
),
SMART_DAT
(
0x02
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x14
),
/* Timing(3), ASW HOLD=0.5CLK */
SMART_DAT
(
0x00
),
SMART_DAT
(
0x00
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x15
),
/* Timing(4), CKV ST=0CLK, CKV ED=1CLK */
SMART_DAT
(
0x20
),
SMART_DAT
(
0x00
),
SMART_CMD
(
0x00
),
SMART_CMD
(
0x1C
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x00
),
SMART_CMD
(
0x03
),
SMART_CMD
(
0x00
),
SMART_DAT
(
0x04
),
SMART_DAT
(
0x03
),
SMART_CMD
(
0x03
),
SMART_CMD
(
0x01
),
SMART_DAT
(
0x03
),
SMART_DAT
(
0x04
),
SMART_CMD
(
0x03
),
SMART_CMD
(
0x02
),
SMART_DAT
(
0x04
),
SMART_DAT
(
0x03
),
SMART_CMD
(
0x03
),
SMART_CMD
(
0x03
),
SMART_DAT
(
0x03
),
SMART_DAT
(
0x03
),
SMART_CMD
(
0x03
),
SMART_CMD
(
0x04
),
SMART_DAT
(
0x01
),
SMART_DAT
(
0x01
),
SMART_CMD
(
0x03
),
SMART_CMD
(
0x05
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x00
),
SMART_CMD
(
0x04
),
SMART_CMD
(
0x02
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x00
),
SMART_CMD
(
0x04
),
SMART_CMD
(
0x03
),
SMART_DAT
(
0x01
),
SMART_DAT
(
0x3F
),
SMART_DELAY
(
0
),
/* DISP RAM setting: 240*320 */
SMART_CMD
(
0x04
),
/* HADDR, START 0 */
SMART_CMD
(
0x06
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x00
),
/* x1,3 */
SMART_CMD
(
0x04
),
/* HADDR, END 4 */
SMART_CMD
(
0x07
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0xEF
),
/* x2, 7 */
SMART_CMD
(
0x04
),
/* VADDR, START 8 */
SMART_CMD
(
0x08
),
SMART_DAT
(
0x00
),
/* y1, 10 */
SMART_DAT
(
0x00
),
/* y1, 11 */
SMART_CMD
(
0x04
),
/* VADDR, END 12 */
SMART_CMD
(
0x09
),
SMART_DAT
(
0x01
),
/* y2, 14 */
SMART_DAT
(
0x3F
),
/* y2, 15 */
SMART_CMD
(
0x02
),
/* RAM ADDR SETTING 16 */
SMART_CMD
(
0x00
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x00
),
/* x1, 19 */
SMART_CMD
(
0x02
),
/* RAM ADDR SETTING 20 */
SMART_CMD
(
0x01
),
SMART_DAT
(
0x00
),
/* y1, 22 */
SMART_DAT
(
0x00
),
/* y1, 23 */
};
static
uint16_t
panel_on
[]
=
{
/* Power-IC ON */
SMART_CMD
(
0x01
),
SMART_CMD
(
0x02
),
SMART_DAT
(
0x07
),
SMART_DAT
(
0x7D
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x03
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x05
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x04
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x00
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x05
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x15
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x00
),
SMART_DAT
(
0xC0
),
SMART_DAT
(
0x10
),
SMART_DELAY
(
30
),
/* DISP ON */
SMART_CMD
(
0x01
),
SMART_CMD
(
0x01
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x01
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x00
),
SMART_DAT
(
0xFF
),
SMART_DAT
(
0xFE
),
SMART_DELAY
(
150
),
};
static
uint16_t
panel_off
[]
=
{
SMART_CMD
(
0x00
),
SMART_CMD
(
0x1E
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x0A
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x00
),
SMART_DAT
(
0xFF
),
SMART_DAT
(
0xEE
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x00
),
SMART_DAT
(
0xF8
),
SMART_DAT
(
0x12
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x00
),
SMART_DAT
(
0xE8
),
SMART_DAT
(
0x11
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x00
),
SMART_DAT
(
0xC0
),
SMART_DAT
(
0x11
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x00
),
SMART_DAT
(
0x40
),
SMART_DAT
(
0x11
),
SMART_CMD
(
0x01
),
SMART_CMD
(
0x00
),
SMART_DAT
(
0x00
),
SMART_DAT
(
0x10
),
};
static
uint16_t
update_framedata
[]
=
{
/* write ram */
SMART_CMD
(
0x02
),
SMART_CMD
(
0x02
),
/* write frame data */
SMART_CMD_WRITE_FRAME
,
};
static
void
ltm020d550_lcd_power
(
int
on
,
struct
fb_var_screeninfo
*
var
)
{
struct
fb_info
*
info
=
container_of
(
var
,
struct
fb_info
,
var
);
if
(
on
)
{
pxafb_smart_queue
(
info
,
ARRAY_AND_SIZE
(
panel_init
));
pxafb_smart_queue
(
info
,
ARRAY_AND_SIZE
(
panel_on
));
}
else
{
pxafb_smart_queue
(
info
,
ARRAY_AND_SIZE
(
panel_off
));
}
if
(
pxafb_smart_flush
(
info
))
pr_err
(
"%s: timed out
\n
"
,
__func__
);
}
static
void
ltm020d550_update
(
struct
fb_info
*
info
)
{
pxafb_smart_queue
(
info
,
ARRAY_AND_SIZE
(
update_framedata
));
pxafb_smart_flush
(
info
);
}
static
struct
pxafb_mode_info
toshiba_ltm020d550_modes
[]
=
{
[
0
]
=
{
.
xres
=
240
,
.
yres
=
320
,
.
bpp
=
16
,
.
a0csrd_set_hld
=
30
,
.
a0cswr_set_hld
=
30
,
.
wr_pulse_width
=
30
,
.
rd_pulse_width
=
170
,
.
op_hold_time
=
30
,
.
cmd_inh_time
=
60
,
/* L_LCLK_A0 and L_LCLK_RD active low */
.
sync
=
FB_SYNC_HOR_HIGH_ACT
|
FB_SYNC_VERT_HIGH_ACT
,
},
};
static
struct
pxafb_mach_info
tavorevb_lcd_info
=
{
.
modes
=
toshiba_ltm020d550_modes
,
.
num_modes
=
1
,
.
lcd_conn
=
LCD_SMART_PANEL_8BPP
|
LCD_PCLK_EDGE_FALL
,
.
pxafb_lcd_power
=
ltm020d550_lcd_power
,
.
smart_update
=
ltm020d550_update
,
};
static
void
__init
tavorevb_init_lcd
(
void
)
{
platform_device_register
(
&
tavorevb_backlight_devices
[
0
]);
platform_device_register
(
&
tavorevb_backlight_devices
[
1
]);
set_pxa_fb_info
(
&
tavorevb_lcd_info
);
}
#else
static
inline
void
tavorevb_init_lcd
(
void
)
{}
#endif
/* CONFIG_FB_PXA || CONFIG_FB_PXA_MODULE */
static
void
__init
tavorevb_init
(
void
)
{
/* initialize MFP configurations */
pxa3xx_mfp_config
(
ARRAY_AND_SIZE
(
tavorevb_mfp_cfg
));
platform_device_register
(
&
smc91x_device
);
tavorevb_init_lcd
();
tavorevb_init_keypad
();
}
MACHINE_START
(
TAVOREVB
,
"PXA930 Evaluation Board (aka TavorEVB)"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录