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
Kirill Smelkov
linux
Commits
7c1552d1
Commit
7c1552d1
authored
Oct 30, 2010
by
Ben Dooks
Browse files
Options
Browse Files
Download
Plain Diff
ARM: Merge for-2637/s3c24xx/h1940
parents
8f08bfd4
68730b45
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
183 additions
and
57 deletions
+183
-57
arch/arm/mach-s3c2410/h1940-bluetooth.c
arch/arm/mach-s3c2410/h1940-bluetooth.c
+10
-3
arch/arm/mach-s3c2410/include/mach/h1940-latch.h
arch/arm/mach-s3c2410/include/mach/h1940-latch.h
+18
-39
arch/arm/mach-s3c2410/mach-h1940.c
arch/arm/mach-s3c2410/mach-h1940.c
+154
-15
arch/arm/plat-s3c24xx/Kconfig
arch/arm/plat-s3c24xx/Kconfig
+1
-0
No files found.
arch/arm/mach-s3c2410/h1940-bluetooth.c
View file @
7c1552d1
...
...
@@ -30,7 +30,7 @@ static void h1940bt_enable(int on)
{
if
(
on
)
{
/* Power on the chip */
h1940_latch_control
(
0
,
H1940_LATCH_BLUETOOTH_POWER
);
gpio_set_value
(
H1940_LATCH_BLUETOOTH_POWER
,
1
);
/* Reset the chip */
mdelay
(
10
);
...
...
@@ -43,7 +43,7 @@ static void h1940bt_enable(int on)
mdelay
(
10
);
gpio_set_value
(
S3C2410_GPH
(
1
),
0
);
mdelay
(
10
);
h1940_latch_control
(
H1940_LATCH_BLUETOOTH_POWER
,
0
);
gpio_set_value
(
H1940_LATCH_BLUETOOTH_POWER
,
0
);
}
}
...
...
@@ -64,7 +64,14 @@ static int __devinit h1940bt_probe(struct platform_device *pdev)
ret
=
gpio_request
(
S3C2410_GPH
(
1
),
dev_name
(
&
pdev
->
dev
));
if
(
ret
)
{
dev_err
(
&
pdev
->
dev
,
"could not get GPH1
\n
"
);
\
dev_err
(
&
pdev
->
dev
,
"could not get GPH1
\n
"
);
return
ret
;
}
ret
=
gpio_request
(
H1940_LATCH_BLUETOOTH_POWER
,
dev_name
(
&
pdev
->
dev
));
if
(
ret
)
{
gpio_free
(
S3C2410_GPH
(
1
));
dev_err
(
&
pdev
->
dev
,
"could not get BT_POWER
\n
"
);
return
ret
;
}
...
...
arch/arm/mach-s3c2410/include/mach/h1940-latch.h
View file @
7c1552d1
...
...
@@ -14,51 +14,30 @@
#ifndef __ASM_ARCH_H1940_LATCH_H
#define __ASM_ARCH_H1940_LATCH_H
#include <mach/gpio.h>
#ifndef __ASSEMBLY__
#define H1940_LATCH ((void __force __iomem *)0xF8000000)
#else
#define H1940_LATCH 0xF8000000
#endif
#define H1940_PA_LATCH (S3C2410_CS2)
#define H1940_LATCH_GPIO(x) (S3C_GPIO_END + (x))
/* SD layer latch */
#define H1940_LATCH_
SDQ1 (1<<16
)
#define H1940_LATCH_LCD_P1
(1<<17
)
#define H1940_LATCH_LCD_P2
(1<<18
)
#define H1940_LATCH_LCD_P3
(1<<19
)
#define H1940_LATCH_MAX1698_nSHUTDOWN
(1<<20)
/* LCD backlight */
#define H1940_LATCH_LED_RED
(1<<21
)
#define H1940_LATCH_SDQ7
(1<<22
)
#define H1940_LATCH_USB_DP
(1<<23
)
#define H1940_LATCH_
LCD_P0 H1940_LATCH_GPIO(0
)
#define H1940_LATCH_LCD_P1
H1940_LATCH_GPIO(1
)
#define H1940_LATCH_LCD_P2
H1940_LATCH_GPIO(2
)
#define H1940_LATCH_LCD_P3
H1940_LATCH_GPIO(3
)
#define H1940_LATCH_MAX1698_nSHUTDOWN
H1940_LATCH_GPIO(4)
#define H1940_LATCH_LED_RED
H1940_LATCH_GPIO(5
)
#define H1940_LATCH_SDQ7
H1940_LATCH_GPIO(6
)
#define H1940_LATCH_USB_DP
H1940_LATCH_GPIO(7
)
/* CPU layer latch */
#define H1940_LATCH_UDA_POWER (1<<24)
#define H1940_LATCH_AUDIO_POWER (1<<25)
#define H1940_LATCH_SM803_ENABLE (1<<26)
#define H1940_LATCH_LCD_P4 (1<<27)
#define H1940_LATCH_CPUQ5 (1<<28)
/* untraced */
#define H1940_LATCH_BLUETOOTH_POWER (1<<29)
/* active high */
#define H1940_LATCH_LED_GREEN (1<<30)
#define H1940_LATCH_LED_FLASH (1<<31)
/* default settings */
#define H1940_LATCH_DEFAULT \
H1940_LATCH_LCD_P4 | \
H1940_LATCH_SM803_ENABLE | \
H1940_LATCH_SDQ1 | \
H1940_LATCH_LCD_P1 | \
H1940_LATCH_LCD_P2 | \
H1940_LATCH_LCD_P3 | \
H1940_LATCH_MAX1698_nSHUTDOWN | \
H1940_LATCH_CPUQ5
/* control functions */
extern
void
h1940_latch_control
(
unsigned
int
clear
,
unsigned
int
set
);
#define H1940_LATCH_UDA_POWER H1940_LATCH_GPIO(8)
#define H1940_LATCH_AUDIO_POWER H1940_LATCH_GPIO(9)
#define H1940_LATCH_SM803_ENABLE H1940_LATCH_GPIO(10)
#define H1940_LATCH_LCD_P4 H1940_LATCH_GPIO(11)
#define H1940_LATCH_SD_POWER H1940_LATCH_GPIO(12)
#define H1940_LATCH_BLUETOOTH_POWER H1940_LATCH_GPIO(13)
#define H1940_LATCH_LED_GREEN H1940_LATCH_GPIO(14)
#define H1940_LATCH_LED_FLASH H1940_LATCH_GPIO(15)
#endif
/* __ASM_ARCH_H1940_LATCH_H */
arch/arm/mach-s3c2410/mach-h1940.c
View file @
7c1552d1
...
...
@@ -24,6 +24,7 @@
#include <linux/io.h>
#include <linux/gpio.h>
#include <linux/pwm_backlight.h>
#include <linux/i2c.h>
#include <video/platform_lcd.h>
#include <linux/mmc/host.h>
...
...
@@ -59,6 +60,14 @@
#include <plat/mci.h>
#include <plat/ts.h>
#include <sound/uda1380.h>
#define H1940_LATCH ((void __force __iomem *)0xF8000000)
#define H1940_PA_LATCH S3C2410_CS2
#define H1940_LATCH_BIT(x) (1 << ((x) + 16 - S3C_GPIO_END))
static
struct
map_desc
h1940_iodesc
[]
__initdata
=
{
[
0
]
=
{
.
virtual
=
(
unsigned
long
)
H1940_LATCH
,
...
...
@@ -100,9 +109,9 @@ static struct s3c2410_uartcfg h1940_uartcfgs[] __initdata = {
/* Board control latch control */
static
unsigned
int
latch_state
=
H1940_LATCH_DEFAULT
;
static
unsigned
int
latch_state
;
void
h1940_latch_control
(
unsigned
int
clear
,
unsigned
int
set
)
static
void
h1940_latch_control
(
unsigned
int
clear
,
unsigned
int
set
)
{
unsigned
long
flags
;
...
...
@@ -116,7 +125,42 @@ void h1940_latch_control(unsigned int clear, unsigned int set)
local_irq_restore
(
flags
);
}
EXPORT_SYMBOL_GPL
(
h1940_latch_control
);
static
inline
int
h1940_gpiolib_to_latch
(
int
offset
)
{
return
1
<<
(
offset
+
16
);
}
static
void
h1940_gpiolib_latch_set
(
struct
gpio_chip
*
chip
,
unsigned
offset
,
int
value
)
{
int
latch_bit
=
h1940_gpiolib_to_latch
(
offset
);
h1940_latch_control
(
value
?
0
:
latch_bit
,
value
?
latch_bit
:
0
);
}
static
int
h1940_gpiolib_latch_output
(
struct
gpio_chip
*
chip
,
unsigned
offset
,
int
value
)
{
h1940_gpiolib_latch_set
(
chip
,
offset
,
value
);
return
0
;
}
static
int
h1940_gpiolib_latch_get
(
struct
gpio_chip
*
chip
,
unsigned
offset
)
{
return
(
latch_state
>>
(
offset
+
16
))
&
1
;
}
struct
gpio_chip
h1940_latch_gpiochip
=
{
.
base
=
H1940_LATCH_GPIO
(
0
),
.
owner
=
THIS_MODULE
,
.
label
=
"H1940_LATCH"
,
.
ngpio
=
16
,
.
direction_output
=
h1940_gpiolib_latch_output
,
.
set
=
h1940_gpiolib_latch_set
,
.
get
=
h1940_gpiolib_latch_get
,
};
static
void
h1940_udc_pullup
(
enum
s3c2410_udc_cmd_e
cmd
)
{
...
...
@@ -125,10 +169,10 @@ static void h1940_udc_pullup(enum s3c2410_udc_cmd_e cmd)
switch
(
cmd
)
{
case
S3C2410_UDC_P_ENABLE
:
h1940_latch_control
(
0
,
H1940_LATCH_USB_DP
);
gpio_set_value
(
H1940_LATCH_USB_DP
,
1
);
break
;
case
S3C2410_UDC_P_DISABLE
:
h1940_latch_control
(
H1940_LATCH_USB_DP
,
0
);
gpio_set_value
(
H1940_LATCH_USB_DP
,
0
);
break
;
case
S3C2410_UDC_P_RESET
:
break
;
...
...
@@ -199,10 +243,25 @@ static struct platform_device h1940_device_bluetooth = {
.
id
=
-
1
,
};
static
void
h1940_set_mmc_power
(
unsigned
char
power_mode
,
unsigned
short
vdd
)
{
switch
(
power_mode
)
{
case
MMC_POWER_OFF
:
gpio_set_value
(
H1940_LATCH_SD_POWER
,
0
);
break
;
case
MMC_POWER_UP
:
case
MMC_POWER_ON
:
gpio_set_value
(
H1940_LATCH_SD_POWER
,
1
);
break
;
default:
break
;
};
}
static
struct
s3c24xx_mci_pdata
h1940_mmc_cfg
__initdata
=
{
.
gpio_detect
=
S3C2410_GPF
(
5
),
.
gpio_wprotect
=
S3C2410_GPH
(
8
),
.
set_power
=
NULL
,
.
set_power
=
h1940_set_mmc_power
,
.
ocr_avail
=
MMC_VDD_32_33
,
};
...
...
@@ -213,15 +272,32 @@ static int h1940_backlight_init(struct device *dev)
gpio_direction_output
(
S3C2410_GPB
(
0
),
0
);
s3c_gpio_setpull
(
S3C2410_GPB
(
0
),
S3C_GPIO_PULL_NONE
);
s3c_gpio_cfgpin
(
S3C2410_GPB
(
0
),
S3C2410_GPB0_TOUT0
);
gpio_set_value
(
H1940_LATCH_MAX1698_nSHUTDOWN
,
1
);
return
0
;
}
static
int
h1940_backlight_notify
(
struct
device
*
dev
,
int
brightness
)
{
if
(
!
brightness
)
{
gpio_direction_output
(
S3C2410_GPB
(
0
),
1
);
gpio_set_value
(
H1940_LATCH_MAX1698_nSHUTDOWN
,
0
);
}
else
{
gpio_direction_output
(
S3C2410_GPB
(
0
),
0
);
s3c_gpio_setpull
(
S3C2410_GPB
(
0
),
S3C_GPIO_PULL_NONE
);
s3c_gpio_cfgpin
(
S3C2410_GPB
(
0
),
S3C2410_GPB0_TOUT0
);
gpio_set_value
(
H1940_LATCH_MAX1698_nSHUTDOWN
,
1
);
}
return
brightness
;
}
static
void
h1940_backlight_exit
(
struct
device
*
dev
)
{
gpio_direction_output
(
S3C2410_GPB
(
0
),
1
);
gpio_set_value
(
H1940_LATCH_MAX1698_nSHUTDOWN
,
0
);
}
static
struct
platform_pwm_backlight_data
backlight_data
=
{
.
pwm_id
=
0
,
.
max_brightness
=
100
,
...
...
@@ -229,6 +305,7 @@ static struct platform_pwm_backlight_data backlight_data = {
/* tcnt = 0x31 */
.
pwm_period_ns
=
36296
,
.
init
=
h1940_backlight_init
,
.
notify
=
h1940_backlight_notify
,
.
exit
=
h1940_backlight_exit
,
};
...
...
@@ -247,19 +324,37 @@ static void h1940_lcd_power_set(struct plat_lcd_data *pd,
int
value
;
if
(
!
power
)
{
/* set to 3ec */
gpio_direction_output
(
S3C2410_GPC
(
0
),
0
);
gpio_set_value
(
S3C2410_GPC
(
0
),
0
);
/* wait for 3ac */
do
{
value
=
gpio_get_value
(
S3C2410_GPC
(
6
));
}
while
(
value
);
/* set to 38c */
gpio_direction_output
(
S3C2410_GPC
(
5
),
0
);
gpio_set_value
(
H1940_LATCH_LCD_P2
,
0
);
gpio_set_value
(
H1940_LATCH_LCD_P3
,
0
);
gpio_set_value
(
H1940_LATCH_LCD_P4
,
0
);
gpio_direction_output
(
S3C2410_GPC
(
1
),
0
);
gpio_direction_output
(
S3C2410_GPC
(
4
),
0
);
gpio_set_value
(
H1940_LATCH_LCD_P1
,
0
);
gpio_set_value
(
H1940_LATCH_LCD_P0
,
0
);
gpio_set_value
(
S3C2410_GPC
(
5
),
0
);
}
else
{
/* Set to 3ac */
gpio_direction_output
(
S3C2410_GPC
(
5
),
1
);
/* Set to 3ad */
gpio_direction_output
(
S3C2410_GPC
(
0
),
1
);
gpio_set_value
(
H1940_LATCH_LCD_P0
,
1
);
gpio_set_value
(
H1940_LATCH_LCD_P1
,
1
);
s3c_gpio_cfgpin
(
S3C2410_GPC
(
1
),
S3C_GPIO_SFN
(
2
));
s3c_gpio_cfgpin
(
S3C2410_GPC
(
4
),
S3C_GPIO_SFN
(
2
));
gpio_set_value
(
S3C2410_GPC
(
5
),
1
);
gpio_set_value
(
S3C2410_GPC
(
0
),
1
);
gpio_set_value
(
H1940_LATCH_LCD_P3
,
1
);
gpio_set_value
(
H1940_LATCH_LCD_P2
,
1
);
gpio_set_value
(
H1940_LATCH_LCD_P4
,
1
);
}
}
...
...
@@ -273,12 +368,26 @@ static struct platform_device h1940_lcd_powerdev = {
.
dev
.
platform_data
=
&
h1940_lcd_power_data
,
};
static
struct
uda1380_platform_data
uda1380_info
=
{
.
gpio_power
=
H1940_LATCH_UDA_POWER
,
.
gpio_reset
=
S3C2410_GPA
(
12
),
.
dac_clk
=
UDA1380_DAC_CLK_SYSCLK
,
};
static
struct
i2c_board_info
h1940_i2c_devices
[]
=
{
{
I2C_BOARD_INFO
(
"uda1380"
,
0x1a
),
.
platform_data
=
&
uda1380_info
,
},
};
static
struct
platform_device
*
h1940_devices
[]
__initdata
=
{
&
s3c_device_ohci
,
&
s3c_device_lcd
,
&
s3c_device_wdt
,
&
s3c_device_i2c0
,
&
s3c_device_iis
,
&
s3c_device_pcm
,
&
s3c_device_usbgadget
,
&
h1940_device_leds
,
&
h1940_device_bluetooth
,
...
...
@@ -303,6 +412,10 @@ static void __init h1940_map_io(void)
memcpy
(
phys_to_virt
(
H1940_SUSPEND_RESUMEAT
),
h1940_pm_return
,
1024
);
#endif
s3c_pm_init
();
/* Add latch gpio chip, set latch initial value */
h1940_latch_control
(
0
,
0
);
WARN_ON
(
gpiochip_add
(
&
h1940_latch_gpiochip
));
}
/* H1940 and RX3715 need to reserve this for suspend */
...
...
@@ -340,12 +453,38 @@ static void __init h1940_init(void)
writel
(
tmp
,
S3C2410_UPLLCON
);
gpio_request
(
S3C2410_GPC
(
0
),
"LCD power"
);
gpio_request
(
S3C2410_GPC
(
1
),
"LCD power"
);
gpio_request
(
S3C2410_GPC
(
4
),
"LCD power"
);
gpio_request
(
S3C2410_GPC
(
5
),
"LCD power"
);
gpio_request
(
S3C2410_GPC
(
6
),
"LCD power"
);
gpio_request
(
H1940_LATCH_LCD_P0
,
"LCD power"
);
gpio_request
(
H1940_LATCH_LCD_P1
,
"LCD power"
);
gpio_request
(
H1940_LATCH_LCD_P2
,
"LCD power"
);
gpio_request
(
H1940_LATCH_LCD_P3
,
"LCD power"
);
gpio_request
(
H1940_LATCH_LCD_P4
,
"LCD power"
);
gpio_request
(
H1940_LATCH_MAX1698_nSHUTDOWN
,
"LCD power"
);
gpio_direction_output
(
S3C2410_GPC
(
0
),
0
);
gpio_direction_output
(
S3C2410_GPC
(
1
),
0
);
gpio_direction_output
(
S3C2410_GPC
(
4
),
0
);
gpio_direction_output
(
S3C2410_GPC
(
5
),
0
);
gpio_direction_input
(
S3C2410_GPC
(
6
));
gpio_direction_output
(
H1940_LATCH_LCD_P0
,
0
);
gpio_direction_output
(
H1940_LATCH_LCD_P1
,
0
);
gpio_direction_output
(
H1940_LATCH_LCD_P2
,
0
);
gpio_direction_output
(
H1940_LATCH_LCD_P3
,
0
);
gpio_direction_output
(
H1940_LATCH_LCD_P4
,
0
);
gpio_direction_output
(
H1940_LATCH_MAX1698_nSHUTDOWN
,
0
);
gpio_request
(
H1940_LATCH_USB_DP
,
"USB pullup"
);
gpio_direction_output
(
H1940_LATCH_USB_DP
,
0
);
gpio_request
(
H1940_LATCH_SD_POWER
,
"SD power"
);
gpio_direction_output
(
H1940_LATCH_SD_POWER
,
0
);
platform_add_devices
(
h1940_devices
,
ARRAY_SIZE
(
h1940_devices
));
i2c_register_board_info
(
0
,
h1940_i2c_devices
,
ARRAY_SIZE
(
h1940_i2c_devices
));
}
MACHINE_START
(
H1940
,
"IPAQ-H1940"
)
...
...
arch/arm/plat-s3c24xx/Kconfig
View file @
7c1552d1
...
...
@@ -69,6 +69,7 @@ config S3C24XX_GPIO_EXTRA
int
default 128 if S3C24XX_GPIO_EXTRA128
default 64 if S3C24XX_GPIO_EXTRA64
default 16 if ARCH_H1940
default 0
config S3C24XX_GPIO_EXTRA64
...
...
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