PKGBUILDs/core/linux-kirkwood-dt/archlinuxarm.patch
2016-10-10 01:00:26 -06:00

172 lines
5.6 KiB
Diff

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-10-02 17:24:33.000000000 -0600
+++ b/arch/arm/boot/dts/kirkwood-pogo_e02.dts 2016-10-02 23:41:08.542632805 -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-10-02 17:24:33.000000000 -0600
+++ b/drivers/ata/sata_mv.c 2016-10-03 00:07:50.934801409 -0600
@@ -72,6 +72,7 @@
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_device.h>
#include <linux/libata.h>
+#include <linux/leds.h>
#define DRV_NAME "sata_mv"
#define DRV_VERSION "1.28"
@@ -1175,6 +1176,8 @@
{
int want_ncq = (protocol == ATA_PROT_NCQ);
+ ledtrig_sata_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-10-02 17:24:33.000000000 -0600
+++ b/drivers/leds/trigger/Kconfig 2016-10-02 23:54:28.033717682 -0600
@@ -41,6 +41,12 @@
This allows LEDs to be controlled by disk activity.
If unsure, say Y.
+config LEDS_TRIGGER_SATA
+ bool "LED SATA Disk Trigger fir Kirkwood SOC"
+ depends on LEDS_TRIGGERS
+ help
+ This allows LEDs to be controlled by IDE disk activity.
+
config LEDS_TRIGGER_MTD
bool "LED MTD (NAND/NOR) Trigger"
depends on MTD
diff -ruN a/drivers/leds/trigger/Makefile b/drivers/leds/trigger/Makefile
--- a/drivers/leds/trigger/Makefile 2016-10-02 17:24:33.000000000 -0600
+++ b/drivers/leds/trigger/Makefile 2016-10-02 23:52:47.634208429 -0600
@@ -1,6 +1,7 @@
obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
obj-$(CONFIG_LEDS_TRIGGER_ONESHOT) += ledtrig-oneshot.o
obj-$(CONFIG_LEDS_TRIGGER_DISK) += ledtrig-disk.o
+obj-$(CONFIG_LEDS_TRIGGER_SATA) += ledtrig-sata.o
obj-$(CONFIG_LEDS_TRIGGER_MTD) += ledtrig-mtd.o
obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += ledtrig-heartbeat.o
obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += ledtrig-backlight.o
diff -ruN a/drivers/leds/trigger/ledtrig-sata.c b/drivers/leds/trigger/ledtrig-sata.c
--- a/drivers/leds/trigger/ledtrig-sata.c 1969-12-31 17:00:00.000000000 -0700
+++ b/drivers/leds/trigger/ledtrig-sata.c 2016-10-03 00:09:26.434336496 -0600
@@ -0,0 +1,43 @@
+/*
+ * LED SATA-Disk Activity Trigger
+ *
+ * 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/kernel.h>
+#include <linux/init.h>
+#include <linux/leds.h>
+
+#define BLINK_DELAY 30
+
+DEFINE_LED_TRIGGER(ledtrig_sata1);
+DEFINE_LED_TRIGGER(ledtrig_sata2);
+
+void ledtrig_sata_activity(int port_number)
+{
+ unsigned long sata_blink_delay = BLINK_DELAY;
+
+ switch (port_number) {
+ case 0:
+ led_trigger_blink_oneshot(ledtrig_sata1, &sata_blink_delay, &sata_blink_delay, 0);
+ break;
+ case 1:
+ led_trigger_blink_oneshot(ledtrig_sata2, &sata_blink_delay, &sata_blink_delay, 0);
+ break;
+ default:
+ break;
+ }
+}
+EXPORT_SYMBOL(ledtrig_sata_activity);
+
+static int __init ledtrig_sata_init(void)
+{
+ led_trigger_register_simple("sata-disk1", &ledtrig_sata1);
+ led_trigger_register_simple("sata-disk2", &ledtrig_sata2);
+
+ return 0;
+}
+device_initcall(ledtrig_sata_init);
diff -ruN a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
--- a/drivers/mmc/core/core.c 2016-10-02 17:24:33.000000000 -0600
+++ b/drivers/mmc/core/core.c 2016-10-02 23:41:08.547632780 -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-10-02 17:24:33.000000000 -0600
+++ b/drivers/mmc/core/sd.c 2016-10-02 23:41:08.552632755 -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-10-02 17:24:33.000000000 -0600
+++ b/drivers/mmc/host/mvsdio.c 2016-10-02 23:41:08.552632755 -0600
@@ -23,6 +23,7 @@
#include <linux/of_irq.h>
#include <linux/mmc/host.h>
#include <linux/mmc/slot-gpio.h>
+#include <linux/mmc/sd.h>
#include <asm/sizes.h>
#include <asm/unaligned.h>
@@ -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-10-02 17:24:33.000000000 -0600
+++ b/include/linux/leds.h 2016-10-03 00:15:52.467581672 -0600
@@ -331,6 +331,12 @@
static inline void ledtrig_disk_activity(void) {}
#endif
+#ifdef CONFIG_LEDS_TRIGGER_SATA
+extern void ledtrig_sata_activity(int port_number);
+#else
+static inline void ledtrig_sata_activity(int port_number) {}
+#endif
+
#ifdef CONFIG_LEDS_TRIGGER_MTD
extern void ledtrig_mtd_activity(void);
#else