kernel: update 4.1 to 4.1.4

Changelog:
 * https://www.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.1.4

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
[jogo: fix brcm2708 patches, refresh target patches]
Signed-off-by: Jonas Gorski <jogo@openwrt.org>

SVN-Revision: 46560
This commit is contained in:
Jonas Gorski 2015-08-05 13:55:14 +00:00
parent 0b15f91ed6
commit caa73eb95c
17 changed files with 42 additions and 318 deletions

View file

@ -4,11 +4,11 @@ LINUX_RELEASE?=1
LINUX_VERSION-3.18 = .19 LINUX_VERSION-3.18 = .19
LINUX_VERSION-4.0 = .9 LINUX_VERSION-4.0 = .9
LINUX_VERSION-4.1 = .3 LINUX_VERSION-4.1 = .4
LINUX_KERNEL_MD5SUM-3.18.19 = a143f9421bd8413752609d0d771c2955 LINUX_KERNEL_MD5SUM-3.18.19 = a143f9421bd8413752609d0d771c2955
LINUX_KERNEL_MD5SUM-4.0.9 = 40fc5f6e2d718e539b45e6601c71985b LINUX_KERNEL_MD5SUM-4.0.9 = 40fc5f6e2d718e539b45e6601c71985b
LINUX_KERNEL_MD5SUM-4.1.3 = 96c2c77b1c54ba01cfd8fc2d13fbf828 LINUX_KERNEL_MD5SUM-4.1.4 = 32cb4dd9f14d37bf71bafa6ed368f769
ifdef KERNEL_PATCHVER ifdef KERNEL_PATCHVER
LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER))) LINUX_VERSION:=$(KERNEL_PATCHVER)$(strip $(LINUX_VERSION-$(KERNEL_PATCHVER)))

View file

@ -1,6 +1,6 @@
--- a/arch/mips/ath79/gpio.c --- a/arch/mips/ath79/gpio.c
+++ b/arch/mips/ath79/gpio.c +++ b/arch/mips/ath79/gpio.c
@@ -185,15 +185,27 @@ void __init ath79_gpio_output_select(uns @@ -221,15 +221,27 @@ void __init ath79_gpio_output_select(uns
{ {
void __iomem *base = ath79_gpio_base; void __iomem *base = ath79_gpio_base;
unsigned long flags; unsigned long flags;

View file

@ -1,6 +1,6 @@
--- a/arch/mips/ath79/Kconfig --- a/arch/mips/ath79/Kconfig
+++ b/arch/mips/ath79/Kconfig +++ b/arch/mips/ath79/Kconfig
@@ -118,6 +118,19 @@ config ATH79_MACH_AP143 @@ -138,6 +138,19 @@ config ATH79_MACH_AP143
Say 'Y' here if you want your kernel to support the Say 'Y' here if you want your kernel to support the
Atheros AP143 reference board. Atheros AP143 reference board.
@ -22,7 +22,7 @@
select SOC_AR913X select SOC_AR913X
--- a/arch/mips/ath79/Makefile --- a/arch/mips/ath79/Makefile
+++ b/arch/mips/ath79/Makefile +++ b/arch/mips/ath79/Makefile
@@ -47,6 +47,7 @@ obj-$(CONFIG_ATH79_MACH_AP121) += mach- @@ -49,6 +49,7 @@ obj-$(CONFIG_ATH79_MACH_AP121) += mach-
obj-$(CONFIG_ATH79_MACH_AP132) += mach-ap132.o obj-$(CONFIG_ATH79_MACH_AP132) += mach-ap132.o
obj-$(CONFIG_ATH79_MACH_AP136) += mach-ap136.o obj-$(CONFIG_ATH79_MACH_AP136) += mach-ap136.o
obj-$(CONFIG_ATH79_MACH_AP143) += mach-ap143.o obj-$(CONFIG_ATH79_MACH_AP143) += mach-ap143.o
@ -32,7 +32,7 @@
obj-$(CONFIG_ATH79_MACH_AP96) += mach-ap96.o obj-$(CONFIG_ATH79_MACH_AP96) += mach-ap96.o
--- a/arch/mips/ath79/machtypes.h --- a/arch/mips/ath79/machtypes.h
+++ b/arch/mips/ath79/machtypes.h +++ b/arch/mips/ath79/machtypes.h
@@ -29,6 +29,7 @@ enum ath79_mach_type { @@ -31,6 +31,7 @@ enum ath79_mach_type {
ATH79_MACH_AP136_010, /* Atheros AP136-010 reference board */ ATH79_MACH_AP136_010, /* Atheros AP136-010 reference board */
ATH79_MACH_AP136_020, /* Atheros AP136-020 reference board */ ATH79_MACH_AP136_020, /* Atheros AP136-020 reference board */
ATH79_MACH_AP143, /* Atheros AP143 reference board */ ATH79_MACH_AP143, /* Atheros AP143 reference board */

View file

@ -894,7 +894,7 @@ dwc_otg: Fix crash when fiq_enable=0
} }
--- a/drivers/usb/core/hub.c --- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c
@@ -4922,7 +4922,7 @@ static void port_event(struct usb_hub *h @@ -4906,7 +4906,7 @@ static void port_event(struct usb_hub *h
if (portchange & USB_PORT_STAT_C_OVERCURRENT) { if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
u16 status = 0, unused; u16 status = 0, unused;

View file

@ -13,7 +13,7 @@ Subject: [PATCH 066/121] Add blk_pos parameter to mmc multi_io_quirk callback
--- a/drivers/mmc/card/block.c --- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c
@@ -1413,6 +1413,7 @@ static void mmc_blk_rw_rq_prep(struct mm @@ -1415,6 +1415,7 @@ static void mmc_blk_rw_rq_prep(struct mm
brq->data.blocks = card->host->ops->multi_io_quirk(card, brq->data.blocks = card->host->ops->multi_io_quirk(card,
(rq_data_dir(req) == READ) ? (rq_data_dir(req) == READ) ?
MMC_DATA_READ : MMC_DATA_WRITE, MMC_DATA_READ : MMC_DATA_WRITE,

View file

@ -51,41 +51,7 @@ w1_therm: Back-port locking improvements from 4.2-rc1
+representing the device index in the bus starting at 0. +representing the device index in the bus starting at 0.
--- a/drivers/w1/slaves/w1_therm.c --- a/drivers/w1/slaves/w1_therm.c
+++ b/drivers/w1/slaves/w1_therm.c +++ b/drivers/w1/slaves/w1_therm.c
@@ -59,16 +59,32 @@ MODULE_ALIAS("w1-family-" __stringify(W1 @@ -92,13 +92,24 @@ static void w1_therm_remove_slave(struct
static int w1_strong_pullup = 1;
module_param_named(strong_pullup, w1_strong_pullup, int, 0);
+struct w1_therm_family_data {
+ uint8_t rom[9];
+ atomic_t refcnt;
+};
+
+/* return the address of the refcnt in the family data */
+#define THERM_REFCNT(family_data) \
+ (&((struct w1_therm_family_data*)family_data)->refcnt)
+
static int w1_therm_add_slave(struct w1_slave *sl)
{
- sl->family_data = kzalloc(9, GFP_KERNEL);
+ sl->family_data = kzalloc(sizeof(struct w1_therm_family_data),
+ GFP_KERNEL);
if (!sl->family_data)
return -ENOMEM;
+ atomic_set(THERM_REFCNT(sl->family_data), 1);
return 0;
}
static void w1_therm_remove_slave(struct w1_slave *sl)
{
+ int refcnt = atomic_sub_return(1, THERM_REFCNT(sl->family_data));
+ while(refcnt) {
+ msleep(1000);
+ refcnt = atomic_read(THERM_REFCNT(sl->family_data));
+ }
kfree(sl->family_data);
sl->family_data = NULL;
}
@@ -76,13 +92,24 @@ static void w1_therm_remove_slave(struct
static ssize_t w1_slave_show(struct device *device, static ssize_t w1_slave_show(struct device *device,
struct device_attribute *attr, char *buf); struct device_attribute *attr, char *buf);
@ -110,7 +76,7 @@ w1_therm: Back-port locking improvements from 4.2-rc1
static struct w1_family_ops w1_therm_fops = { static struct w1_family_ops w1_therm_fops = {
.add_slave = w1_therm_add_slave, .add_slave = w1_therm_add_slave,
@@ -90,6 +117,12 @@ static struct w1_family_ops w1_therm_fop @@ -106,6 +117,12 @@ static struct w1_family_ops w1_therm_fop
.groups = w1_therm_groups, .groups = w1_therm_groups,
}; };
@ -123,7 +89,7 @@ w1_therm: Back-port locking improvements from 4.2-rc1
static struct w1_family w1_therm_family_DS18S20 = { static struct w1_family w1_therm_family_DS18S20 = {
.fid = W1_THERM_DS18S20, .fid = W1_THERM_DS18S20,
.fops = &w1_therm_fops, .fops = &w1_therm_fops,
@@ -107,7 +140,7 @@ static struct w1_family w1_therm_family_ @@ -123,7 +140,7 @@ static struct w1_family w1_therm_family_
static struct w1_family w1_therm_family_DS28EA00 = { static struct w1_family w1_therm_family_DS28EA00 = {
.fid = W1_THERM_DS28EA00, .fid = W1_THERM_DS28EA00,
@ -132,86 +98,10 @@ w1_therm: Back-port locking improvements from 4.2-rc1
}; };
static struct w1_family w1_therm_family_DS1825 = { static struct w1_family w1_therm_family_DS1825 = {
@@ -194,13 +227,22 @@ static ssize_t w1_slave_show(struct devi @@ -316,6 +333,89 @@ post_unlock:
struct w1_slave *sl = dev_to_w1_slave(device); return ret;
struct w1_master *dev = sl->master; }
u8 rom[9], crc, verdict, external_power;
- int i, max_trying = 10;
+ int i, ret, max_trying = 10;
ssize_t c = PAGE_SIZE;
+ u8 *family_data = sl->family_data;
- i = mutex_lock_interruptible(&dev->bus_mutex);
- if (i != 0)
- return i;
+ ret = mutex_lock_interruptible(&dev->bus_mutex);
+ if (ret != 0)
+ goto post_unlock;
+
+ if(!sl->family_data)
+ {
+ ret = -ENODEV;
+ goto pre_unlock;
+ }
+ /* prevent the slave from going away in sleep */
+ atomic_inc(THERM_REFCNT(family_data));
memset(rom, 0, sizeof(rom));
while (max_trying--) {
@@ -230,17 +272,19 @@ static ssize_t w1_slave_show(struct devi
mutex_unlock(&dev->bus_mutex);
sleep_rem = msleep_interruptible(tm);
- if (sleep_rem != 0)
- return -EINTR;
+ if (sleep_rem != 0) {
+ ret = -EINTR;
+ goto post_unlock;
+ }
- i = mutex_lock_interruptible(&dev->bus_mutex);
- if (i != 0)
- return i;
+ ret = mutex_lock_interruptible(&dev->bus_mutex);
+ if (ret != 0)
+ goto post_unlock;
} else if (!w1_strong_pullup) {
sleep_rem = msleep_interruptible(tm);
if (sleep_rem != 0) {
- mutex_unlock(&dev->bus_mutex);
- return -EINTR;
+ ret = -EINTR;
+ goto pre_unlock;
}
}
@@ -269,19 +313,107 @@ static ssize_t w1_slave_show(struct devi
c -= snprintf(buf + PAGE_SIZE - c, c, ": crc=%02x %s\n",
crc, (verdict) ? "YES" : "NO");
if (verdict)
- memcpy(sl->family_data, rom, sizeof(rom));
+ memcpy(family_data, rom, sizeof(rom));
else
dev_warn(device, "Read failed CRC check\n");
for (i = 0; i < 9; ++i)
c -= snprintf(buf + PAGE_SIZE - c, c, "%02x ",
- ((u8 *)sl->family_data)[i]);
+ ((u8 *)family_data)[i]);
c -= snprintf(buf + PAGE_SIZE - c, c, "t=%d\n",
w1_convert_temp(rom, sl->family->fid));
+ ret = PAGE_SIZE - c;
+
+pre_unlock:
mutex_unlock(&dev->bus_mutex);
+post_unlock:
+ atomic_dec(THERM_REFCNT(family_data));
+ return ret;
+}
+
+#define W1_42_CHAIN 0x99 +#define W1_42_CHAIN 0x99
+#define W1_42_CHAIN_OFF 0x3C +#define W1_42_CHAIN_OFF 0x3C
+#define W1_42_CHAIN_OFF_INV 0xC3 +#define W1_42_CHAIN_OFF_INV 0xC3
@ -289,10 +179,12 @@ w1_therm: Back-port locking improvements from 4.2-rc1
+ mutex_unlock(&sl->master->bus_mutex); + mutex_unlock(&sl->master->bus_mutex);
+ +
+ c -= snprintf(buf + PAGE_SIZE - c, c, "%d\n", seq); + c -= snprintf(buf + PAGE_SIZE - c, c, "%d\n", seq);
return PAGE_SIZE - c; + return PAGE_SIZE - c;
+error: +error:
+ mutex_unlock(&sl->master->bus_mutex); + mutex_unlock(&sl->master->bus_mutex);
+ return -EIO; + return -EIO;
} +}
+
static int __init w1_therm_init(void) static int __init w1_therm_init(void)
{
int err, i;

View file

@ -1,148 +0,0 @@
Patch by: Miklos Szeredi <miklos@szeredi.hu>
Some filesystems (e.g. jffs2) lock the same resources for both readdir
and lookup, leading to a deadlock in ovl_cache_entry_new, which is called
from the filldir, and calls lookup itself.
--- a/fs/overlayfs/readdir.c
+++ b/fs/overlayfs/readdir.c
@@ -23,6 +23,7 @@ struct ovl_cache_entry {
u64 ino;
struct list_head l_node;
struct rb_node node;
+ struct ovl_cache_entry *next_maybe_whiteout;
bool is_whiteout;
char name[];
};
@@ -39,7 +40,7 @@ struct ovl_readdir_data {
struct rb_root root;
struct list_head *list;
struct list_head middle;
- struct dentry *dir;
+ struct ovl_cache_entry *first_maybe_whiteout;
int count;
int err;
};
@@ -79,7 +80,7 @@ static struct ovl_cache_entry *ovl_cache
return NULL;
}
-static struct ovl_cache_entry *ovl_cache_entry_new(struct dentry *dir,
+static struct ovl_cache_entry *ovl_cache_entry_new(struct ovl_readdir_data *rdd,
const char *name, int len,
u64 ino, unsigned int d_type)
{
@@ -98,29 +99,8 @@ static struct ovl_cache_entry *ovl_cache
p->is_whiteout = false;
if (d_type == DT_CHR) {
- struct dentry *dentry;
- const struct cred *old_cred;
- struct cred *override_cred;
-
- override_cred = prepare_creds();
- if (!override_cred) {
- kfree(p);
- return NULL;
- }
-
- /*
- * CAP_DAC_OVERRIDE for lookup
- */
- cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE);
- old_cred = override_creds(override_cred);
-
- dentry = lookup_one_len(name, dir, len);
- if (!IS_ERR(dentry)) {
- p->is_whiteout = ovl_is_whiteout(dentry);
- dput(dentry);
- }
- revert_creds(old_cred);
- put_cred(override_cred);
+ p->next_maybe_whiteout = rdd->first_maybe_whiteout;
+ rdd->first_maybe_whiteout = p;
}
return p;
}
@@ -148,7 +128,7 @@ static int ovl_cache_entry_add_rb(struct
return 0;
}
- p = ovl_cache_entry_new(rdd->dir, name, len, ino, d_type);
+ p = ovl_cache_entry_new(rdd, name, len, ino, d_type);
if (p == NULL)
return -ENOMEM;
@@ -169,7 +149,7 @@ static int ovl_fill_lower(struct ovl_rea
if (p) {
list_move_tail(&p->l_node, &rdd->middle);
} else {
- p = ovl_cache_entry_new(rdd->dir, name, namelen, ino, d_type);
+ p = ovl_cache_entry_new(rdd, name, namelen, ino, d_type);
if (p == NULL)
rdd->err = -ENOMEM;
else
@@ -219,6 +199,43 @@ static int ovl_fill_merge(struct dir_con
return ovl_fill_lower(rdd, name, namelen, offset, ino, d_type);
}
+static int ovl_check_whiteouts(struct dentry *dir, struct ovl_readdir_data *rdd)
+{
+ int err = 0;
+
+ mutex_lock(&dir->d_inode->i_mutex);
+ while (rdd->first_maybe_whiteout) {
+ struct dentry *dentry;
+ const struct cred *old_cred;
+ struct cred *override_cred;
+ struct ovl_cache_entry *p = rdd->first_maybe_whiteout;
+
+ rdd->first_maybe_whiteout = p->next_maybe_whiteout;
+
+ override_cred = prepare_creds();
+ if (!override_cred) {
+ err = -ENOMEM;
+ break;
+ }
+ /*
+ * CAP_DAC_OVERRIDE for lookup
+ */
+ cap_raise(override_cred->cap_effective, CAP_DAC_OVERRIDE);
+ old_cred = override_creds(override_cred);
+
+ dentry = lookup_one_len(p->name, dir, p->len);
+ if (!IS_ERR(dentry)) {
+ p->is_whiteout = ovl_is_whiteout(dentry);
+ dput(dentry);
+ }
+ revert_creds(old_cred);
+ put_cred(override_cred);
+ }
+ mutex_unlock(&dir->d_inode->i_mutex);
+
+ return err;
+}
+
static inline int ovl_dir_read(struct path *realpath,
struct ovl_readdir_data *rdd)
{
@@ -229,7 +246,7 @@ static inline int ovl_dir_read(struct pa
if (IS_ERR(realfile))
return PTR_ERR(realfile);
- rdd->dir = realpath->dentry;
+ rdd->first_maybe_whiteout = NULL;
rdd->ctx.pos = 0;
do {
rdd->count = 0;
@@ -238,6 +255,10 @@ static inline int ovl_dir_read(struct pa
if (err >= 0)
err = rdd->err;
} while (!err && rdd->count);
+
+ if (!err && rdd->first_maybe_whiteout)
+ err = ovl_check_whiteouts(realpath->dentry, rdd);
+
fput(realfile);
return err;

View file

@ -69,7 +69,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
/** /**
* ata_build_rw_tf - Build ATA taskfile for given read/write request * ata_build_rw_tf - Build ATA taskfile for given read/write request
* @tf: Target ATA taskfile * @tf: Target ATA taskfile
@@ -4774,6 +4787,9 @@ struct ata_queued_cmd *ata_qc_new_init(s @@ -4789,6 +4802,9 @@ struct ata_queued_cmd *ata_qc_new_init(s
if (tag < 0) if (tag < 0)
return NULL; return NULL;
} }
@ -79,7 +79,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
qc = __ata_qc_from_tag(ap, tag); qc = __ata_qc_from_tag(ap, tag);
qc->tag = tag; qc->tag = tag;
@@ -5671,6 +5687,9 @@ struct ata_port *ata_port_alloc(struct a @@ -5686,6 +5702,9 @@ struct ata_port *ata_port_alloc(struct a
ap->stats.unhandled_irq = 1; ap->stats.unhandled_irq = 1;
ap->stats.idle_irq = 1; ap->stats.idle_irq = 1;
#endif #endif
@ -89,7 +89,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
ata_sff_port_init(ap); ata_sff_port_init(ap);
return ap; return ap;
@@ -5692,6 +5711,12 @@ static void ata_host_release(struct devi @@ -5707,6 +5726,12 @@ static void ata_host_release(struct devi
kfree(ap->pmp_link); kfree(ap->pmp_link);
kfree(ap->slave_link); kfree(ap->slave_link);
@ -102,7 +102,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
kfree(ap); kfree(ap);
host->ports[i] = NULL; host->ports[i] = NULL;
} }
@@ -6138,7 +6163,23 @@ int ata_host_register(struct ata_host *h @@ -6153,7 +6178,23 @@ int ata_host_register(struct ata_host *h
host->ports[i]->print_id = atomic_inc_return(&ata_print_id); host->ports[i]->print_id = atomic_inc_return(&ata_print_id);
host->ports[i]->local_port_no = i + 1; host->ports[i]->local_port_no = i + 1;
} }
@ -138,7 +138,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
/* /*
* Define if arch has non-standard setup. This is a _PCI_ standard * Define if arch has non-standard setup. This is a _PCI_ standard
@@ -873,6 +876,12 @@ struct ata_port { @@ -876,6 +879,12 @@ struct ata_port {
#ifdef CONFIG_ATA_ACPI #ifdef CONFIG_ATA_ACPI
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */ struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif #endif

View file

@ -47,7 +47,7 @@ drivers/clk/clk.c | 34 ++++++++++++++++++++++------------
--- a/drivers/clk/clk.c --- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c +++ b/drivers/clk/clk.c
@@ -1743,21 +1743,24 @@ static struct clk_core *clk_propagate_ra @@ -1744,21 +1744,24 @@ static struct clk_core *clk_propagate_ra
* walk down a subtree and set the new rates notifying the rate * walk down a subtree and set the new rates notifying the rate
* change on the way * change on the way
*/ */
@ -79,7 +79,7 @@ drivers/clk/clk.c | 34 ++++++++++++++++++++++------------
if (clk->new_parent && clk->new_parent != clk->parent) { if (clk->new_parent && clk->new_parent != clk->parent) {
old_parent = __clk_set_parent_before(clk, clk->new_parent); old_parent = __clk_set_parent_before(clk, clk->new_parent);
@@ -1783,7 +1786,7 @@ static void clk_change_rate(struct clk_c @@ -1784,7 +1787,7 @@ static void clk_change_rate(struct clk_c
trace_clk_set_rate_complete(clk, clk->new_rate); trace_clk_set_rate_complete(clk, clk->new_rate);
@ -88,7 +88,7 @@ drivers/clk/clk.c | 34 ++++++++++++++++++++++------------
if (clk->notifier_count && old_rate != clk->rate) if (clk->notifier_count && old_rate != clk->rate)
__clk_notify(clk, POST_RATE_CHANGE, old_rate, clk->rate); __clk_notify(clk, POST_RATE_CHANGE, old_rate, clk->rate);
@@ -1796,12 +1799,13 @@ static void clk_change_rate(struct clk_c @@ -1797,12 +1800,13 @@ static void clk_change_rate(struct clk_c
/* Skip children who will be reparented to another clock */ /* Skip children who will be reparented to another clock */
if (child->new_parent && child->new_parent != clk) if (child->new_parent && child->new_parent != clk)
continue; continue;
@ -105,7 +105,7 @@ drivers/clk/clk.c | 34 ++++++++++++++++++++++------------
} }
static int clk_core_set_rate_nolock(struct clk_core *clk, static int clk_core_set_rate_nolock(struct clk_core *clk,
@@ -1810,6 +1814,7 @@ static int clk_core_set_rate_nolock(stru @@ -1811,6 +1815,7 @@ static int clk_core_set_rate_nolock(stru
struct clk_core *top, *fail_clk; struct clk_core *top, *fail_clk;
unsigned long rate = req_rate; unsigned long rate = req_rate;
int ret = 0; int ret = 0;
@ -113,7 +113,7 @@ drivers/clk/clk.c | 34 ++++++++++++++++++++++------------
if (!clk) if (!clk)
return 0; return 0;
@@ -1835,8 +1840,13 @@ static int clk_core_set_rate_nolock(stru @@ -1836,8 +1841,13 @@ static int clk_core_set_rate_nolock(stru
return -EBUSY; return -EBUSY;
} }

View file

@ -47,7 +47,7 @@ handles that problem on Krait, but on other platforms it won't work.
struct clk_core *new_parent; struct clk_core *new_parent;
struct clk_core *new_child; struct clk_core *new_child;
unsigned long flags; unsigned long flags;
@@ -1595,7 +1598,8 @@ out: @@ -1596,7 +1599,8 @@ out:
static void clk_calc_subtree(struct clk_core *clk, unsigned long new_rate, static void clk_calc_subtree(struct clk_core *clk, unsigned long new_rate,
struct clk_core *new_parent, u8 p_index) struct clk_core *new_parent, u8 p_index)
{ {
@ -57,7 +57,7 @@ handles that problem on Krait, but on other platforms it won't work.
clk->new_rate = new_rate; clk->new_rate = new_rate;
clk->new_parent = new_parent; clk->new_parent = new_parent;
@@ -1605,6 +1609,18 @@ static void clk_calc_subtree(struct clk_ @@ -1606,6 +1610,18 @@ static void clk_calc_subtree(struct clk_
if (new_parent && new_parent != clk->parent) if (new_parent && new_parent != clk->parent)
new_parent->new_child = clk; new_parent->new_child = clk;
@ -76,7 +76,7 @@ handles that problem on Krait, but on other platforms it won't work.
hlist_for_each_entry(child, &clk->children, child_node) { hlist_for_each_entry(child, &clk->children, child_node) {
child->new_rate = clk_recalc(child, new_rate); child->new_rate = clk_recalc(child, new_rate);
clk_calc_subtree(child, child->new_rate, NULL, 0); clk_calc_subtree(child, child->new_rate, NULL, 0);
@@ -1709,14 +1725,43 @@ static struct clk_core *clk_propagate_ra @@ -1710,14 +1726,43 @@ static struct clk_core *clk_propagate_ra
unsigned long event) unsigned long event)
{ {
struct clk_core *child, *tmp_clk, *fail_clk = NULL; struct clk_core *child, *tmp_clk, *fail_clk = NULL;
@ -123,7 +123,7 @@ handles that problem on Krait, but on other platforms it won't work.
fail_clk = clk; fail_clk = clk;
} }
@@ -1762,7 +1807,8 @@ clk_change_rate(struct clk_core *clk, un @@ -1763,7 +1808,8 @@ clk_change_rate(struct clk_core *clk, un
old_rate = clk->rate; old_rate = clk->rate;
@ -133,7 +133,7 @@ handles that problem on Krait, but on other platforms it won't work.
old_parent = __clk_set_parent_before(clk, clk->new_parent); old_parent = __clk_set_parent_before(clk, clk->new_parent);
trace_clk_set_parent(clk, clk->new_parent); trace_clk_set_parent(clk, clk->new_parent);
@@ -1788,9 +1834,6 @@ clk_change_rate(struct clk_core *clk, un @@ -1789,9 +1835,6 @@ clk_change_rate(struct clk_core *clk, un
clk->rate = clk->new_rate; clk->rate = clk->new_rate;
@ -143,7 +143,7 @@ handles that problem on Krait, but on other platforms it won't work.
/* /*
* Use safe iteration, as change_rate can actually swap parents * Use safe iteration, as change_rate can actually swap parents
* for certain clock types. * for certain clock types.
@@ -1850,6 +1893,8 @@ static int clk_core_set_rate_nolock(stru @@ -1851,6 +1894,8 @@ static int clk_core_set_rate_nolock(stru
clk->req_rate = req_rate; clk->req_rate = req_rate;

View file

@ -109,7 +109,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
{ {
--- a/include/linux/gpio/consumer.h --- a/include/linux/gpio/consumer.h
+++ b/include/linux/gpio/consumer.h +++ b/include/linux/gpio/consumer.h
@@ -446,6 +446,7 @@ static inline int desc_to_gpio(const str @@ -461,6 +461,7 @@ static inline struct gpio_desc *devm_get
#if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS) #if IS_ENABLED(CONFIG_GPIOLIB) && IS_ENABLED(CONFIG_GPIO_SYSFS)
@ -117,7 +117,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
int gpiod_export(struct gpio_desc *desc, bool direction_may_change); int gpiod_export(struct gpio_desc *desc, bool direction_may_change);
int gpiod_export_link(struct device *dev, const char *name, int gpiod_export_link(struct device *dev, const char *name,
struct gpio_desc *desc); struct gpio_desc *desc);
@@ -454,6 +455,13 @@ void gpiod_unexport(struct gpio_desc *de @@ -469,6 +470,13 @@ void gpiod_unexport(struct gpio_desc *de
#else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */ #else /* CONFIG_GPIOLIB && CONFIG_GPIO_SYSFS */

View file

@ -20,7 +20,7 @@ Subject: [PATCH 32/36] USB: fix roothub for IFXHCD
choice choice
--- a/drivers/usb/core/hub.c --- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c
@@ -4314,7 +4314,7 @@ hub_port_init (struct usb_hub *hub, stru @@ -4298,7 +4298,7 @@ hub_port_init (struct usb_hub *hub, stru
udev->ttport = hdev->ttport; udev->ttport = hdev->ttport;
} else if (udev->speed != USB_SPEED_HIGH } else if (udev->speed != USB_SPEED_HIGH
&& hdev->speed == USB_SPEED_HIGH) { && hdev->speed == USB_SPEED_HIGH) {

View file

@ -1,5 +1,3 @@
diff --git a/arch/arm/mach-mxs/Kconfig b/arch/arm/mach-mxs/Kconfig
index 8479413..bf04d38 100644
--- a/arch/arm/mach-mxs/Kconfig --- a/arch/arm/mach-mxs/Kconfig
+++ b/arch/arm/mach-mxs/Kconfig +++ b/arch/arm/mach-mxs/Kconfig
@@ -17,6 +17,7 @@ config ARCH_MXS @@ -17,6 +17,7 @@ config ARCH_MXS

View file

@ -1,5 +1,3 @@
diff --git a/drivers/power/Kconfig b/drivers/power/Kconfig
index 4091fb0..0fcc158 100644
--- a/drivers/power/Kconfig --- a/drivers/power/Kconfig
+++ b/drivers/power/Kconfig +++ b/drivers/power/Kconfig
@@ -43,6 +43,14 @@ config MAX8925_POWER @@ -43,6 +43,14 @@ config MAX8925_POWER
@ -17,11 +15,9 @@ index 4091fb0..0fcc158 100644
config WM831X_BACKUP config WM831X_BACKUP
tristate "WM831X backup battery charger support" tristate "WM831X backup battery charger support"
depends on MFD_WM831X depends on MFD_WM831X
diff --git a/drivers/power/Makefile b/drivers/power/Makefile
index b7b0181..8edcad7 100644
--- a/drivers/power/Makefile --- a/drivers/power/Makefile
+++ b/drivers/power/Makefile +++ b/drivers/power/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_GENERIC_ADC_BATTERY) += generic-adc-battery.o @@ -10,6 +10,7 @@ obj-$(CONFIG_GENERIC_ADC_BATTERY) += gen
obj-$(CONFIG_PDA_POWER) += pda_power.o obj-$(CONFIG_PDA_POWER) += pda_power.o
obj-$(CONFIG_APM_POWER) += apm_power.o obj-$(CONFIG_APM_POWER) += apm_power.o
obj-$(CONFIG_MAX8925_POWER) += max8925_power.o obj-$(CONFIG_MAX8925_POWER) += max8925_power.o
@ -29,9 +25,6 @@ index b7b0181..8edcad7 100644
obj-$(CONFIG_WM831X_BACKUP) += wm831x_backup.o obj-$(CONFIG_WM831X_BACKUP) += wm831x_backup.o
obj-$(CONFIG_WM831X_POWER) += wm831x_power.o obj-$(CONFIG_WM831X_POWER) += wm831x_power.o
obj-$(CONFIG_WM8350_POWER) += wm8350_power.o obj-$(CONFIG_WM8350_POWER) += wm8350_power.o
diff --git a/drivers/power/mxs_power.c b/drivers/power/mxs_power.c
new file mode 100644
index 0000000..669bfb1
--- /dev/null --- /dev/null
+++ b/drivers/power/mxs_power.c +++ b/drivers/power/mxs_power.c
@@ -0,0 +1,136 @@ @@ -0,0 +1,136 @@

View file

@ -1,5 +1,3 @@
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index a6f116a..7b525f5 100644
--- a/drivers/regulator/Kconfig --- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig
@@ -450,6 +450,14 @@ config REGULATOR_MT6397 @@ -450,6 +450,14 @@ config REGULATOR_MT6397
@ -17,11 +15,9 @@ index a6f116a..7b525f5 100644
config REGULATOR_PALMAS config REGULATOR_PALMAS
tristate "TI Palmas PMIC Regulators" tristate "TI Palmas PMIC Regulators"
depends on MFD_PALMAS depends on MFD_PALMAS
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index 2c4da15..a3ebf23 100644
--- a/drivers/regulator/Makefile --- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile +++ b/drivers/regulator/Makefile
@@ -60,6 +60,7 @@ obj-$(CONFIG_REGULATOR_MC13783) += mc13783-regulator.o @@ -60,6 +60,7 @@ obj-$(CONFIG_REGULATOR_MC13783) += mc137
obj-$(CONFIG_REGULATOR_MC13892) += mc13892-regulator.o obj-$(CONFIG_REGULATOR_MC13892) += mc13892-regulator.o
obj-$(CONFIG_REGULATOR_MC13XXX_CORE) += mc13xxx-regulator-core.o obj-$(CONFIG_REGULATOR_MC13XXX_CORE) += mc13xxx-regulator-core.o
obj-$(CONFIG_REGULATOR_MT6397) += mt6397-regulator.o obj-$(CONFIG_REGULATOR_MT6397) += mt6397-regulator.o
@ -29,9 +25,6 @@ index 2c4da15..a3ebf23 100644
obj-$(CONFIG_REGULATOR_QCOM_RPM) += qcom_rpm-regulator.o obj-$(CONFIG_REGULATOR_QCOM_RPM) += qcom_rpm-regulator.o
obj-$(CONFIG_REGULATOR_PALMAS) += palmas-regulator.o obj-$(CONFIG_REGULATOR_PALMAS) += palmas-regulator.o
obj-$(CONFIG_REGULATOR_PFUZE100) += pfuze100-regulator.o obj-$(CONFIG_REGULATOR_PFUZE100) += pfuze100-regulator.o
diff --git a/drivers/regulator/mxs-regulator.c b/drivers/regulator/mxs-regulator.c
new file mode 100644
index 0000000..e53707b
--- /dev/null --- /dev/null
+++ b/drivers/regulator/mxs-regulator.c +++ b/drivers/regulator/mxs-regulator.c
@@ -0,0 +1,540 @@ @@ -0,0 +1,540 @@

View file

@ -1,5 +1,3 @@
diff --git a/arch/arm/boot/dts/imx23.dtsi b/arch/arm/boot/dts/imx23.dtsi
index bbcfb5a..efdd702 100644
--- a/arch/arm/boot/dts/imx23.dtsi --- a/arch/arm/boot/dts/imx23.dtsi
+++ b/arch/arm/boot/dts/imx23.dtsi +++ b/arch/arm/boot/dts/imx23.dtsi
@@ -404,8 +404,46 @@ @@ -404,8 +404,46 @@
@ -50,8 +48,6 @@ index bbcfb5a..efdd702 100644
}; };
saif1: saif@80046000 { saif1: saif@80046000 {
diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi
index 25e25f8..378b1f2 100644
--- a/arch/arm/boot/dts/imx28.dtsi --- a/arch/arm/boot/dts/imx28.dtsi
+++ b/arch/arm/boot/dts/imx28.dtsi +++ b/arch/arm/boot/dts/imx28.dtsi
@@ -1035,8 +1035,46 @@ @@ -1035,8 +1035,46 @@

View file

@ -1,6 +1,6 @@
--- a/arch/arm/boot/dts/imx23.dtsi --- a/arch/arm/boot/dts/imx23.dtsi
+++ b/arch/arm/boot/dts/imx23.dtsi +++ b/arch/arm/boot/dts/imx23.dtsi
@@ -146,6 +146,39 @@ @@ -147,6 +147,39 @@
fsl,pull-up = <MXS_PULL_DISABLE>; fsl,pull-up = <MXS_PULL_DISABLE>;
}; };
@ -40,7 +40,7 @@
auart0_pins_a: auart0@0 { auart0_pins_a: auart0@0 {
reg = <0>; reg = <0>;
fsl,pinmux-ids = < fsl,pinmux-ids = <
@@ -444,7 +477,12 @@ @@ -484,7 +517,12 @@
}; };
i2c@80058000 { i2c@80058000 {