diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-27 09:54:23 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-27 09:54:23 -0700 |
commit | b70a6b27ed4cbb9ea7a4e1abc080ed65692ecb9b (patch) | |
tree | 6b60940d4cbd3dec420ea1aaf955264b13d25b27 /arch/mips/alchemy/pb1200/platform.c | |
parent | 1d63e726408dfdb3e10ed8f00c383b30ebb333d3 (diff) | |
parent | 3a63913f607832a2629545467e715a40ec930c32 (diff) |
Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (33 commits)
MIPS: lemote/lm2e: Added io_map_base to pci controller
MIPS: TXx9: Make firmware parameter passing more robust
MIPS: Markeins: Remove unnecessary define and cleanup comments, etc.
MIPS: Markeins: Extract ll_emma2rh_* functions
MIPS: Markeins: Remove runtime debug prints
MIPS: EMMA: Fold arch/mips/emma/{common,markeins}/irq*.c into markeins/irq.c
MIPS: EMMA2RH: Remove emma2rh_gpio_irq_base
MIPS: EMMA2RH: Remove emma2rh_sw_irq_base
MIPS: EMMA2RH: Remove emma2rh_irq_base global variable
MIPS: EMMA2RH: Remove emma2rh_sync on read operation
MIPS: EMMA: Move <asm/emma2rh> to <asm/emma> dir
MIPS: EMMA: Move arch/mips/emma2rh/ into arch/mips/emma/
MIPS: EMMA: Kconfig reorganization
MIPS: Add CONFIG_CPU_R5500 for NEC VR5500 series processors
MIPS: RB532: Disable the right device
MIPS: Add support for NXP PNX833x (STB222/5) into linux kernel
MIPS: TXx9: CONFIG_TOSHIBA_RBTX4939 spelling
MIPS: Fix KGDB build error
INPUT: sgi_btns: Add license specification
MIPS: IP22: ip22-int.c header file weeding.
...
Diffstat (limited to 'arch/mips/alchemy/pb1200/platform.c')
-rw-r--r-- | arch/mips/alchemy/pb1200/platform.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/arch/mips/alchemy/pb1200/platform.c b/arch/mips/alchemy/pb1200/platform.c index f8fb0aeac57..95303297c53 100644 --- a/arch/mips/alchemy/pb1200/platform.c +++ b/arch/mips/alchemy/pb1200/platform.c @@ -20,9 +20,90 @@ #include <linux/dma-mapping.h> #include <linux/init.h> +#include <linux/leds.h> #include <linux/platform_device.h> #include <asm/mach-au1x00/au1xxx.h> +#include <asm/mach-au1x00/au1100_mmc.h> + +static int mmc_activity; + +static void pb1200mmc0_set_power(void *mmc_host, int state) +{ + if (state) + bcsr->board |= BCSR_BOARD_SD0PWR; + else + bcsr->board &= ~BCSR_BOARD_SD0PWR; + + au_sync_delay(1); +} + +static int pb1200mmc0_card_readonly(void *mmc_host) +{ + return (bcsr->status & BCSR_STATUS_SD0WP) ? 1 : 0; +} + +static int pb1200mmc0_card_inserted(void *mmc_host) +{ + return (bcsr->sig_status & BCSR_INT_SD0INSERT) ? 1 : 0; +} + +static void pb1200_mmcled_set(struct led_classdev *led, + enum led_brightness brightness) +{ + if (brightness != LED_OFF) { + if (++mmc_activity == 1) + bcsr->disk_leds &= ~(1 << 8); + } else { + if (--mmc_activity == 0) + bcsr->disk_leds |= (1 << 8); + } +} + +static struct led_classdev pb1200mmc_led = { + .brightness_set = pb1200_mmcled_set, +}; + +#ifndef CONFIG_MIPS_DB1200 +static void pb1200mmc1_set_power(void *mmc_host, int state) +{ + if (state) + bcsr->board |= BCSR_BOARD_SD1PWR; + else + bcsr->board &= ~BCSR_BOARD_SD1PWR; + + au_sync_delay(1); +} + +static int pb1200mmc1_card_readonly(void *mmc_host) +{ + return (bcsr->status & BCSR_STATUS_SD1WP) ? 1 : 0; +} + +static int pb1200mmc1_card_inserted(void *mmc_host) +{ + return (bcsr->sig_status & BCSR_INT_SD1INSERT) ? 1 : 0; +} +#endif + +const struct au1xmmc_platform_data au1xmmc_platdata[2] = { + [0] = { + .set_power = pb1200mmc0_set_power, + .card_inserted = pb1200mmc0_card_inserted, + .card_readonly = pb1200mmc0_card_readonly, + .cd_setup = NULL, /* use poll-timer in driver */ + .led = &pb1200mmc_led, + }, +#ifndef CONFIG_MIPS_DB1200 + [1] = { + .set_power = pb1200mmc1_set_power, + .card_inserted = pb1200mmc1_card_inserted, + .card_readonly = pb1200mmc1_card_readonly, + .cd_setup = NULL, /* use poll-timer in driver */ + .led = &pb1200mmc_led, + }, +#endif +}; static struct resource ide_resources[] = { [0] = { |