Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
fbe0b8d5
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
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看板
提交
fbe0b8d5
编写于
6月 13, 2009
作者:
H
Haavard Skinnemoen
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'avr32-arch' of
git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6
上级
c878b7d6
4024533e
变更
10
展开全部
隐藏空白更改
内联
并排
Showing
10 changed file
with
1863 addition
and
9 deletion
+1863
-9
arch/avr32/boards/atngw100/Kconfig
arch/avr32/boards/atngw100/Kconfig
+25
-2
arch/avr32/boards/atngw100/Kconfig_mrmt
arch/avr32/boards/atngw100/Kconfig_mrmt
+80
-0
arch/avr32/boards/atngw100/Makefile
arch/avr32/boards/atngw100/Makefile
+1
-0
arch/avr32/boards/atngw100/mrmt.c
arch/avr32/boards/atngw100/mrmt.c
+373
-0
arch/avr32/boards/atngw100/setup.c
arch/avr32/boards/atngw100/setup.c
+5
-0
arch/avr32/boards/merisc/setup.c
arch/avr32/boards/merisc/setup.c
+4
-3
arch/avr32/configs/atngw100_mrmt_defconfig
arch/avr32/configs/atngw100_mrmt_defconfig
+1363
-0
arch/avr32/include/asm/hw_irq.h
arch/avr32/include/asm/hw_irq.h
+1
-1
drivers/mmc/host/atmel-mci.c
drivers/mmc/host/atmel-mci.c
+9
-3
include/linux/atmel-mci.h
include/linux/atmel-mci.h
+2
-0
未找到文件。
arch/avr32/boards/atngw100/Kconfig
浏览文件 @
fbe0b8d5
...
...
@@ -2,8 +2,15 @@
if BOARD_ATNGW100
choice
prompt "Select an NGW100 add-on board to support"
default BOARD_ATNGW100_ADDON_NONE
config BOARD_ATNGW100_ADDON_NONE
bool "None"
config BOARD_ATNGW100_EVKLCD10X
bool "
Add support for
EVKLCD10X addon board"
bool "EVKLCD10X addon board"
help
This enables support for the EVKLCD100 (QVGA) or EVKLCD101 (VGA)
addon board for the NGW100. By enabling this the LCD controller and
...
...
@@ -14,7 +21,19 @@ config BOARD_ATNGW100_EVKLCD10X
The MCI pins can be reenabled by editing the "add device function" but
this may break the setup for other displays that use these pins.
Choose 'Y' here if you have a EVKLCD100/101 connected to the NGW100.
config BOARD_ATNGW100_MRMT
bool "Mediama RMT1/2 add-on board"
help
This enables support for the Mediama RMT1 or RMT2 board.
RMT provides LCD support, AC97 codec and other
optional peripherals to the Atmel NGW100.
This choice disables the detect pin and the write-protect pin for the
MCI platform device, since it conflicts with the LCD platform device.
The MCI pins can be reenabled by editing the "add device function" but
this may break the setup for other displays that use these pins.
endchoice
choice
prompt "LCD panel resolution on EVKLCD10X"
...
...
@@ -32,4 +51,8 @@ config BOARD_ATNGW100_EVKLCD10X_POW_QVGA
endchoice
if BOARD_ATNGW100_MRMT
source "arch/avr32/boards/atngw100/Kconfig_mrmt"
endif
endif # BOARD_ATNGW100
arch/avr32/boards/atngw100/Kconfig_mrmt
0 → 100644
浏览文件 @
fbe0b8d5
# RMT for NGW100 customization
choice
prompt "RMT Version"
help
Select the RMTx board version.
config BOARD_MRMT_REV1
bool "RMT1"
config BOARD_MRMT_REV2
bool "RMT2"
endchoice
config BOARD_MRMT_AC97
bool "Enable AC97 CODEC"
help
Enable the UCB1400 AC97 CODEC driver.
choice
prompt "Touchscreen Driver"
default BOARD_MRMT_ADS7846_TS
config BOARD_MRMT_UCB1400_TS
bool "Use UCB1400 Touchscreen"
config BOARD_MRMT_ADS7846_TS
bool "Use ADS7846 Touchscreen"
endchoice
choice
prompt "RMTx LCD Selection"
default BOARD_MRMT_LCD_DISABLE
config BOARD_MRMT_LCD_DISABLE
bool "LCD Disabled"
config BOARD_MRMT_LCD_LQ043T3DX0X
bool "Sharp LQ043T3DX0x or compatible"
help
If using RMT2, be sure to load the resistor pack selectors accordingly
if BOARD_MRMT_REV2
config BOARD_MRMT_LCD_KWH043GM08
bool "Formike KWH043GM08 or compatible"
help
Be sure to load the RMT2 resistor pack selectors accordingly
endif
endchoice
if !BOARD_MRMT_LCD_DISABLE
config BOARD_MRMT_BL_PWM
bool "Use PWM control for LCD Backlight"
help
Use PWM driver for controlling LCD Backlight.
Otherwise, LCD Backlight is always on.
endif
config BOARD_MRMT_RTC_I2C
bool "Use External RTC on I2C Bus"
help
RMT1 has an optional RTC device on the I2C bus.
It is a SII S35390A. Be sure to select the
matching RTC driver.
choice
prompt "Wireless Module on ttyS2"
default BOARD_MRMT_WIRELESS_ZB
config BOARD_MRMT_WIRELESS_ZB
bool "Use ZigBee/802.15.4 Module"
config BOARD_MRMT_WIRELESS_BT
bool "Use Bluetooth (HCI) Module"
config BOARD_MRMT_WIRELESS_NONE
bool "Not Installed"
endchoice
arch/avr32/boards/atngw100/Makefile
浏览文件 @
fbe0b8d5
obj-y
+=
setup.o flash.o
obj-$(CONFIG_BOARD_ATNGW100_EVKLCD10X)
+=
evklcd10x.o
obj-$(CONFIG_BOARD_ATNGW100_MRMT)
+=
mrmt.o
arch/avr32/boards/atngw100/mrmt.c
0 → 100644
浏览文件 @
fbe0b8d5
/*
* Board-specific setup code for Remote Media Terminal 1 (RMT1)
* add-on board for the ATNGW100 Network Gateway
*
* Copyright (C) 2008 Mediama Technologies
* Based on ATNGW100 Network Gateway (Copyright (C) Atmel)
*
* 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
* published by the Free Software Foundation.
*/
#include <linux/gpio.h>
#include <linux/init.h>
#include <linux/irq.h>
#include <linux/linkage.h>
#include <linux/platform_device.h>
#include <linux/types.h>
#include <linux/fb.h>
#include <linux/leds.h>
#include <linux/input.h>
#include <linux/gpio_keys.h>
#include <linux/atmel_serial.h>
#include <linux/spi/spi.h>
#include <linux/spi/ads7846.h>
#include <video/atmel_lcdc.h>
#include <sound/atmel-ac97c.h>
#include <asm/delay.h>
#include <asm/io.h>
#include <asm/setup.h>
#include <mach/at32ap700x.h>
#include <mach/board.h>
#include <mach/init.h>
#include <mach/portmux.h>
/* Define board-specifoic GPIO assignments */
#define PIN_LCD_BL GPIO_PIN_PA(28)
#define PWM_CH_BL 0
/* Must match with GPIO pin definition */
#define PIN_LCD_DISP GPIO_PIN_PA(31)
#define PIN_AC97_RST_N GPIO_PIN_PA(30)
#define PB_EXTINT_BASE 25
#define TS_IRQ 0
#define PIN_TS_EXTINT GPIO_PIN_PB(PB_EXTINT_BASE+TS_IRQ)
#define PIN_PB_LEFT GPIO_PIN_PB(11)
#define PIN_PB_RIGHT GPIO_PIN_PB(12)
#define PIN_PWR_SW_N GPIO_PIN_PB(14)
#define PIN_PWR_ON GPIO_PIN_PB(13)
#define PIN_ZB_RST_N GPIO_PIN_PA(21)
#define PIN_BT_RST GPIO_PIN_PA(22)
#define PIN_LED_SYS GPIO_PIN_PA(16)
#define PIN_LED_A GPIO_PIN_PA(19)
#define PIN_LED_B GPIO_PIN_PE(19)
#ifdef CONFIG_BOARD_MRMT_LCD_LQ043T3DX0X
/* Sharp LQ043T3DX0x (or compatible) panel */
static
struct
fb_videomode
__initdata
lcd_fb_modes
[]
=
{
{
.
name
=
"480x272 @ 59.94Hz"
,
.
refresh
=
59
.
94
,
.
xres
=
480
,
.
yres
=
272
,
.
pixclock
=
KHZ2PICOS
(
9000
),
.
left_margin
=
2
,
.
right_margin
=
2
,
.
upper_margin
=
3
,
.
lower_margin
=
9
,
.
hsync_len
=
41
,
.
vsync_len
=
1
,
.
sync
=
0
,
.
vmode
=
FB_VMODE_NONINTERLACED
,
},
};
static
struct
fb_monspecs
__initdata
lcd_fb_default_monspecs
=
{
.
manufacturer
=
"SHA"
,
.
monitor
=
"LQ043T3DX02"
,
.
modedb
=
lcd_fb_modes
,
.
modedb_len
=
ARRAY_SIZE
(
lcd_fb_modes
),
.
hfmin
=
14915
,
.
hfmax
=
17638
,
.
vfmin
=
53
,
.
vfmax
=
61
,
.
dclkmax
=
9260000
,
};
static
struct
atmel_lcdfb_info
__initdata
rmt_lcdc_data
=
{
.
default_bpp
=
24
,
.
default_dmacon
=
ATMEL_LCDC_DMAEN
|
ATMEL_LCDC_DMA2DEN
,
.
default_lcdcon2
=
(
ATMEL_LCDC_DISTYPE_TFT
|
ATMEL_LCDC_CLKMOD_ALWAYSACTIVE
|
ATMEL_LCDC_INVCLK_NORMAL
|
ATMEL_LCDC_MEMOR_BIG
),
.
lcd_wiring_mode
=
ATMEL_LCDC_WIRING_RGB
,
.
default_monspecs
=
&
lcd_fb_default_monspecs
,
.
guard_time
=
2
,
};
#endif
#ifdef CONFIG_BOARD_MRMT_LCD_KWH043GM08
/* Sharp KWH043GM08-Fxx (or compatible) panel */
static
struct
fb_videomode
__initdata
lcd_fb_modes
[]
=
{
{
.
name
=
"480x272 @ 59.94Hz"
,
.
refresh
=
59
.
94
,
.
xres
=
480
,
.
yres
=
272
,
.
pixclock
=
KHZ2PICOS
(
9000
),
.
left_margin
=
2
,
.
right_margin
=
2
,
.
upper_margin
=
3
,
.
lower_margin
=
9
,
.
hsync_len
=
41
,
.
vsync_len
=
1
,
.
sync
=
0
,
.
vmode
=
FB_VMODE_NONINTERLACED
,
},
};
static
struct
fb_monspecs
__initdata
lcd_fb_default_monspecs
=
{
.
manufacturer
=
"FOR"
,
.
monitor
=
"KWH043GM08"
,
.
modedb
=
lcd_fb_modes
,
.
modedb_len
=
ARRAY_SIZE
(
lcd_fb_modes
),
.
hfmin
=
14915
,
.
hfmax
=
17638
,
.
vfmin
=
53
,
.
vfmax
=
61
,
.
dclkmax
=
9260000
,
};
static
struct
atmel_lcdfb_info
__initdata
rmt_lcdc_data
=
{
.
default_bpp
=
24
,
.
default_dmacon
=
ATMEL_LCDC_DMAEN
|
ATMEL_LCDC_DMA2DEN
,
.
default_lcdcon2
=
(
ATMEL_LCDC_DISTYPE_TFT
|
ATMEL_LCDC_CLKMOD_ALWAYSACTIVE
|
ATMEL_LCDC_INVCLK_INVERTED
|
ATMEL_LCDC_MEMOR_BIG
),
.
lcd_wiring_mode
=
ATMEL_LCDC_WIRING_RGB
,
.
default_monspecs
=
&
lcd_fb_default_monspecs
,
.
guard_time
=
2
,
};
#endif
#ifdef CONFIG_BOARD_MRMT_AC97
static
struct
ac97c_platform_data
__initdata
ac97c0_data
=
{
.
reset_pin
=
PIN_AC97_RST_N
,
};
#endif
#ifdef CONFIG_BOARD_MRMT_UCB1400_TS
/* NOTE: IRQ assignment relies on kernel module parameter */
static
struct
platform_device
rmt_ts_device
=
{
.
name
=
"ucb1400_ts"
,
.
id
=
-
1
,
}
}
;
#endif
#ifdef CONFIG_BOARD_MRMT_BL_PWM
/* PWM LEDs: LCD Backlight, etc */
static
struct
gpio_led
rmt_pwm_led
[]
=
{
/* here the "gpio" is actually a PWM channel */
{
.
name
=
"backlight"
,
.
gpio
=
PWM_CH_BL
,
},
};
static
struct
gpio_led_platform_data
rmt_pwm_led_data
=
{
.
num_leds
=
ARRAY_SIZE
(
rmt_pwm_led
),
.
leds
=
rmt_pwm_led
,
};
static
struct
platform_device
rmt_pwm_led_dev
=
{
.
name
=
"leds-atmel-pwm"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
&
rmt_pwm_led_data
,
},
};
#endif
#ifdef CONFIG_BOARD_MRMT_ADS7846_TS
static
int
ads7846_pendown_state
(
void
)
{
return
!
gpio_get_value
(
PIN_TS_EXTINT
);
/* PENIRQ.*/
}
static
struct
ads7846_platform_data
ads_info
=
{
.
model
=
7846
,
.
keep_vref_on
=
0
,
/* Use external VREF pin */
.
vref_delay_usecs
=
0
,
.
vref_mv
=
3300
,
/* VREF = 3.3V */
.
settle_delay_usecs
=
800
,
.
penirq_recheck_delay_usecs
=
800
,
.
x_plate_ohms
=
750
,
.
y_plate_ohms
=
300
,
.
pressure_max
=
4096
,
.
debounce_max
=
1
,
.
debounce_rep
=
0
,
.
debounce_tol
=
(
~
0
),
.
get_pendown_state
=
ads7846_pendown_state
,
.
filter
=
NULL
,
.
filter_init
=
NULL
,
};
static
struct
spi_board_info
spi01_board_info
[]
__initdata
=
{
{
.
modalias
=
"ads7846"
,
.
max_speed_hz
=
31250
*
26
,
.
bus_num
=
0
,
.
chip_select
=
1
,
.
platform_data
=
&
ads_info
,
.
irq
=
AT32_EXTINT
(
TS_IRQ
),
},
};
#endif
/* GPIO Keys: left, right, power, etc */
static
const
struct
gpio_keys_button
rmt_gpio_keys_buttons
[]
=
{
[
0
]
=
{
.
type
=
EV_KEY
,
.
code
=
KEY_POWER
,
.
gpio
=
PIN_PWR_SW_N
,
.
active_low
=
1
,
.
desc
=
"power button"
,
},
[
1
]
=
{
.
type
=
EV_KEY
,
.
code
=
KEY_LEFT
,
.
gpio
=
PIN_PB_LEFT
,
.
active_low
=
1
,
.
desc
=
"left button"
,
},
[
2
]
=
{
.
type
=
EV_KEY
,
.
code
=
KEY_RIGHT
,
.
gpio
=
PIN_PB_RIGHT
,
.
active_low
=
1
,
.
desc
=
"right button"
,
},
};
static
const
struct
gpio_keys_platform_data
rmt_gpio_keys_data
=
{
.
nbuttons
=
ARRAY_SIZE
(
rmt_gpio_keys_buttons
),
.
buttons
=
(
void
*
)
rmt_gpio_keys_buttons
,
};
static
struct
platform_device
rmt_gpio_keys
=
{
.
name
=
"gpio-keys"
,
.
id
=
-
1
,
.
dev
=
{
.
platform_data
=
(
void
*
)
&
rmt_gpio_keys_data
,
}
};
#ifdef CONFIG_BOARD_MRMT_RTC_I2C
static
struct
i2c_board_info
__initdata
mrmt1_i2c_rtc
=
{
I2C_BOARD_INFO
(
"s35390a"
,
0x30
),
.
irq
=
0
,
};
#endif
static
void
mrmt_power_off
(
void
)
{
/* PWR_ON=0 will force power off */
gpio_set_value
(
PIN_PWR_ON
,
0
);
}
static
int
__init
mrmt1_init
(
void
)
{
gpio_set_value
(
PIN_PWR_ON
,
1
);
/* Ensure PWR_ON is enabled */
pm_power_off
=
mrmt_power_off
;
/* Setup USARTS (other than console) */
at32_map_usart
(
2
,
1
,
0
);
/* USART 2: /dev/ttyS1, RMT1:DB9M */
at32_map_usart
(
3
,
2
,
ATMEL_USART_RTS
|
ATMEL_USART_CTS
);
/* USART 3: /dev/ttyS2, RMT1:Wireless, w/ RTS/CTS */
at32_add_device_usart
(
1
);
at32_add_device_usart
(
2
);
/* Select GPIO Key pins */
at32_select_gpio
(
PIN_PWR_SW_N
,
AT32_GPIOF_DEGLITCH
);
at32_select_gpio
(
PIN_PB_LEFT
,
AT32_GPIOF_DEGLITCH
);
at32_select_gpio
(
PIN_PB_RIGHT
,
AT32_GPIOF_DEGLITCH
);
platform_device_register
(
&
rmt_gpio_keys
);
#ifdef CONFIG_BOARD_MRMT_RTC_I2C
i2c_register_board_info
(
0
,
&
mrmt1_i2c_rtc
,
1
);
#endif
#ifndef CONFIG_BOARD_MRMT_LCD_DISABLE
/* User "alternate" LCDC inferface on Port E & D */
/* NB: exclude LCDC_CC pin, as NGW100 reserves it for other use */
at32_add_device_lcdc
(
0
,
&
rmt_lcdc_data
,
fbmem_start
,
fbmem_size
,
(
ATMEL_LCDC_ALT_24BIT
|
ATMEL_LCDC_PE_DVAL
)
);
#endif
#ifdef CONFIG_BOARD_MRMT_AC97
at32_add_device_ac97c
(
0
,
&
ac97c0_data
,
AC97C_BOTH
);
#endif
#ifdef CONFIG_BOARD_MRMT_ADS7846_TS
/* Select the Touchscreen interrupt pin mode */
at32_select_periph
(
GPIO_PIOB_BASE
,
1
<<
(
PB_EXTINT_BASE
+
TS_IRQ
),
GPIO_PERIPH_A
,
AT32_GPIOF_DEGLITCH
);
set_irq_type
(
AT32_EXTINT
(
TS_IRQ
),
IRQ_TYPE_EDGE_FALLING
);
spi_register_board_info
(
spi01_board_info
,
ARRAY_SIZE
(
spi01_board_info
));
#endif
#ifdef CONFIG_BOARD_MRMT_UCB1400_TS
/* Select the Touchscreen interrupt pin mode */
at32_select_periph
(
GPIO_PIOB_BASE
,
1
<<
(
PB_EXTINT_BASE
+
TS_IRQ
),
GPIO_PERIPH_A
,
AT32_GPIOF_DEGLITCH
);
platform_device_register
(
&
rmt_ts_device
);
#endif
at32_select_gpio
(
PIN_LCD_DISP
,
AT32_GPIOF_OUTPUT
);
gpio_request
(
PIN_LCD_DISP
,
"LCD_DISP"
);
gpio_direction_output
(
PIN_LCD_DISP
,
0
);
/* LCD DISP */
#ifdef CONFIG_BOARD_MRMT_LCD_DISABLE
/* Keep Backlight and DISP off */
at32_select_gpio
(
PIN_LCD_BL
,
AT32_GPIOF_OUTPUT
);
gpio_request
(
PIN_LCD_BL
,
"LCD_BL"
);
gpio_direction_output
(
PIN_LCD_BL
,
0
);
/* Backlight */
#else
gpio_set_value
(
PIN_LCD_DISP
,
1
);
/* DISP asserted first */
#ifdef CONFIG_BOARD_MRMT_BL_PWM
/* Use PWM for Backlight controls */
at32_add_device_pwm
(
1
<<
PWM_CH_BL
);
platform_device_register
(
&
rmt_pwm_led_dev
);
#else
/* Backlight always on */
udelay
(
1
);
at32_select_gpio
(
PIN_LCD_BL
,
AT32_GPIOF_OUTPUT
);
gpio_request
(
PIN_LCD_BL
,
"LCD_BL"
);
gpio_direction_output
(
PIN_LCD_BL
,
1
);
#endif
#endif
/* Make sure BT and Zigbee modules in reset */
at32_select_gpio
(
PIN_BT_RST
,
AT32_GPIOF_OUTPUT
);
gpio_request
(
PIN_BT_RST
,
"BT_RST"
);
gpio_direction_output
(
PIN_BT_RST
,
1
);
/* BT Module in Reset */
at32_select_gpio
(
PIN_ZB_RST_N
,
AT32_GPIOF_OUTPUT
);
gpio_request
(
PIN_ZB_RST_N
,
"ZB_RST_N"
);
gpio_direction_output
(
PIN_ZB_RST_N
,
0
);
/* XBee Module in Reset */
#ifdef CONFIG_BOARD_MRMT_WIRELESS_ZB
udelay
(
1000
);
/* Unreset the XBee Module */
gpio_set_value
(
PIN_ZB_RST_N
,
1
);
#endif
#ifdef CONFIG_BOARD_MRMT_WIRELESS_BT
udelay
(
1000
);
/* Unreset the BT Module */
gpio_set_value
(
PIN_BT_RST
,
0
);
#endif
return
0
;
}
arch_initcall
(
mrmt1_init
);
static
int
__init
mrmt1_early_init
(
void
)
{
/* To maintain power-on signal in case boot loader did not already */
at32_select_gpio
(
PIN_PWR_ON
,
AT32_GPIOF_OUTPUT
);
gpio_request
(
PIN_PWR_ON
,
"PIN_PWR_ON"
);
gpio_direction_output
(
PIN_PWR_ON
,
1
);
return
0
;
}
core_initcall
(
mrmt1_early_init
);
arch/avr32/boards/atngw100/setup.c
浏览文件 @
fbe0b8d5
...
...
@@ -56,8 +56,13 @@ static struct spi_board_info spi0_board_info[] __initdata = {
static
struct
mci_platform_data
__initdata
mci0_data
=
{
.
slot
[
0
]
=
{
.
bus_width
=
4
,
#if defined(CONFIG_BOARD_ATNGW100_EVKLCD10X) || defined(CONFIG_BOARD_ATNGW100_MRMT1)
.
detect_pin
=
GPIO_PIN_NONE
,
.
wp_pin
=
GPIO_PIN_NONE
,
#else
.
detect_pin
=
GPIO_PIN_PC
(
25
),
.
wp_pin
=
GPIO_PIN_PE
(
0
),
#endif
},
};
...
...
arch/avr32/boards/merisc/setup.c
浏览文件 @
fbe0b8d5
...
...
@@ -94,9 +94,10 @@ static struct spi_board_info __initdata spi0_board_info[] = {
static
struct
mci_platform_data
__initdata
mci0_data
=
{
.
slot
[
0
]
=
{
.
bus_width
=
4
,
.
detect_pin
=
GPIO_PIN_PE
(
19
),
.
wp_pin
=
GPIO_PIN_PE
(
20
),
.
bus_width
=
4
,
.
detect_pin
=
GPIO_PIN_PE
(
19
),
.
wp_pin
=
GPIO_PIN_PE
(
20
),
.
detect_is_active_high
=
true
,
},
};
...
...
arch/avr32/configs/atngw100_mrmt_defconfig
0 → 100644
浏览文件 @
fbe0b8d5
此差异已折叠。
点击以展开。
arch/avr32/include/asm/hw_irq.h
浏览文件 @
fbe0b8d5
#ifndef __ASM_AVR32_HW_IRQ_H
#define __ASM_AVR32_HW_IRQ_H
static
inline
void
hw_resend_irq
(
struct
hw_interrupt_type
*
h
,
unsigned
int
i
)
static
inline
void
hw_resend_irq
(
struct
irq_chip
*
h
,
unsigned
int
i
)
{
/* Nothing to do */
}
...
...
drivers/mmc/host/atmel-mci.c
浏览文件 @
fbe0b8d5
...
...
@@ -177,6 +177,7 @@ struct atmel_mci {
* available.
* @wp_pin: GPIO pin used for card write protect sending, or negative
* if not available.
* @detect_is_active_high: The state of the detect pin when it is active.
* @detect_timer: Timer used for debouncing @detect_pin interrupts.
*/
struct
atmel_mci_slot
{
...
...
@@ -196,6 +197,7 @@ struct atmel_mci_slot {
int
detect_pin
;
int
wp_pin
;
bool
detect_is_active_high
;
struct
timer_list
detect_timer
;
};
...
...
@@ -924,7 +926,8 @@ static int atmci_get_cd(struct mmc_host *mmc)
struct
atmel_mci_slot
*
slot
=
mmc_priv
(
mmc
);
if
(
gpio_is_valid
(
slot
->
detect_pin
))
{
present
=
!
gpio_get_value
(
slot
->
detect_pin
);
present
=
!
(
gpio_get_value
(
slot
->
detect_pin
)
^
slot
->
detect_is_active_high
);
dev_dbg
(
&
mmc
->
class_dev
,
"card is %spresent
\n
"
,
present
?
""
:
"not "
);
}
...
...
@@ -1028,7 +1031,8 @@ static void atmci_detect_change(unsigned long data)
return
;
enable_irq
(
gpio_to_irq
(
slot
->
detect_pin
));
present
=
!
gpio_get_value
(
slot
->
detect_pin
);
present
=
!
(
gpio_get_value
(
slot
->
detect_pin
)
^
slot
->
detect_is_active_high
);
present_old
=
test_bit
(
ATMCI_CARD_PRESENT
,
&
slot
->
flags
);
dev_vdbg
(
&
slot
->
mmc
->
class_dev
,
"detect change: %d (was %d)
\n
"
,
...
...
@@ -1456,6 +1460,7 @@ static int __init atmci_init_slot(struct atmel_mci *host,
slot
->
host
=
host
;
slot
->
detect_pin
=
slot_data
->
detect_pin
;
slot
->
wp_pin
=
slot_data
->
wp_pin
;
slot
->
detect_is_active_high
=
slot_data
->
detect_is_active_high
;
slot
->
sdc_reg
=
sdc_reg
;
mmc
->
ops
=
&
atmci_ops
;
...
...
@@ -1477,7 +1482,8 @@ static int __init atmci_init_slot(struct atmel_mci *host,
if
(
gpio_request
(
slot
->
detect_pin
,
"mmc_detect"
))
{
dev_dbg
(
&
mmc
->
class_dev
,
"no detect pin available
\n
"
);
slot
->
detect_pin
=
-
EBUSY
;
}
else
if
(
gpio_get_value
(
slot
->
detect_pin
))
{
}
else
if
(
gpio_get_value
(
slot
->
detect_pin
)
^
slot
->
detect_is_active_high
)
{
clear_bit
(
ATMCI_CARD_PRESENT
,
&
slot
->
flags
);
}
}
...
...
include/linux/atmel-mci.h
浏览文件 @
fbe0b8d5
...
...
@@ -10,6 +10,7 @@
* @bus_width: Number of data lines wired up the slot
* @detect_pin: GPIO pin wired to the card detect switch
* @wp_pin: GPIO pin wired to the write protect sensor
* @detect_is_active_high: The state of the detect pin when it is active
*
* If a given slot is not present on the board, @bus_width should be
* set to 0. The other fields are ignored in this case.
...
...
@@ -24,6 +25,7 @@ struct mci_slot_pdata {
unsigned
int
bus_width
;
int
detect_pin
;
int
wp_pin
;
bool
detect_is_active_high
;
};
/**
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录