mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-10-31 18:09:19 +00:00
ASoC: Updates for v3.10
A few more bug fixes, the DAPM clock fix is actually a driver specific one since currently there's only one user of the clock support due to the problems relying on the clock API. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJRg3/MAAoJELSic+t+oim9W+cP/3NERwICTNvllNOrZXii7akJ DnzzIaw0fEJ2+hIXJzU/lEI/KjqIT7SADQRWg+eid8ZrjaUB6LXUPPuv67V4TseD 1+8ClQp1cDg1KepBcD2S1liVjPKvW64IpXwZNgLGigW6PP21yK8+DoQvVKPVB+sP q72jntTzy9qWenmjygpPEYDeOfe5EM7hAaa2tFuYIPEL+EkMOXXvjx8ojylwQV6V 5xFQ+CBSS8WHz7CKlawF3JH8TkcFGZNT9Hibhv1fpGM+iJDCsh/+MNiBwOpO+1wk eCJSiCWWTGgVK+3AvlSIQr8ml0EDEbS8Aq6bbJb9w4wgV65oFt2hOxOpkcK/8NcP qnKNYc3nRQsb3H+dObMdQNPWDjOfwsolKUOjetxosRIq4Pzm8afY96gu06EqTnw9 XYXqoSAVpCuPDpmlu87Lajoj4T5XNq3G7ONAMpsAfMrl/xxmV11Wrs4/7S0o3Csb tNhO5XjLbFNTw9nVT6qZQViH7Bm1ItDM2B/tLb1yqnlgBAjNW/WlUyFg4bE4Qeyr hUg7DwvYPSVnr25t8RmPMmB2MdD4N+PfRy+aIEIuE9KMeYUTPVr5kFdDP7uA7Yw2 Dn7lmAdDEq33zfTGYhGWs87IdxhD3VyEWveR6alrtBW0LS7ArtsPlWKhA074XuJj AmAU6RS3+75nymA9ucY+ =WQzu -----END PGP SIGNATURE----- Merge tag 'asoc-v3.10-4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-next ASoC: Updates for v3.10 A few more bug fixes, the DAPM clock fix is actually a driver specific one since currently there's only one user of the clock support due to the problems relying on the clock API.
This commit is contained in:
commit
f91eeeb595
27 changed files with 142 additions and 69 deletions
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 3
|
||||
PATCHLEVEL = 9
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc8
|
||||
EXTRAVERSION =
|
||||
NAME = Unicycling Gorilla
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -2714,16 +2714,22 @@ static struct omap_ocp2scp_dev ocp2scp_dev_attr[] = {
|
|||
{ }
|
||||
};
|
||||
|
||||
static struct omap_hwmod_opt_clk ocp2scp_usb_phy_opt_clks[] = {
|
||||
{ .role = "48mhz", .clk = "ocp2scp_usb_phy_phy_48m" },
|
||||
};
|
||||
|
||||
/* ocp2scp_usb_phy */
|
||||
static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
|
||||
.name = "ocp2scp_usb_phy",
|
||||
.class = &omap44xx_ocp2scp_hwmod_class,
|
||||
.clkdm_name = "l3_init_clkdm",
|
||||
.main_clk = "func_48m_fclk",
|
||||
/*
|
||||
* ocp2scp_usb_phy_phy_48m is provided by the OMAP4 PRCM IP
|
||||
* block as an "optional clock," and normally should never be
|
||||
* specified as the main_clk for an OMAP IP block. However it
|
||||
* turns out that this clock is actually the main clock for
|
||||
* the ocp2scp_usb_phy IP block:
|
||||
* http://lists.infradead.org/pipermail/linux-arm-kernel/2012-September/119943.html
|
||||
* So listing ocp2scp_usb_phy_phy_48m as a main_clk here seems
|
||||
* to be the best workaround.
|
||||
*/
|
||||
.main_clk = "ocp2scp_usb_phy_phy_48m",
|
||||
.prcm = {
|
||||
.omap4 = {
|
||||
.clkctrl_offs = OMAP4_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL_OFFSET,
|
||||
|
@ -2732,8 +2738,6 @@ static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
|
|||
},
|
||||
},
|
||||
.dev_attr = ocp2scp_dev_attr,
|
||||
.opt_clks = ocp2scp_usb_phy_opt_clks,
|
||||
.opt_clks_cnt = ARRAY_SIZE(ocp2scp_usb_phy_opt_clks),
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
#define PAGE_SHIFT 16
|
||||
#endif
|
||||
#define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT)
|
||||
#define PAGE_MASK (~(PAGE_SIZE - 1))
|
||||
#define PAGE_MASK (~((1 << PAGE_SHIFT) - 1))
|
||||
|
||||
#ifdef CONFIG_MIPS_HUGE_TLB_SUPPORT
|
||||
#define HPAGE_SHIFT (PAGE_SHIFT + PAGE_SHIFT - 3)
|
||||
|
|
|
@ -65,8 +65,10 @@ ifndef CONFIG_FUNCTION_TRACER
|
|||
endif
|
||||
|
||||
# Use long jumps instead of long branches (needed if your linker fails to
|
||||
# link a too big vmlinux executable)
|
||||
cflags-$(CONFIG_MLONGCALLS) += -mlong-calls
|
||||
# link a too big vmlinux executable). Not enabled for building modules.
|
||||
ifdef CONFIG_MLONGCALLS
|
||||
KBUILD_CFLAGS_KERNEL += -mlong-calls
|
||||
endif
|
||||
|
||||
# select which processor to optimise for
|
||||
cflags-$(CONFIG_PA7100) += -march=1.1 -mschedule=7100
|
||||
|
|
|
@ -140,7 +140,10 @@ static inline void *kmap(struct page *page)
|
|||
return page_address(page);
|
||||
}
|
||||
|
||||
#define kunmap(page) kunmap_parisc(page_address(page))
|
||||
static inline void kunmap(struct page *page)
|
||||
{
|
||||
kunmap_parisc(page_address(page));
|
||||
}
|
||||
|
||||
static inline void *kmap_atomic(struct page *page)
|
||||
{
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
#include <asm/processor.h>
|
||||
#include <asm/cache.h>
|
||||
|
||||
extern spinlock_t pa_dbit_lock;
|
||||
|
||||
/*
|
||||
* kern_addr_valid(ADDR) tests if ADDR is pointing to valid kernel
|
||||
* memory. For the return value to be meaningful, ADDR must be >=
|
||||
|
@ -44,8 +46,11 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);
|
|||
|
||||
#define set_pte_at(mm, addr, ptep, pteval) \
|
||||
do { \
|
||||
unsigned long flags; \
|
||||
spin_lock_irqsave(&pa_dbit_lock, flags); \
|
||||
set_pte(ptep, pteval); \
|
||||
purge_tlb_entries(mm, addr); \
|
||||
spin_unlock_irqrestore(&pa_dbit_lock, flags); \
|
||||
} while (0)
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
@ -435,48 +440,46 @@ extern void update_mmu_cache(struct vm_area_struct *, unsigned long, pte_t *);
|
|||
|
||||
static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
pte_t pte;
|
||||
unsigned long flags;
|
||||
|
||||
if (!pte_young(*ptep))
|
||||
return 0;
|
||||
return test_and_clear_bit(xlate_pabit(_PAGE_ACCESSED_BIT), &pte_val(*ptep));
|
||||
#else
|
||||
pte_t pte = *ptep;
|
||||
if (!pte_young(pte))
|
||||
return 0;
|
||||
set_pte_at(vma->vm_mm, addr, ptep, pte_mkold(pte));
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
extern spinlock_t pa_dbit_lock;
|
||||
spin_lock_irqsave(&pa_dbit_lock, flags);
|
||||
pte = *ptep;
|
||||
if (!pte_young(pte)) {
|
||||
spin_unlock_irqrestore(&pa_dbit_lock, flags);
|
||||
return 0;
|
||||
}
|
||||
set_pte(ptep, pte_mkold(pte));
|
||||
purge_tlb_entries(vma->vm_mm, addr);
|
||||
spin_unlock_irqrestore(&pa_dbit_lock, flags);
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct mm_struct;
|
||||
static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
||||
{
|
||||
pte_t old_pte;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock(&pa_dbit_lock);
|
||||
spin_lock_irqsave(&pa_dbit_lock, flags);
|
||||
old_pte = *ptep;
|
||||
pte_clear(mm,addr,ptep);
|
||||
spin_unlock(&pa_dbit_lock);
|
||||
purge_tlb_entries(mm, addr);
|
||||
spin_unlock_irqrestore(&pa_dbit_lock, flags);
|
||||
|
||||
return old_pte;
|
||||
}
|
||||
|
||||
static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addr, pte_t *ptep)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
unsigned long new, old;
|
||||
|
||||
do {
|
||||
old = pte_val(*ptep);
|
||||
new = pte_val(pte_wrprotect(__pte (old)));
|
||||
} while (cmpxchg((unsigned long *) ptep, old, new) != old);
|
||||
unsigned long flags;
|
||||
spin_lock_irqsave(&pa_dbit_lock, flags);
|
||||
set_pte(ptep, pte_wrprotect(*ptep));
|
||||
purge_tlb_entries(mm, addr);
|
||||
#else
|
||||
pte_t old_pte = *ptep;
|
||||
set_pte_at(mm, addr, ptep, pte_wrprotect(old_pte));
|
||||
#endif
|
||||
spin_unlock_irqrestore(&pa_dbit_lock, flags);
|
||||
}
|
||||
|
||||
#define pte_same(A,B) (pte_val(A) == pte_val(B))
|
||||
|
|
|
@ -181,30 +181,24 @@ struct exception_data {
|
|||
#if !defined(CONFIG_64BIT)
|
||||
|
||||
#define __put_kernel_asm64(__val,ptr) do { \
|
||||
u64 __val64 = (u64)(__val); \
|
||||
u32 hi = (__val64) >> 32; \
|
||||
u32 lo = (__val64) & 0xffffffff; \
|
||||
__asm__ __volatile__ ( \
|
||||
"\n1:\tstw %2,0(%1)" \
|
||||
"\n2:\tstw %3,4(%1)\n\t" \
|
||||
"\n2:\tstw %R2,4(%1)\n\t" \
|
||||
ASM_EXCEPTIONTABLE_ENTRY(1b,fixup_put_user_skip_2)\
|
||||
ASM_EXCEPTIONTABLE_ENTRY(2b,fixup_put_user_skip_1)\
|
||||
: "=r"(__pu_err) \
|
||||
: "r"(ptr), "r"(hi), "r"(lo), "0"(__pu_err) \
|
||||
: "r"(ptr), "r"(__val), "0"(__pu_err) \
|
||||
: "r1"); \
|
||||
} while (0)
|
||||
|
||||
#define __put_user_asm64(__val,ptr) do { \
|
||||
u64 __val64 = (u64)(__val); \
|
||||
u32 hi = (__val64) >> 32; \
|
||||
u32 lo = (__val64) & 0xffffffff; \
|
||||
__asm__ __volatile__ ( \
|
||||
"\n1:\tstw %2,0(%%sr3,%1)" \
|
||||
"\n2:\tstw %3,4(%%sr3,%1)\n\t" \
|
||||
"\n2:\tstw %R2,4(%%sr3,%1)\n\t" \
|
||||
ASM_EXCEPTIONTABLE_ENTRY(1b,fixup_put_user_skip_2)\
|
||||
ASM_EXCEPTIONTABLE_ENTRY(2b,fixup_put_user_skip_1)\
|
||||
: "=r"(__pu_err) \
|
||||
: "r"(ptr), "r"(hi), "r"(lo), "0"(__pu_err) \
|
||||
: "r"(ptr), "r"(__val), "0"(__pu_err) \
|
||||
: "r1"); \
|
||||
} while (0)
|
||||
|
||||
|
|
|
@ -421,14 +421,11 @@ void purge_tlb_entries(struct mm_struct *mm, unsigned long addr)
|
|||
/* Note: purge_tlb_entries can be called at startup with
|
||||
no context. */
|
||||
|
||||
/* Disable preemption while we play with %sr1. */
|
||||
preempt_disable();
|
||||
mtsp(mm->context, 1);
|
||||
purge_tlb_start(flags);
|
||||
mtsp(mm->context, 1);
|
||||
pdtlb(addr);
|
||||
pitlb(addr);
|
||||
purge_tlb_end(flags);
|
||||
preempt_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(purge_tlb_entries);
|
||||
|
||||
|
|
|
@ -120,11 +120,13 @@ extern void __ashrdi3(void);
|
|||
extern void __ashldi3(void);
|
||||
extern void __lshrdi3(void);
|
||||
extern void __muldi3(void);
|
||||
extern void __ucmpdi2(void);
|
||||
|
||||
EXPORT_SYMBOL(__ashrdi3);
|
||||
EXPORT_SYMBOL(__ashldi3);
|
||||
EXPORT_SYMBOL(__lshrdi3);
|
||||
EXPORT_SYMBOL(__muldi3);
|
||||
EXPORT_SYMBOL(__ucmpdi2);
|
||||
|
||||
asmlinkage void * __canonicalize_funcptr_for_compare(void *);
|
||||
EXPORT_SYMBOL(__canonicalize_funcptr_for_compare);
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# Makefile for parisc-specific library files
|
||||
#
|
||||
|
||||
lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o
|
||||
lib-y := lusercopy.o bitops.o checksum.o io.o memset.o fixup.o memcpy.o \
|
||||
ucmpdi2.o
|
||||
|
||||
obj-y := iomap.o
|
||||
|
|
25
arch/parisc/lib/ucmpdi2.c
Normal file
25
arch/parisc/lib/ucmpdi2.c
Normal file
|
@ -0,0 +1,25 @@
|
|||
#include <linux/module.h>
|
||||
|
||||
union ull_union {
|
||||
unsigned long long ull;
|
||||
struct {
|
||||
unsigned int high;
|
||||
unsigned int low;
|
||||
} ui;
|
||||
};
|
||||
|
||||
int __ucmpdi2(unsigned long long a, unsigned long long b)
|
||||
{
|
||||
union ull_union au = {.ull = a};
|
||||
union ull_union bu = {.ull = b};
|
||||
|
||||
if (au.ui.high < bu.ui.high)
|
||||
return 0;
|
||||
else if (au.ui.high > bu.ui.high)
|
||||
return 2;
|
||||
if (au.ui.low < bu.ui.low)
|
||||
return 0;
|
||||
else if (au.ui.low > bu.ui.low)
|
||||
return 2;
|
||||
return 1;
|
||||
}
|
|
@ -87,7 +87,7 @@ static void tlb_batch_add_one(struct mm_struct *mm, unsigned long vaddr,
|
|||
if (!tb->active) {
|
||||
global_flush_tlb_page(mm, vaddr);
|
||||
flush_tsb_user_page(mm, vaddr);
|
||||
return;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (nr == 0)
|
||||
|
@ -98,6 +98,7 @@ static void tlb_batch_add_one(struct mm_struct *mm, unsigned long vaddr,
|
|||
if (nr >= TLB_BATCH_NR)
|
||||
flush_tlb_pending();
|
||||
|
||||
out:
|
||||
put_cpu_var(tlb_batch);
|
||||
}
|
||||
|
||||
|
|
|
@ -258,7 +258,7 @@ static efi_status_t setup_efi_vars(struct boot_params *params)
|
|||
u64 store_size, remaining_size, var_size;
|
||||
efi_status_t status;
|
||||
|
||||
if (!sys_table->runtime->query_variable_info)
|
||||
if (sys_table->runtime->hdr.revision < EFI_2_00_SYSTEM_TABLE_REVISION)
|
||||
return EFI_UNSUPPORTED;
|
||||
|
||||
data = (struct setup_data *)(unsigned long)params->hdr.setup_data;
|
||||
|
@ -266,7 +266,7 @@ static efi_status_t setup_efi_vars(struct boot_params *params)
|
|||
while (data && data->next)
|
||||
data = (struct setup_data *)(unsigned long)data->next;
|
||||
|
||||
status = efi_call_phys4(sys_table->runtime->query_variable_info,
|
||||
status = efi_call_phys4((void *)sys_table->runtime->query_variable_info,
|
||||
EFI_VARIABLE_NON_VOLATILE |
|
||||
EFI_VARIABLE_BOOTSERVICE_ACCESS |
|
||||
EFI_VARIABLE_RUNTIME_ACCESS, &store_size,
|
||||
|
|
|
@ -161,6 +161,8 @@ static int hash_recvmsg(struct kiocb *unused, struct socket *sock,
|
|||
else if (len < ds)
|
||||
msg->msg_flags |= MSG_TRUNC;
|
||||
|
||||
msg->msg_namelen = 0;
|
||||
|
||||
lock_sock(sk);
|
||||
if (ctx->more) {
|
||||
ctx->more = 0;
|
||||
|
|
|
@ -432,6 +432,7 @@ static int skcipher_recvmsg(struct kiocb *unused, struct socket *sock,
|
|||
long copied = 0;
|
||||
|
||||
lock_sock(sk);
|
||||
msg->msg_namelen = 0;
|
||||
for (iov = msg->msg_iov, iovlen = msg->msg_iovlen; iovlen > 0;
|
||||
iovlen--, iov++) {
|
||||
unsigned long seglen = iov->iov_len;
|
||||
|
|
|
@ -1628,10 +1628,11 @@ static ssize_t efivar_delete(struct file *filp, struct kobject *kobj,
|
|||
return count;
|
||||
}
|
||||
|
||||
static bool variable_is_present(efi_char16_t *variable_name, efi_guid_t *vendor)
|
||||
static bool variable_is_present(struct efivars *efivars,
|
||||
efi_char16_t *variable_name,
|
||||
efi_guid_t *vendor)
|
||||
{
|
||||
struct efivar_entry *entry, *n;
|
||||
struct efivars *efivars = &__efivars;
|
||||
unsigned long strsize1, strsize2;
|
||||
bool found = false;
|
||||
|
||||
|
@ -1703,8 +1704,8 @@ static void efivar_update_sysfs_entries(struct work_struct *work)
|
|||
if (status != EFI_SUCCESS) {
|
||||
break;
|
||||
} else {
|
||||
if (!variable_is_present(variable_name,
|
||||
&vendor)) {
|
||||
if (!variable_is_present(efivars,
|
||||
variable_name, &vendor)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
@ -2008,7 +2009,8 @@ int register_efivars(struct efivars *efivars,
|
|||
* we'll ever see a different variable name,
|
||||
* and may end up looping here forever.
|
||||
*/
|
||||
if (variable_is_present(variable_name, &vendor_guid)) {
|
||||
if (variable_is_present(efivars, variable_name,
|
||||
&vendor_guid)) {
|
||||
dup_variable_bug(variable_name, &vendor_guid,
|
||||
variable_name_size);
|
||||
status = EFI_NOT_FOUND;
|
||||
|
|
|
@ -642,7 +642,12 @@ static struct platform_driver pxa_gpio_driver = {
|
|||
.of_match_table = of_match_ptr(pxa_gpio_dt_ids),
|
||||
},
|
||||
};
|
||||
module_platform_driver(pxa_gpio_driver);
|
||||
|
||||
static int __init pxa_gpio_init(void)
|
||||
{
|
||||
return platform_driver_register(&pxa_gpio_driver);
|
||||
}
|
||||
postcore_initcall(pxa_gpio_init);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int pxa_gpio_suspend(void)
|
||||
|
|
|
@ -610,7 +610,7 @@ static void mb86a20s_layer_bitrate(struct dvb_frontend *fe, u32 layer,
|
|||
__func__, 'A' + layer, segment * isdbt_rate[m][f][i]/1000,
|
||||
rate, rate);
|
||||
|
||||
state->estimated_rate[i] = rate;
|
||||
state->estimated_rate[layer] = rate;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -461,7 +461,7 @@ int cx25821_video_register(struct cx25821_dev *dev)
|
|||
|
||||
spin_lock_init(&dev->slock);
|
||||
|
||||
for (i = 0; i < MAX_VID_CHANNEL_NUM - 1; ++i) {
|
||||
for (i = 0; i < VID_CHANNEL_NUM; ++i) {
|
||||
cx25821_init_controls(dev, i);
|
||||
|
||||
cx25821_risc_stopper(dev->pci, &dev->channels[i].vidq.stopper,
|
||||
|
|
|
@ -941,6 +941,14 @@ void start_tty(struct tty_struct *tty)
|
|||
|
||||
EXPORT_SYMBOL(start_tty);
|
||||
|
||||
static void tty_update_time(struct timespec *time)
|
||||
{
|
||||
unsigned long sec = get_seconds();
|
||||
sec -= sec % 60;
|
||||
if ((long)(sec - time->tv_sec) > 0)
|
||||
time->tv_sec = sec;
|
||||
}
|
||||
|
||||
/**
|
||||
* tty_read - read method for tty device files
|
||||
* @file: pointer to tty file
|
||||
|
@ -960,10 +968,11 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
|
|||
loff_t *ppos)
|
||||
{
|
||||
int i;
|
||||
struct inode *inode = file_inode(file);
|
||||
struct tty_struct *tty = file_tty(file);
|
||||
struct tty_ldisc *ld;
|
||||
|
||||
if (tty_paranoia_check(tty, file_inode(file), "tty_read"))
|
||||
if (tty_paranoia_check(tty, inode, "tty_read"))
|
||||
return -EIO;
|
||||
if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
|
||||
return -EIO;
|
||||
|
@ -977,6 +986,9 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
|
|||
i = -EIO;
|
||||
tty_ldisc_deref(ld);
|
||||
|
||||
if (i > 0)
|
||||
tty_update_time(&inode->i_atime);
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
|
@ -1077,8 +1089,10 @@ static inline ssize_t do_tty_write(
|
|||
break;
|
||||
cond_resched();
|
||||
}
|
||||
if (written)
|
||||
if (written) {
|
||||
tty_update_time(&file_inode(file)->i_mtime);
|
||||
ret = written;
|
||||
}
|
||||
out:
|
||||
tty_write_unlock(tty);
|
||||
return ret;
|
||||
|
|
2
fs/aio.c
2
fs/aio.c
|
@ -1029,9 +1029,9 @@ static int aio_read_evt(struct kioctx *ioctx, struct io_event *ent)
|
|||
spin_unlock(&info->ring_lock);
|
||||
|
||||
out:
|
||||
kunmap_atomic(ring);
|
||||
dprintk("leaving aio_read_evt: %d h%lu t%lu\n", ret,
|
||||
(unsigned long)ring->head, (unsigned long)ring->tail);
|
||||
kunmap_atomic(ring);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
1
kernel/.gitignore
vendored
1
kernel/.gitignore
vendored
|
@ -4,3 +4,4 @@
|
|||
config_data.h
|
||||
config_data.gz
|
||||
timeconst.h
|
||||
hz.bc
|
||||
|
|
|
@ -4596,6 +4596,7 @@ void perf_event_comm(struct task_struct *task)
|
|||
struct perf_event_context *ctx;
|
||||
int ctxn;
|
||||
|
||||
rcu_read_lock();
|
||||
for_each_task_context_nr(ctxn) {
|
||||
ctx = task->perf_event_ctxp[ctxn];
|
||||
if (!ctx)
|
||||
|
@ -4603,6 +4604,7 @@ void perf_event_comm(struct task_struct *task)
|
|||
|
||||
perf_event_enable_on_exec(ctx);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
if (!atomic_read(&nr_comm_events))
|
||||
return;
|
||||
|
|
10
mm/nommu.c
10
mm/nommu.c
|
@ -1838,6 +1838,16 @@ int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
|
|||
}
|
||||
EXPORT_SYMBOL(remap_pfn_range);
|
||||
|
||||
int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)
|
||||
{
|
||||
unsigned long pfn = start >> PAGE_SHIFT;
|
||||
unsigned long vm_len = vma->vm_end - vma->vm_start;
|
||||
|
||||
pfn += vma->vm_pgoff;
|
||||
return io_remap_pfn_range(vma, vma->vm_start, pfn, vm_len, vma->vm_page_prot);
|
||||
}
|
||||
EXPORT_SYMBOL(vm_iomap_memory);
|
||||
|
||||
int remap_vmalloc_range(struct vm_area_struct *vma, void *addr,
|
||||
unsigned long pgoff)
|
||||
{
|
||||
|
|
|
@ -2882,6 +2882,7 @@ static int wm8994_aif3_hw_params(struct snd_pcm_substream *substream,
|
|||
default:
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -505,7 +505,10 @@ static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
|||
mcasp_set_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRE);
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_RXFMCTL_REG, AFSRE);
|
||||
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG, ACLKX | AFSX);
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG,
|
||||
ACLKX | ACLKR);
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_PDIR_REG,
|
||||
AFSX | AFSR);
|
||||
break;
|
||||
case SND_SOC_DAIFMT_CBM_CFS:
|
||||
/* codec is clock master and frame slave */
|
||||
|
@ -565,7 +568,7 @@ static int davinci_mcasp_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
|||
mcasp_set_bits(base + DAVINCI_MCASP_ACLKXCTL_REG, ACLKXPOL);
|
||||
mcasp_clr_bits(base + DAVINCI_MCASP_TXFMCTL_REG, FSXPOL);
|
||||
|
||||
mcasp_clr_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
|
||||
mcasp_set_bits(base + DAVINCI_MCASP_ACLKRCTL_REG, ACLKRPOL);
|
||||
mcasp_clr_bits(base + DAVINCI_MCASP_RXFMCTL_REG, FSRPOL);
|
||||
break;
|
||||
|
||||
|
|
|
@ -1095,9 +1095,9 @@ int dapm_clock_event(struct snd_soc_dapm_widget *w,
|
|||
|
||||
#ifdef CONFIG_HAVE_CLK
|
||||
if (SND_SOC_DAPM_EVENT_ON(event)) {
|
||||
return clk_enable(w->clk);
|
||||
return clk_prepare_enable(w->clk);
|
||||
} else {
|
||||
clk_disable(w->clk);
|
||||
clk_disable_unprepare(w->clk);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue