diff -ruN a/arch/arm/boot/dts/kirkwood-nsa320.dts b/arch/arm/boot/dts/kirkwood-nsa320.dts --- a/arch/arm/boot/dts/kirkwood-nsa320.dts 2016-03-13 22:28:54.000000000 -0600 +++ b/arch/arm/boot/dts/kirkwood-nsa320.dts 2016-03-15 20:36:16.470111122 -0600 @@ -193,10 +193,19 @@ }; }; + hwmon { + compatible = "zyxel,nsa320-mcu"; + pinctrl-0 = <&pmx_mcu_data &pmx_mcu_clk &pmx_mcu_act>; + pinctrl-names = "default"; + + data-gpios = <&gpio0 14 GPIO_ACTIVE_HIGH>; + clk-gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; + act-gpios = <&gpio0 17 GPIO_ACTIVE_LOW>; + }; + /* The following pins are currently not assigned to a driver, some of them should be configured as inputs. - pinctrl-0 = <&pmx_mcu_data &pmx_mcu_clk &pmx_mcu_act - &pmx_htp &pmx_vid_b1 + pinctrl-0 = <&pmx_htp &pmx_vid_b1 &pmx_power_resume_data &pmx_power_resume_clk>; */ }; 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-03-13 22:28:54.000000000 -0600 +++ b/arch/arm/boot/dts/kirkwood-pogo_e02.dts 2016-03-15 20:36:16.475111102 -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-03-13 22:28:54.000000000 -0600 +++ b/drivers/ata/sata_mv.c 2016-03-15 20:36:16.415111342 -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-03-13 22:28:54.000000000 -0600 +++ b/drivers/leds/trigger/Kconfig 2016-03-15 20:36:16.445111222 -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-03-13 22:28:54.000000000 -0600 +++ b/drivers/leds/trigger/ledtrig-ide-disk.c 2016-03-15 20:45:22.852900230 -0600 @@ -17,19 +17,29 @@ #define BLINK_DELAY 30 -DEFINE_LED_TRIGGER(ledtrig_ide); +DEFINE_LED_TRIGGER(ledtrig_ide1); +DEFINE_LED_TRIGGER(ledtrig_ide2); static unsigned long ide_blink_delay = BLINK_DELAY; -void ledtrig_ide_activity(void) +void ledtrig_ide_activity(int port_number) { - 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-03-13 22:28:54.000000000 -0600 +++ b/drivers/mmc/core/core.c 2016-03-15 20:36:16.450111202 -0600 @@ -850,7 +850,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-03-13 22:28:54.000000000 -0600 +++ b/drivers/mmc/core/sd.c 2016-03-15 20:36:16.450111202 -0600 @@ -365,6 +365,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-03-13 22:28:54.000000000 -0600 +++ b/drivers/mmc/host/mvsdio.c 2016-03-15 20:36:16.455111182 -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-03-13 22:28:54.000000000 -0600 +++ b/include/linux/leds.h 2016-03-15 20:36:16.455111182 -0600 @@ -320,9 +320,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 #if defined(CONFIG_LEDS_TRIGGER_CAMERA) || defined(CONFIG_LEDS_TRIGGER_CAMERA_MODULE)