Merge branch 'akpm' (patches from Andrew Morton)
Merge first patch-bomb from Andrew Morton: "Quite a lot of other stuff is banked up awaiting further next->mainline merging, but this batch contains: - Lots of random misc patches - OCFS2 - Most of MM - backlight updates - lib/ updates - printk updates - checkpatch updates - epoll tweaking - rtc updates - hfs - hfsplus - documentation - procfs - update gcov to gcc-4.7 format - IPC" * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (269 commits) ipc, msg: fix message length check for negative values ipc/util.c: remove unnecessary work pending test devpts: plug the memory leak in kill_sb ./Makefile: export initial ramdisk compression config option init/Kconfig: add option to disable kernel compression drivers: w1: make w1_slave::flags long to avoid memory corruption drivers/w1/masters/ds1wm.cuse dev_get_platdata() drivers/memstick/core/ms_block.c: fix unreachable state in h_msb_read_page() drivers/memstick/core/mspro_block.c: fix attributes array allocation drivers/pps/clients/pps-gpio.c: remove redundant of_match_ptr kernel/panic.c: reduce 1 byte usage for print tainted buffer gcov: reuse kbasename helper kernel/gcov/fs.c: use pr_warn() kernel/module.c: use pr_foo() gcov: compile specific gcov implementation based on gcc version gcov: add support for gcc 4.7 gcov format gcov: move gcov structs definitions to a gcc version specific file kernel/taskstats.c: return -ENOMEM when alloc memory fails in add_del_listener() kernel/taskstats.c: add nla_nest_cancel() for failure processing between nla_nest_start() and nla_nest_end() kernel/sysctl_binary.c: use scnprintf() instead of snprintf() ...
This commit is contained in:
@@ -100,9 +100,6 @@ extern void setup_new_exec(struct linux_binprm * bprm);
|
||||
extern void would_dump(struct linux_binprm *, struct file *);
|
||||
|
||||
extern int suid_dumpable;
|
||||
#define SUID_DUMP_DISABLE 0 /* No setuid dumping */
|
||||
#define SUID_DUMP_USER 1 /* Dump as user of process */
|
||||
#define SUID_DUMP_ROOT 2 /* Dump as root */
|
||||
|
||||
/* Stack area protections */
|
||||
#define EXSTACK_DEFAULT 0 /* Whatever the arch defaults to */
|
||||
|
@@ -41,14 +41,14 @@
|
||||
COMPAT_SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
|
||||
|
||||
#define COMPAT_SYSCALL_DEFINEx(x, name, ...) \
|
||||
asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
|
||||
asmlinkage long compat_sys##name(__MAP(x,__SC_DECL,__VA_ARGS__))\
|
||||
__attribute__((alias(__stringify(compat_SyS##name)))); \
|
||||
static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__));\
|
||||
asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__));\
|
||||
asmlinkage long compat_SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__))\
|
||||
{ \
|
||||
return C_SYSC##name(__MAP(x,__SC_DELOUSE,__VA_ARGS__)); \
|
||||
} \
|
||||
SYSCALL_ALIAS(compat_sys##name, compat_SyS##name); \
|
||||
static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__))
|
||||
|
||||
#ifndef compat_user_stack_pointer
|
||||
|
@@ -94,6 +94,8 @@ static inline int gen_pool_add(struct gen_pool *pool, unsigned long addr,
|
||||
}
|
||||
extern void gen_pool_destroy(struct gen_pool *);
|
||||
extern unsigned long gen_pool_alloc(struct gen_pool *, size_t);
|
||||
extern void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size,
|
||||
dma_addr_t *dma);
|
||||
extern void gen_pool_free(struct gen_pool *, unsigned long, size_t);
|
||||
extern void gen_pool_for_each_chunk(struct gen_pool *,
|
||||
void (*)(struct gen_pool *, struct gen_pool_chunk *, void *), void *);
|
||||
|
@@ -26,8 +26,8 @@
|
||||
* extern int initialize_foobar_device(int, int, int) __init;
|
||||
*
|
||||
* For initialized data:
|
||||
* You should insert __initdata between the variable name and equal
|
||||
* sign followed by value, e.g.:
|
||||
* You should insert __initdata or __initconst between the variable name
|
||||
* and equal sign followed by value, e.g.:
|
||||
*
|
||||
* static int init_variable __initdata = 0;
|
||||
* static const char linux_logo[] __initconst = { 0x32, 0x36, ... };
|
||||
@@ -35,8 +35,6 @@
|
||||
* Don't forget to initialize data not at file scope, i.e. within a function,
|
||||
* as gcc otherwise puts the data into the bss section and not into the init
|
||||
* section.
|
||||
*
|
||||
* Also note, that this data cannot be "const".
|
||||
*/
|
||||
|
||||
/* These are for everybody (although not all archs will actually
|
||||
|
@@ -132,14 +132,14 @@ static __always_inline void jump_label_init(void)
|
||||
|
||||
static __always_inline bool static_key_false(struct static_key *key)
|
||||
{
|
||||
if (unlikely(atomic_read(&key->enabled)) > 0)
|
||||
if (unlikely(atomic_read(&key->enabled) > 0))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static __always_inline bool static_key_true(struct static_key *key)
|
||||
{
|
||||
if (likely(atomic_read(&key->enabled)) > 0)
|
||||
if (likely(atomic_read(&key->enabled) > 0))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
@@ -15,5 +15,6 @@
|
||||
#define KPF_OWNER_PRIVATE 37
|
||||
#define KPF_ARCH 38
|
||||
#define KPF_UNCACHED 39
|
||||
#define KPF_SOFTDIRTY 40
|
||||
|
||||
#endif /* LINUX_KERNEL_PAGE_FLAGS_H */
|
||||
|
@@ -361,6 +361,17 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
#define list_first_entry(ptr, type, member) \
|
||||
list_entry((ptr)->next, type, member)
|
||||
|
||||
/**
|
||||
* list_last_entry - get the last element from a list
|
||||
* @ptr: the list head to take the element from.
|
||||
* @type: the type of the struct this is embedded in.
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*
|
||||
* Note, that list is expected to be not empty.
|
||||
*/
|
||||
#define list_last_entry(ptr, type, member) \
|
||||
list_entry((ptr)->prev, type, member)
|
||||
|
||||
/**
|
||||
* list_first_entry_or_null - get the first element from a list
|
||||
* @ptr: the list head to take the element from.
|
||||
@@ -372,6 +383,22 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
#define list_first_entry_or_null(ptr, type, member) \
|
||||
(!list_empty(ptr) ? list_first_entry(ptr, type, member) : NULL)
|
||||
|
||||
/**
|
||||
* list_next_entry - get the next element in list
|
||||
* @pos: the type * to cursor
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_next_entry(pos, member) \
|
||||
list_entry((pos)->member.next, typeof(*(pos)), member)
|
||||
|
||||
/**
|
||||
* list_prev_entry - get the prev element in list
|
||||
* @pos: the type * to cursor
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_prev_entry(pos, member) \
|
||||
list_entry((pos)->member.prev, typeof(*(pos)), member)
|
||||
|
||||
/**
|
||||
* list_for_each - iterate over a list
|
||||
* @pos: the &struct list_head to use as a loop cursor.
|
||||
@@ -416,9 +443,9 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_for_each_entry(pos, head, member) \
|
||||
for (pos = list_entry((head)->next, typeof(*pos), member); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||
for (pos = list_first_entry(head, typeof(*pos), member); \
|
||||
&pos->member != (head); \
|
||||
pos = list_next_entry(pos, member))
|
||||
|
||||
/**
|
||||
* list_for_each_entry_reverse - iterate backwards over list of given type.
|
||||
@@ -427,9 +454,9 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_for_each_entry_reverse(pos, head, member) \
|
||||
for (pos = list_entry((head)->prev, typeof(*pos), member); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.prev, typeof(*pos), member))
|
||||
for (pos = list_last_entry(head, typeof(*pos), member); \
|
||||
&pos->member != (head); \
|
||||
pos = list_prev_entry(pos, member))
|
||||
|
||||
/**
|
||||
* list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
|
||||
@@ -452,9 +479,9 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* the current position.
|
||||
*/
|
||||
#define list_for_each_entry_continue(pos, head, member) \
|
||||
for (pos = list_entry(pos->member.next, typeof(*pos), member); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||
for (pos = list_next_entry(pos, member); \
|
||||
&pos->member != (head); \
|
||||
pos = list_next_entry(pos, member))
|
||||
|
||||
/**
|
||||
* list_for_each_entry_continue_reverse - iterate backwards from the given point
|
||||
@@ -466,9 +493,9 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* the current position.
|
||||
*/
|
||||
#define list_for_each_entry_continue_reverse(pos, head, member) \
|
||||
for (pos = list_entry(pos->member.prev, typeof(*pos), member); \
|
||||
&pos->member != (head); \
|
||||
pos = list_entry(pos->member.prev, typeof(*pos), member))
|
||||
for (pos = list_prev_entry(pos, member); \
|
||||
&pos->member != (head); \
|
||||
pos = list_prev_entry(pos, member))
|
||||
|
||||
/**
|
||||
* list_for_each_entry_from - iterate over list of given type from the current point
|
||||
@@ -479,8 +506,8 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* Iterate over list of given type, continuing from current position.
|
||||
*/
|
||||
#define list_for_each_entry_from(pos, head, member) \
|
||||
for (; &pos->member != (head); \
|
||||
pos = list_entry(pos->member.next, typeof(*pos), member))
|
||||
for (; &pos->member != (head); \
|
||||
pos = list_next_entry(pos, member))
|
||||
|
||||
/**
|
||||
* list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
|
||||
@@ -490,10 +517,10 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* @member: the name of the list_struct within the struct.
|
||||
*/
|
||||
#define list_for_each_entry_safe(pos, n, head, member) \
|
||||
for (pos = list_entry((head)->next, typeof(*pos), member), \
|
||||
n = list_entry(pos->member.next, typeof(*pos), member); \
|
||||
for (pos = list_first_entry(head, typeof(*pos), member), \
|
||||
n = list_next_entry(pos, member); \
|
||||
&pos->member != (head); \
|
||||
pos = n, n = list_entry(n->member.next, typeof(*n), member))
|
||||
pos = n, n = list_next_entry(n, member))
|
||||
|
||||
/**
|
||||
* list_for_each_entry_safe_continue - continue list iteration safe against removal
|
||||
@@ -506,10 +533,10 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* safe against removal of list entry.
|
||||
*/
|
||||
#define list_for_each_entry_safe_continue(pos, n, head, member) \
|
||||
for (pos = list_entry(pos->member.next, typeof(*pos), member), \
|
||||
n = list_entry(pos->member.next, typeof(*pos), member); \
|
||||
for (pos = list_next_entry(pos, member), \
|
||||
n = list_next_entry(pos, member); \
|
||||
&pos->member != (head); \
|
||||
pos = n, n = list_entry(n->member.next, typeof(*n), member))
|
||||
pos = n, n = list_next_entry(n, member))
|
||||
|
||||
/**
|
||||
* list_for_each_entry_safe_from - iterate over list from current point safe against removal
|
||||
@@ -522,9 +549,9 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* removal of list entry.
|
||||
*/
|
||||
#define list_for_each_entry_safe_from(pos, n, head, member) \
|
||||
for (n = list_entry(pos->member.next, typeof(*pos), member); \
|
||||
for (n = list_next_entry(pos, member); \
|
||||
&pos->member != (head); \
|
||||
pos = n, n = list_entry(n->member.next, typeof(*n), member))
|
||||
pos = n, n = list_next_entry(n, member))
|
||||
|
||||
/**
|
||||
* list_for_each_entry_safe_reverse - iterate backwards over list safe against removal
|
||||
@@ -537,10 +564,10 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* of list entry.
|
||||
*/
|
||||
#define list_for_each_entry_safe_reverse(pos, n, head, member) \
|
||||
for (pos = list_entry((head)->prev, typeof(*pos), member), \
|
||||
n = list_entry(pos->member.prev, typeof(*pos), member); \
|
||||
for (pos = list_last_entry(head, typeof(*pos), member), \
|
||||
n = list_prev_entry(pos, member); \
|
||||
&pos->member != (head); \
|
||||
pos = n, n = list_entry(n->member.prev, typeof(*n), member))
|
||||
pos = n, n = list_prev_entry(n, member))
|
||||
|
||||
/**
|
||||
* list_safe_reset_next - reset a stale list_for_each_entry_safe loop
|
||||
@@ -555,7 +582,7 @@ static inline void list_splice_tail_init(struct list_head *list,
|
||||
* completing the current iteration of the loop body.
|
||||
*/
|
||||
#define list_safe_reset_next(pos, n, member) \
|
||||
n = list_entry(pos->member.next, typeof(*pos), member)
|
||||
n = list_next_entry(pos, member)
|
||||
|
||||
/*
|
||||
* Double linked lists with a single pointer list head.
|
||||
|
@@ -35,6 +35,7 @@ struct memblock_type {
|
||||
};
|
||||
|
||||
struct memblock {
|
||||
bool bottom_up; /* is bottom up direction? */
|
||||
phys_addr_t current_limit;
|
||||
struct memblock_type memory;
|
||||
struct memblock_type reserved;
|
||||
@@ -148,6 +149,29 @@ phys_addr_t memblock_alloc_try_nid(phys_addr_t size, phys_addr_t align, int nid)
|
||||
|
||||
phys_addr_t memblock_alloc(phys_addr_t size, phys_addr_t align);
|
||||
|
||||
#ifdef CONFIG_MOVABLE_NODE
|
||||
/*
|
||||
* Set the allocation direction to bottom-up or top-down.
|
||||
*/
|
||||
static inline void memblock_set_bottom_up(bool enable)
|
||||
{
|
||||
memblock.bottom_up = enable;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if the allocation direction is bottom-up or not.
|
||||
* if this is true, that said, memblock will allocate memory
|
||||
* in bottom-up direction.
|
||||
*/
|
||||
static inline bool memblock_bottom_up(void)
|
||||
{
|
||||
return memblock.bottom_up;
|
||||
}
|
||||
#else
|
||||
static inline void memblock_set_bottom_up(bool enable) {}
|
||||
static inline bool memblock_bottom_up(void) { return false; }
|
||||
#endif
|
||||
|
||||
/* Flags for memblock_alloc_base() amd __memblock_alloc_base() */
|
||||
#define MEMBLOCK_ALLOC_ANYWHERE (~(phys_addr_t)0)
|
||||
#define MEMBLOCK_ALLOC_ACCESSIBLE 0
|
||||
|
@@ -94,6 +94,8 @@ extern void __online_page_set_limits(struct page *page);
|
||||
extern void __online_page_increment_counters(struct page *page);
|
||||
extern void __online_page_free(struct page *page);
|
||||
|
||||
extern int try_online_node(int nid);
|
||||
|
||||
#ifdef CONFIG_MEMORY_HOTREMOVE
|
||||
extern bool is_pageblock_removable_nolock(struct page *page);
|
||||
extern int arch_remove_memory(u64 start, u64 size);
|
||||
@@ -225,6 +227,11 @@ static inline void register_page_bootmem_info_node(struct pglist_data *pgdat)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int try_online_node(int nid)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void lock_memory_hotplug(void) {}
|
||||
static inline void unlock_memory_hotplug(void) {}
|
||||
|
||||
@@ -256,14 +263,12 @@ static inline void remove_memory(int nid, u64 start, u64 size) {}
|
||||
|
||||
extern int walk_memory_range(unsigned long start_pfn, unsigned long end_pfn,
|
||||
void *arg, int (*func)(struct memory_block *, void *));
|
||||
extern int mem_online_node(int nid);
|
||||
extern int add_memory(int nid, u64 start, u64 size);
|
||||
extern int arch_add_memory(int nid, u64 start, u64 size);
|
||||
extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages);
|
||||
extern bool is_memblock_offlined(struct memory_block *mem);
|
||||
extern void remove_memory(int nid, u64 start, u64 size);
|
||||
extern int sparse_add_one_section(struct zone *zone, unsigned long start_pfn,
|
||||
int nr_pages);
|
||||
extern int sparse_add_one_section(struct zone *zone, unsigned long start_pfn);
|
||||
extern void sparse_remove_one_section(struct zone *zone, struct mem_section *ms);
|
||||
extern struct page *sparse_decode_mem_map(unsigned long coded_mem_map,
|
||||
unsigned long pnum);
|
||||
|
@@ -169,7 +169,7 @@ int do_migrate_pages(struct mm_struct *mm, const nodemask_t *from,
|
||||
extern int mpol_parse_str(char *str, struct mempolicy **mpol);
|
||||
#endif
|
||||
|
||||
extern int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol);
|
||||
extern void mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol);
|
||||
|
||||
/* Check if a vma is migratable */
|
||||
static inline int vma_migratable(struct vm_area_struct *vma)
|
||||
@@ -307,9 +307,8 @@ static inline int mpol_parse_str(char *str, struct mempolicy **mpol)
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
|
||||
static inline void mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int mpol_misplaced(struct page *page, struct vm_area_struct *vma,
|
||||
|
@@ -51,6 +51,7 @@ struct sec_pmic_dev {
|
||||
int ono;
|
||||
int type;
|
||||
bool wakeup;
|
||||
bool wtsr_smpl;
|
||||
};
|
||||
|
||||
int sec_irq_init(struct sec_pmic_dev *sec_pmic);
|
||||
|
@@ -62,6 +62,11 @@ enum sec_rtc_reg {
|
||||
/* RTC Update Register1 */
|
||||
#define RTC_UDR_SHIFT 0
|
||||
#define RTC_UDR_MASK (1 << RTC_UDR_SHIFT)
|
||||
#define RTC_TCON_SHIFT 1
|
||||
#define RTC_TCON_MASK (1 << RTC_TCON_SHIFT)
|
||||
#define RTC_TIME_EN_SHIFT 3
|
||||
#define RTC_TIME_EN_MASK (1 << RTC_TIME_EN_SHIFT)
|
||||
|
||||
/* RTC Hour register */
|
||||
#define HOUR_PM_SHIFT 6
|
||||
#define HOUR_PM_MASK (1 << HOUR_PM_SHIFT)
|
||||
@@ -69,6 +74,12 @@ enum sec_rtc_reg {
|
||||
#define ALARM_ENABLE_SHIFT 7
|
||||
#define ALARM_ENABLE_MASK (1 << ALARM_ENABLE_SHIFT)
|
||||
|
||||
#define SMPL_ENABLE_SHIFT 7
|
||||
#define SMPL_ENABLE_MASK (1 << SMPL_ENABLE_SHIFT)
|
||||
|
||||
#define WTSR_ENABLE_SHIFT 6
|
||||
#define WTSR_ENABLE_MASK (1 << WTSR_ENABLE_SHIFT)
|
||||
|
||||
enum {
|
||||
RTC_SEC = 0,
|
||||
RTC_MIN,
|
||||
|
@@ -50,6 +50,10 @@ extern int sysctl_legacy_va_layout;
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
#ifndef __pa_symbol
|
||||
#define __pa_symbol(x) __pa(RELOC_HIDE((unsigned long)(x), 0))
|
||||
#endif
|
||||
|
||||
extern unsigned long sysctl_user_reserve_kbytes;
|
||||
extern unsigned long sysctl_admin_reserve_kbytes;
|
||||
|
||||
|
@@ -87,4 +87,6 @@ calc_vm_flag_bits(unsigned long flags)
|
||||
_calc_vm_trans(flags, MAP_DENYWRITE, VM_DENYWRITE ) |
|
||||
_calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED );
|
||||
}
|
||||
|
||||
unsigned long vm_commit_limit(void);
|
||||
#endif /* _LINUX_MMAN_H */
|
||||
|
@@ -6,9 +6,9 @@
|
||||
|
||||
/* one msg_msg structure for each message */
|
||||
struct msg_msg {
|
||||
struct list_head m_list;
|
||||
long m_type;
|
||||
int m_ts; /* message text size */
|
||||
struct list_head m_list;
|
||||
long m_type;
|
||||
size_t m_ts; /* message text size */
|
||||
struct msg_msgseg* next;
|
||||
void *security;
|
||||
/* the actual message follows immediately */
|
||||
|
@@ -82,6 +82,11 @@ static inline void oom_killer_enable(void)
|
||||
oom_killer_disabled = false;
|
||||
}
|
||||
|
||||
static inline bool oom_gfp_allowed(gfp_t gfp_mask)
|
||||
{
|
||||
return (gfp_mask & __GFP_FS) && !(gfp_mask & __GFP_NORETRY);
|
||||
}
|
||||
|
||||
extern struct task_struct *find_lock_task_mm(struct task_struct *p);
|
||||
|
||||
/* sysctls */
|
||||
|
@@ -1,57 +0,0 @@
|
||||
/*
|
||||
* Simple driver for Texas Instruments LM3630 LED Flash driver chip
|
||||
* Copyright (C) 2012 Texas Instruments
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_LM3630_H
|
||||
#define __LINUX_LM3630_H
|
||||
|
||||
#define LM3630_NAME "lm3630_bl"
|
||||
|
||||
enum lm3630_pwm_ctrl {
|
||||
PWM_CTRL_DISABLE = 0,
|
||||
PWM_CTRL_BANK_A,
|
||||
PWM_CTRL_BANK_B,
|
||||
PWM_CTRL_BANK_ALL,
|
||||
};
|
||||
|
||||
enum lm3630_pwm_active {
|
||||
PWM_ACTIVE_HIGH = 0,
|
||||
PWM_ACTIVE_LOW,
|
||||
};
|
||||
|
||||
enum lm3630_bank_a_ctrl {
|
||||
BANK_A_CTRL_DISABLE = 0x0,
|
||||
BANK_A_CTRL_LED1 = 0x4,
|
||||
BANK_A_CTRL_LED2 = 0x1,
|
||||
BANK_A_CTRL_ALL = 0x5,
|
||||
};
|
||||
|
||||
enum lm3630_bank_b_ctrl {
|
||||
BANK_B_CTRL_DISABLE = 0,
|
||||
BANK_B_CTRL_LED2,
|
||||
};
|
||||
|
||||
struct lm3630_platform_data {
|
||||
|
||||
/* maximum brightness */
|
||||
int max_brt_led1;
|
||||
int max_brt_led2;
|
||||
|
||||
/* initial on brightness */
|
||||
int init_brt_led1;
|
||||
int init_brt_led2;
|
||||
enum lm3630_pwm_ctrl pwm_ctrl;
|
||||
enum lm3630_pwm_active pwm_active;
|
||||
enum lm3630_bank_a_ctrl bank_a_ctrl;
|
||||
enum lm3630_bank_b_ctrl bank_b_ctrl;
|
||||
unsigned int pwm_period;
|
||||
void (*pwm_set_intensity) (int brightness, int max_brightness);
|
||||
};
|
||||
|
||||
#endif /* __LINUX_LM3630_H */
|
65
include/linux/platform_data/lm3630a_bl.h
Normal file
65
include/linux/platform_data/lm3630a_bl.h
Normal file
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Simple driver for Texas Instruments LM3630A LED Flash driver chip
|
||||
* Copyright (C) 2012 Texas Instruments
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_LM3630A_H
|
||||
#define __LINUX_LM3630A_H
|
||||
|
||||
#define LM3630A_NAME "lm3630a_bl"
|
||||
|
||||
enum lm3630a_pwm_ctrl {
|
||||
LM3630A_PWM_DISABLE = 0x00,
|
||||
LM3630A_PWM_BANK_A,
|
||||
LM3630A_PWM_BANK_B,
|
||||
LM3630A_PWM_BANK_ALL,
|
||||
LM3630A_PWM_BANK_A_ACT_LOW = 0x05,
|
||||
LM3630A_PWM_BANK_B_ACT_LOW,
|
||||
LM3630A_PWM_BANK_ALL_ACT_LOW,
|
||||
};
|
||||
|
||||
enum lm3630a_leda_ctrl {
|
||||
LM3630A_LEDA_DISABLE = 0x00,
|
||||
LM3630A_LEDA_ENABLE = 0x04,
|
||||
LM3630A_LEDA_ENABLE_LINEAR = 0x14,
|
||||
};
|
||||
|
||||
enum lm3630a_ledb_ctrl {
|
||||
LM3630A_LEDB_DISABLE = 0x00,
|
||||
LM3630A_LEDB_ON_A = 0x01,
|
||||
LM3630A_LEDB_ENABLE = 0x02,
|
||||
LM3630A_LEDB_ENABLE_LINEAR = 0x0A,
|
||||
};
|
||||
|
||||
#define LM3630A_MAX_BRIGHTNESS 255
|
||||
/*
|
||||
*@leda_init_brt : led a init brightness. 4~255
|
||||
*@leda_max_brt : led a max brightness. 4~255
|
||||
*@leda_ctrl : led a disable, enable linear, enable exponential
|
||||
*@ledb_init_brt : led b init brightness. 4~255
|
||||
*@ledb_max_brt : led b max brightness. 4~255
|
||||
*@ledb_ctrl : led b disable, enable linear, enable exponential
|
||||
*@pwm_period : pwm period
|
||||
*@pwm_ctrl : pwm disable, bank a or b, active high or low
|
||||
*/
|
||||
struct lm3630a_platform_data {
|
||||
|
||||
/* led a config. */
|
||||
int leda_init_brt;
|
||||
int leda_max_brt;
|
||||
enum lm3630a_leda_ctrl leda_ctrl;
|
||||
/* led b config. */
|
||||
int ledb_init_brt;
|
||||
int ledb_max_brt;
|
||||
enum lm3630a_ledb_ctrl ledb_ctrl;
|
||||
/* pwm config. */
|
||||
unsigned int pwm_period;
|
||||
enum lm3630a_pwm_ctrl pwm_ctrl;
|
||||
};
|
||||
|
||||
#endif /* __LINUX_LM3630A_H */
|
@@ -40,6 +40,17 @@
|
||||
#define LP8553_PWM_CONFIG LP8550_PWM_CONFIG
|
||||
#define LP8553_I2C_CONFIG LP8550_I2C_CONFIG
|
||||
|
||||
/* CONFIG register - LP8555 */
|
||||
#define LP8555_PWM_STANDBY BIT(7)
|
||||
#define LP8555_PWM_FILTER BIT(6)
|
||||
#define LP8555_RELOAD_EPROM BIT(3) /* use it if EPROMs should be reset
|
||||
when the backlight turns on */
|
||||
#define LP8555_OFF_OPENLEDS BIT(2)
|
||||
#define LP8555_PWM_CONFIG LP8555_PWM_ONLY
|
||||
#define LP8555_I2C_CONFIG LP8555_I2C_ONLY
|
||||
#define LP8555_COMB1_CONFIG LP8555_COMBINED1
|
||||
#define LP8555_COMB2_CONFIG LP8555_COMBINED2
|
||||
|
||||
/* DEVICE CONTROL register - LP8556 */
|
||||
#define LP8556_PWM_CONFIG (LP8556_PWM_ONLY << BRT_MODE_SHFT)
|
||||
#define LP8556_COMB1_CONFIG (LP8556_COMBINED1 << BRT_MODE_SHFT)
|
||||
@@ -65,6 +76,7 @@ enum lp855x_chip_id {
|
||||
LP8551,
|
||||
LP8552,
|
||||
LP8553,
|
||||
LP8555,
|
||||
LP8556,
|
||||
LP8557,
|
||||
};
|
||||
@@ -89,6 +101,13 @@ enum lp8553_brighntess_source {
|
||||
LP8553_I2C_ONLY = LP8550_I2C_ONLY,
|
||||
};
|
||||
|
||||
enum lp8555_brightness_source {
|
||||
LP8555_PWM_ONLY,
|
||||
LP8555_I2C_ONLY,
|
||||
LP8555_COMBINED1, /* Brightness register with shaped PWM */
|
||||
LP8555_COMBINED2, /* PWM with shaped brightness register */
|
||||
};
|
||||
|
||||
enum lp8556_brightness_source {
|
||||
LP8556_PWM_ONLY,
|
||||
LP8556_COMBINED1, /* pwm + i2c before the shaper block */
|
||||
|
@@ -85,6 +85,11 @@ static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,
|
||||
*rb_link = node;
|
||||
}
|
||||
|
||||
#define rb_entry_safe(ptr, type, member) \
|
||||
({ typeof(ptr) ____ptr = (ptr); \
|
||||
____ptr ? rb_entry(____ptr, type, member) : NULL; \
|
||||
})
|
||||
|
||||
/**
|
||||
* rbtree_postorder_for_each_entry_safe - iterate over rb_root in post order of
|
||||
* given type safe against removal of rb_node entry
|
||||
@@ -95,12 +100,9 @@ static inline void rb_link_node(struct rb_node * node, struct rb_node * parent,
|
||||
* @field: the name of the rb_node field within 'type'.
|
||||
*/
|
||||
#define rbtree_postorder_for_each_entry_safe(pos, n, root, field) \
|
||||
for (pos = rb_entry(rb_first_postorder(root), typeof(*pos), field),\
|
||||
n = rb_entry(rb_next_postorder(&pos->field), \
|
||||
typeof(*pos), field); \
|
||||
&pos->field; \
|
||||
pos = n, \
|
||||
n = rb_entry(rb_next_postorder(&pos->field), \
|
||||
typeof(*pos), field))
|
||||
for (pos = rb_entry_safe(rb_first_postorder(root), typeof(*pos), field); \
|
||||
pos && ({ n = rb_entry_safe(rb_next_postorder(&pos->field), \
|
||||
typeof(*pos), field); 1; }); \
|
||||
pos = n)
|
||||
|
||||
#endif /* _LINUX_RBTREE_H */
|
||||
|
@@ -323,6 +323,10 @@ static inline void arch_pick_mmap_layout(struct mm_struct *mm) {}
|
||||
extern void set_dumpable(struct mm_struct *mm, int value);
|
||||
extern int get_dumpable(struct mm_struct *mm);
|
||||
|
||||
#define SUID_DUMP_DISABLE 0 /* No setuid dumping */
|
||||
#define SUID_DUMP_USER 1 /* Dump as user of process */
|
||||
#define SUID_DUMP_ROOT 2 /* Dump as root */
|
||||
|
||||
/* mm flags */
|
||||
/* dumpable bits */
|
||||
#define MMF_DUMPABLE 0 /* core dump is permitted */
|
||||
@@ -1062,15 +1066,6 @@ struct task_struct {
|
||||
struct hlist_head preempt_notifiers;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* fpu_counter contains the number of consecutive context switches
|
||||
* that the FPU is used. If this is over a threshold, the lazy fpu
|
||||
* saving becomes unlazy to save the trap. This is an unsigned char
|
||||
* so that after 256 times the counter wraps and the behavior turns
|
||||
* lazy again; this to deal with bursty apps that only use FPU for
|
||||
* a short time
|
||||
*/
|
||||
unsigned char fpu_counter;
|
||||
#ifdef CONFIG_BLK_DEV_IO_TRACE
|
||||
unsigned int btrace_seq;
|
||||
#endif
|
||||
|
@@ -184,7 +184,8 @@ extern struct trace_event_functions exit_syscall_print_funcs;
|
||||
|
||||
#define __PROTECT(...) asmlinkage_protect(__VA_ARGS__)
|
||||
#define __SYSCALL_DEFINEx(x, name, ...) \
|
||||
asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \
|
||||
asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \
|
||||
__attribute__((alias(__stringify(SyS##name)))); \
|
||||
static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \
|
||||
asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \
|
||||
asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
|
||||
@@ -194,7 +195,6 @@ extern struct trace_event_functions exit_syscall_print_funcs;
|
||||
__PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \
|
||||
return ret; \
|
||||
} \
|
||||
SYSCALL_ALIAS(sys##name, SyS##name); \
|
||||
static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__))
|
||||
|
||||
asmlinkage long sys_time(time_t __user *tloc);
|
||||
|
@@ -39,6 +39,7 @@ enum vm_event_item { PGPGIN, PGPGOUT, PSWPIN, PSWPOUT,
|
||||
PAGEOUTRUN, ALLOCSTALL, PGROTATED,
|
||||
#ifdef CONFIG_NUMA_BALANCING
|
||||
NUMA_PTE_UPDATES,
|
||||
NUMA_HUGE_PTE_UPDATES,
|
||||
NUMA_HINT_FAULTS,
|
||||
NUMA_HINT_FAULTS_LOCAL,
|
||||
NUMA_PAGE_MIGRATE,
|
||||
|
@@ -97,7 +97,7 @@ void writeback_inodes_sb_nr(struct super_block *, unsigned long nr,
|
||||
int try_to_writeback_inodes_sb(struct super_block *, enum wb_reason reason);
|
||||
int try_to_writeback_inodes_sb_nr(struct super_block *, unsigned long nr,
|
||||
enum wb_reason reason);
|
||||
void sync_inodes_sb(struct super_block *);
|
||||
void sync_inodes_sb(struct super_block *sb, unsigned long older_than_this);
|
||||
void wakeup_flusher_threads(long nr_pages, enum wb_reason reason);
|
||||
void inode_wait_for_writeback(struct inode *inode);
|
||||
|
||||
|
Reference in New Issue
Block a user