Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
6417a917
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6417a917
编写于
11月 27, 2008
作者:
R
Russell King
提交者:
Russell King
11月 27, 2008
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'omap-fixes' of
git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
上级
47fd6f7c
723fdb78
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
4 addition
and
331 deletion
+4
-331
arch/arm/plat-omap/gpio.c
arch/arm/plat-omap/gpio.c
+3
-2
arch/arm/plat-omap/include/mach/pm.h
arch/arm/plat-omap/include/mach/pm.h
+1
-1
drivers/video/omap/Makefile
drivers/video/omap/Makefile
+0
-1
drivers/video/omap/lcd_sx1.c
drivers/video/omap/lcd_sx1.c
+0
-327
未找到文件。
arch/arm/plat-omap/gpio.c
浏览文件 @
6417a917
...
...
@@ -101,6 +101,7 @@
#define OMAP24XX_GPIO_IRQSTATUS2 0x0028
#define OMAP24XX_GPIO_IRQENABLE2 0x002c
#define OMAP24XX_GPIO_IRQENABLE1 0x001c
#define OMAP24XX_GPIO_WAKE_EN 0x0020
#define OMAP24XX_GPIO_CTRL 0x0030
#define OMAP24XX_GPIO_OE 0x0034
#define OMAP24XX_GPIO_DATAIN 0x0038
...
...
@@ -1551,7 +1552,7 @@ static int omap_gpio_suspend(struct sys_device *dev, pm_message_t mesg)
#endif
#if defined(CONFIG_ARCH_OMAP24XX) || defined(CONFIG_ARCH_OMAP34XX)
case
METHOD_GPIO_24XX
:
wake_status
=
bank
->
base
+
OMAP24XX_GPIO_
SETWKUENA
;
wake_status
=
bank
->
base
+
OMAP24XX_GPIO_
WAKE_EN
;
wake_clear
=
bank
->
base
+
OMAP24XX_GPIO_CLEARWKUENA
;
wake_set
=
bank
->
base
+
OMAP24XX_GPIO_SETWKUENA
;
break
;
...
...
@@ -1574,7 +1575,7 @@ static int omap_gpio_resume(struct sys_device *dev)
{
int
i
;
if
(
!
cpu_
is_omap24xx
()
&&
!
cpu_is_omap16xx
())
if
(
!
cpu_
class_is_omap2
()
&&
!
cpu_is_omap16xx
())
return
0
;
for
(
i
=
0
;
i
<
gpio_bank_count
;
i
++
)
{
...
...
arch/arm/plat-omap/include/mach/pm.h
浏览文件 @
6417a917
...
...
@@ -128,7 +128,7 @@ void clk_deny_idle(struct clk *clk);
* clk_allow_idle - Counters previous clk_deny_idle
* @clk: clock signal handle
*/
void
clk_
deny
_idle
(
struct
clk
*
clk
);
void
clk_
allow
_idle
(
struct
clk
*
clk
);
extern
void
omap_pm_idle
(
void
);
extern
void
omap_pm_suspend
(
void
);
...
...
drivers/video/omap/Makefile
浏览文件 @
6417a917
...
...
@@ -23,7 +23,6 @@ objs-y$(CONFIG_MACH_OMAP_PALMZ71) += lcd_palmz71.o
objs-$(CONFIG_ARCH_OMAP16XX)$(CONFIG_MACH_OMAP_INNOVATOR)
+=
lcd_inn1610.o
objs-$(CONFIG_ARCH_OMAP15XX)$(CONFIG_MACH_OMAP_INNOVATOR)
+=
lcd_inn1510.o
objs-y$(CONFIG_MACH_OMAP_OSK)
+=
lcd_osk.o
objs-y$(CONFIG_MACH_SX1)
+=
lcd_sx1.o
omapfb-objs
:=
$
(
objs-yy
)
drivers/video/omap/lcd_sx1.c
已删除
100644 → 0
浏览文件 @
47fd6f7c
/*
* LCD panel support for the Siemens SX1 mobile phone
*
* Current version : Vovan888@gmail.com, great help from FCA00000
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/delay.h>
#include <linux/io.h>
#include <mach/gpio.h>
#include <mach/omapfb.h>
#include <mach/mcbsp.h>
#include <mach/mux.h>
/*
* OMAP310 GPIO registers
*/
#define GPIO_DATA_INPUT 0xfffce000
#define GPIO_DATA_OUTPUT 0xfffce004
#define GPIO_DIR_CONTROL 0xfffce008
#define GPIO_INT_CONTROL 0xfffce00c
#define GPIO_INT_MASK 0xfffce010
#define GPIO_INT_STATUS 0xfffce014
#define GPIO_PIN_CONTROL 0xfffce018
#define A_LCD_SSC_RD 3
#define A_LCD_SSC_SD 7
#define _A_LCD_RESET 9
#define _A_LCD_SSC_CS 12
#define _A_LCD_SSC_A0 13
#define DSP_REG 0xE1017024
const
unsigned
char
INIT_1
[
12
]
=
{
0x1C
,
0x02
,
0x88
,
0x00
,
0x1E
,
0xE0
,
0x00
,
0xDC
,
0x00
,
0x02
,
0x00
};
const
unsigned
char
INIT_2
[
127
]
=
{
0x15
,
0x00
,
0x29
,
0x00
,
0x3E
,
0x00
,
0x51
,
0x00
,
0x65
,
0x00
,
0x7A
,
0x00
,
0x8D
,
0x00
,
0xA1
,
0x00
,
0xB6
,
0x00
,
0xC7
,
0x00
,
0xD8
,
0x00
,
0xEB
,
0x00
,
0xFB
,
0x00
,
0x0B
,
0x01
,
0x1B
,
0x01
,
0x27
,
0x01
,
0x34
,
0x01
,
0x41
,
0x01
,
0x4C
,
0x01
,
0x55
,
0x01
,
0x5F
,
0x01
,
0x68
,
0x01
,
0x70
,
0x01
,
0x78
,
0x01
,
0x7E
,
0x01
,
0x86
,
0x01
,
0x8C
,
0x01
,
0x94
,
0x01
,
0x9B
,
0x01
,
0xA1
,
0x01
,
0xA4
,
0x01
,
0xA9
,
0x01
,
0xAD
,
0x01
,
0xB2
,
0x01
,
0xB7
,
0x01
,
0xBC
,
0x01
,
0xC0
,
0x01
,
0xC4
,
0x01
,
0xC8
,
0x01
,
0xCB
,
0x01
,
0xCF
,
0x01
,
0xD2
,
0x01
,
0xD5
,
0x01
,
0xD8
,
0x01
,
0xDB
,
0x01
,
0xE0
,
0x01
,
0xE3
,
0x01
,
0xE6
,
0x01
,
0xE8
,
0x01
,
0xEB
,
0x01
,
0xEE
,
0x01
,
0xF1
,
0x01
,
0xF3
,
0x01
,
0xF8
,
0x01
,
0xF9
,
0x01
,
0xFC
,
0x01
,
0x00
,
0x02
,
0x03
,
0x02
,
0x07
,
0x02
,
0x09
,
0x02
,
0x0E
,
0x02
,
0x13
,
0x02
,
0x1C
,
0x02
,
0x00
};
const
unsigned
char
INIT_3
[
15
]
=
{
0x14
,
0x26
,
0x33
,
0x3D
,
0x45
,
0x4D
,
0x53
,
0x59
,
0x5E
,
0x63
,
0x67
,
0x6D
,
0x71
,
0x78
,
0xFF
};
static
void
epson_sendbyte
(
int
flag
,
unsigned
char
byte
)
{
int
i
,
shifter
=
0x80
;
if
(
!
flag
)
gpio_set_value
(
_A_LCD_SSC_A0
,
0
);
mdelay
(
2
);
gpio_set_value
(
A_LCD_SSC_RD
,
1
);
gpio_set_value
(
A_LCD_SSC_SD
,
flag
);
OMAP_MCBSP_WRITE
(
OMAP1510_MCBSP3_BASE
,
PCR0
,
0x2200
);
OMAP_MCBSP_WRITE
(
OMAP1510_MCBSP3_BASE
,
PCR0
,
0x2202
);
for
(
i
=
0
;
i
<
8
;
i
++
)
{
OMAP_MCBSP_WRITE
(
OMAP1510_MCBSP3_BASE
,
PCR0
,
0x2200
);
gpio_set_value
(
A_LCD_SSC_SD
,
shifter
&
byte
);
OMAP_MCBSP_WRITE
(
OMAP1510_MCBSP3_BASE
,
PCR0
,
0x2202
);
shifter
>>=
1
;
}
gpio_set_value
(
_A_LCD_SSC_A0
,
1
);
}
static
void
init_system
(
void
)
{
omap_mcbsp_request
(
OMAP_MCBSP3
);
omap_mcbsp_stop
(
OMAP_MCBSP3
);
}
static
void
setup_GPIO
(
void
)
{
/* new wave */
gpio_request
(
A_LCD_SSC_RD
,
"lcd_ssc_rd"
);
gpio_request
(
A_LCD_SSC_SD
,
"lcd_ssc_sd"
);
gpio_request
(
_A_LCD_RESET
,
"lcd_reset"
);
gpio_request
(
_A_LCD_SSC_CS
,
"lcd_ssc_cs"
);
gpio_request
(
_A_LCD_SSC_A0
,
"lcd_ssc_a0"
);
/* set GPIOs to output, with initial data */
gpio_direction_output
(
A_LCD_SSC_RD
,
1
);
gpio_direction_output
(
A_LCD_SSC_SD
,
0
);
gpio_direction_output
(
_A_LCD_RESET
,
0
);
gpio_direction_output
(
_A_LCD_SSC_CS
,
1
);
gpio_direction_output
(
_A_LCD_SSC_A0
,
1
);
}
static
void
display_init
(
void
)
{
int
i
;
omap_cfg_reg
(
MCBSP3_CLKX
);
mdelay
(
2
);
setup_GPIO
();
mdelay
(
2
);
/* reset LCD */
gpio_set_value
(
A_LCD_SSC_SD
,
1
);
epson_sendbyte
(
0
,
0x25
);
gpio_set_value
(
_A_LCD_RESET
,
0
);
mdelay
(
10
);
gpio_set_value
(
_A_LCD_RESET
,
1
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
mdelay
(
2
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD, phase 1 */
epson_sendbyte
(
0
,
0xCA
);
for
(
i
=
0
;
i
<
10
;
i
++
)
epson_sendbyte
(
1
,
INIT_1
[
i
]);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD phase 2 */
epson_sendbyte
(
0
,
0xCB
);
for
(
i
=
0
;
i
<
125
;
i
++
)
epson_sendbyte
(
1
,
INIT_2
[
i
]);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD phase 2a */
epson_sendbyte
(
0
,
0xCC
);
for
(
i
=
0
;
i
<
14
;
i
++
)
epson_sendbyte
(
1
,
INIT_3
[
i
]);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD phase 3 */
epson_sendbyte
(
0
,
0xBC
);
epson_sendbyte
(
1
,
0x08
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD phase 4 */
epson_sendbyte
(
0
,
0x07
);
epson_sendbyte
(
1
,
0x05
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD phase 5 */
epson_sendbyte
(
0
,
0x94
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD phase 6 */
epson_sendbyte
(
0
,
0xC6
);
epson_sendbyte
(
1
,
0x80
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
mdelay
(
100
);
/* used to be 1000 */
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD phase 7 */
epson_sendbyte
(
0
,
0x16
);
epson_sendbyte
(
1
,
0x02
);
epson_sendbyte
(
1
,
0x00
);
epson_sendbyte
(
1
,
0xB1
);
epson_sendbyte
(
1
,
0x00
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD phase 8 */
epson_sendbyte
(
0
,
0x76
);
epson_sendbyte
(
1
,
0x00
);
epson_sendbyte
(
1
,
0x00
);
epson_sendbyte
(
1
,
0xDB
);
epson_sendbyte
(
1
,
0x00
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
/* init LCD phase 9 */
epson_sendbyte
(
0
,
0xAF
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
}
static
int
sx1_panel_init
(
struct
lcd_panel
*
panel
,
struct
omapfb_device
*
fbdev
)
{
return
0
;
}
static
void
sx1_panel_cleanup
(
struct
lcd_panel
*
panel
)
{
}
static
void
sx1_panel_disable
(
struct
lcd_panel
*
panel
)
{
printk
(
KERN_INFO
"SX1: LCD panel disable
\n
"
);
sx1_setmmipower
(
0
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
epson_sendbyte
(
0
,
0x25
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
epson_sendbyte
(
0
,
0xAE
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
mdelay
(
100
);
gpio_set_value
(
_A_LCD_SSC_CS
,
0
);
epson_sendbyte
(
0
,
0x95
);
gpio_set_value
(
_A_LCD_SSC_CS
,
1
);
}
static
int
sx1_panel_enable
(
struct
lcd_panel
*
panel
)
{
printk
(
KERN_INFO
"lcd_sx1: LCD panel enable
\n
"
);
init_system
();
display_init
();
sx1_setmmipower
(
1
);
sx1_setbacklight
(
0x18
);
sx1_setkeylight
(
0x06
);
return
0
;
}
static
unsigned
long
sx1_panel_get_caps
(
struct
lcd_panel
*
panel
)
{
return
0
;
}
struct
lcd_panel
sx1_panel
=
{
.
name
=
"sx1"
,
.
config
=
OMAP_LCDC_PANEL_TFT
|
OMAP_LCDC_INV_VSYNC
|
OMAP_LCDC_INV_HSYNC
|
OMAP_LCDC_INV_PIX_CLOCK
|
OMAP_LCDC_INV_OUTPUT_EN
,
.
x_res
=
176
,
.
y_res
=
220
,
.
data_lines
=
16
,
.
bpp
=
16
,
.
hsw
=
5
,
.
hfp
=
5
,
.
hbp
=
5
,
.
vsw
=
2
,
.
vfp
=
1
,
.
vbp
=
1
,
.
pixel_clock
=
1500
,
.
init
=
sx1_panel_init
,
.
cleanup
=
sx1_panel_cleanup
,
.
enable
=
sx1_panel_enable
,
.
disable
=
sx1_panel_disable
,
.
get_caps
=
sx1_panel_get_caps
,
};
static
int
sx1_panel_probe
(
struct
platform_device
*
pdev
)
{
omapfb_register_panel
(
&
sx1_panel
);
return
0
;
}
static
int
sx1_panel_remove
(
struct
platform_device
*
pdev
)
{
return
0
;
}
static
int
sx1_panel_suspend
(
struct
platform_device
*
pdev
,
pm_message_t
mesg
)
{
return
0
;
}
static
int
sx1_panel_resume
(
struct
platform_device
*
pdev
)
{
return
0
;
}
struct
platform_driver
sx1_panel_driver
=
{
.
probe
=
sx1_panel_probe
,
.
remove
=
sx1_panel_remove
,
.
suspend
=
sx1_panel_suspend
,
.
resume
=
sx1_panel_resume
,
.
driver
=
{
.
name
=
"lcd_sx1"
,
.
owner
=
THIS_MODULE
,
},
};
static
int
sx1_panel_drv_init
(
void
)
{
return
platform_driver_register
(
&
sx1_panel_driver
);
}
static
void
sx1_panel_drv_cleanup
(
void
)
{
platform_driver_unregister
(
&
sx1_panel_driver
);
}
module_init
(
sx1_panel_drv_init
);
module_exit
(
sx1_panel_drv_cleanup
);
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录