diff -ruN a/arch/arm/boot/dts/kirkwood-pogo_e02.dts b/arch/arm/boot/dts/kirkwood-pogo_e02.dts --- a/arch/arm/boot/dts/kirkwood-pogo_e02.dts 2016-07-24 13:23:50.000000000 -0600 +++ b/arch/arm/boot/dts/kirkwood-pogo_e02.dts 2016-07-27 12:54:23.056453554 -0600 @@ -38,7 +38,7 @@ health { label = "pogo_e02:green:health"; gpios = <&gpio1 16 GPIO_ACTIVE_LOW>; - default-state = "keep"; + default-state = "default-on"; }; fault { label = "pogo_e02:orange:fault"; diff -ruN a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c --- a/drivers/ata/sata_mv.c 2016-07-24 13:23:50.000000000 -0600 +++ b/drivers/ata/sata_mv.c 2016-07-27 12:54:23.076453555 -0600 @@ -72,6 +72,7 @@ #include #include #include +#include #define DRV_NAME "sata_mv" #define DRV_VERSION "1.28" @@ -1175,6 +1176,8 @@ { int want_ncq = (protocol == ATA_PROT_NCQ); + ledtrig_ide_activity(ap->port_no); + if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) { int using_ncq = ((pp->pp_flags & MV_PP_FLAG_NCQ_EN) != 0); if (want_ncq != using_ncq) diff -ruN a/drivers/leds/trigger/Kconfig b/drivers/leds/trigger/Kconfig --- a/drivers/leds/trigger/Kconfig 2016-07-24 13:23:50.000000000 -0600 +++ b/drivers/leds/trigger/Kconfig 2016-07-27 12:54:23.076453555 -0600 @@ -35,7 +35,6 @@ config LEDS_TRIGGER_IDE_DISK bool "LED IDE Disk Trigger" - depends on IDE_GD_ATA depends on LEDS_TRIGGERS help This allows LEDs to be controlled by IDE disk activity. diff -ruN a/drivers/leds/trigger/ledtrig-ide-disk.c b/drivers/leds/trigger/ledtrig-ide-disk.c --- a/drivers/leds/trigger/ledtrig-ide-disk.c 2016-07-24 13:23:50.000000000 -0600 +++ b/drivers/leds/trigger/ledtrig-ide-disk.c 2016-07-27 12:57:57.336321911 -0600 @@ -17,20 +17,31 @@ #define BLINK_DELAY 30 -DEFINE_LED_TRIGGER(ledtrig_ide); +DEFINE_LED_TRIGGER(ledtrig_ide1); +DEFINE_LED_TRIGGER(ledtrig_ide2); -void ledtrig_ide_activity(void) +void ledtrig_ide_activity(int port_number) { unsigned long ide_blink_delay = BLINK_DELAY; - led_trigger_blink_oneshot(ledtrig_ide, - &ide_blink_delay, &ide_blink_delay, 0); + switch (port_number) { + case 0: + led_trigger_blink_oneshot(ledtrig_ide1, &ide_blink_delay, &ide_blink_delay, 0); + break; + case 1: + led_trigger_blink_oneshot(ledtrig_ide2, &ide_blink_delay, &ide_blink_delay, 0); + break; + default: + break; + } } EXPORT_SYMBOL(ledtrig_ide_activity); static int __init ledtrig_ide_init(void) { - led_trigger_register_simple("ide-disk", &ledtrig_ide); + led_trigger_register_simple("ide-disk1", &ledtrig_ide1); + led_trigger_register_simple("ide-disk2", &ledtrig_ide2); + return 0; } device_initcall(ledtrig_ide_init); diff -ruN a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c --- a/drivers/mmc/core/core.c 2016-07-24 13:23:50.000000000 -0600 +++ b/drivers/mmc/core/core.c 2016-07-27 12:54:23.081453555 -0600 @@ -857,7 +857,7 @@ */ limit_us = 3000000; else - limit_us = 100000; + limit_us = 200000; /* * SDHC cards always use these fixed values. diff -ruN a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c --- a/drivers/mmc/core/sd.c 2016-07-24 13:23:50.000000000 -0600 +++ b/drivers/mmc/core/sd.c 2016-07-27 12:54:23.081453555 -0600 @@ -363,6 +363,15 @@ return -ENOMEM; } + /* + * Some SDHC cards, notably those with a Sandisk SD controller + * (also found in Kingston products) need a bit of slack + * before successfully handling the SWITCH command. So far, + * cards identifying themselves as "SD04G" and "SD08G" are + * affected + */ + udelay(100); + err = mmc_sd_switch(card, 1, 0, 1, status); if (err) goto out; diff -ruN a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c --- a/drivers/mmc/host/mvsdio.c 2016-07-24 13:23:50.000000000 -0600 +++ b/drivers/mmc/host/mvsdio.c 2016-07-27 12:54:23.081453555 -0600 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -149,6 +150,7 @@ dev_dbg(host->dev, "cmd %d (hw state 0x%04x)\n", cmd->opcode, mvsd_read(MVSD_HW_STATE)); + if (cmd->opcode == SD_SWITCH) mdelay(1); /* Voodoo */ cmdreg = MVSD_CMD_INDEX(cmd->opcode); diff -ruN a/include/linux/leds.h b/include/linux/leds.h --- a/include/linux/leds.h 2016-07-24 13:23:50.000000000 -0600 +++ b/include/linux/leds.h 2016-07-27 12:54:23.081453555 -0600 @@ -326,9 +326,9 @@ /* Trigger specific functions */ #ifdef CONFIG_LEDS_TRIGGER_IDE_DISK -extern void ledtrig_ide_activity(void); +extern void ledtrig_ide_activity(int port_number); #else -static inline void ledtrig_ide_activity(void) {} +static inline void ledtrig_ide_activity(int port_number) {} #endif #ifdef CONFIG_LEDS_TRIGGER_MTD