Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
6417a917
Commit
6417a917
authored
Nov 27, 2008
by
Russell King
Committed by
Russell King
Nov 27, 2008
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'omap-fixes' of
git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6
parents
47fd6f7c
723fdb78
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
4 additions
and
331 deletions
+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
No files found.
arch/arm/plat-omap/gpio.c
View file @
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
View file @
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
View file @
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
deleted
100644 → 0
View file @
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
);
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment