diff options
Diffstat (limited to 'include/linux')
128 files changed, 2731 insertions, 1710 deletions
diff --git a/include/linux/aio.h b/include/linux/aio.h index d9c92daa3944..9eb42dbc5582 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h | |||
| @@ -1,86 +1,23 @@ | |||
| 1 | #ifndef __LINUX__AIO_H | 1 | #ifndef __LINUX__AIO_H |
| 2 | #define __LINUX__AIO_H | 2 | #define __LINUX__AIO_H |
| 3 | 3 | ||
| 4 | #include <linux/list.h> | ||
| 5 | #include <linux/workqueue.h> | ||
| 6 | #include <linux/aio_abi.h> | 4 | #include <linux/aio_abi.h> |
| 7 | #include <linux/uio.h> | ||
| 8 | #include <linux/rcupdate.h> | ||
| 9 | |||
| 10 | #include <linux/atomic.h> | ||
| 11 | 5 | ||
| 12 | struct kioctx; | 6 | struct kioctx; |
| 13 | struct kiocb; | 7 | struct kiocb; |
| 8 | struct mm_struct; | ||
| 14 | 9 | ||
| 15 | #define KIOCB_KEY 0 | 10 | #define KIOCB_KEY 0 |
| 16 | 11 | ||
| 17 | /* | ||
| 18 | * We use ki_cancel == KIOCB_CANCELLED to indicate that a kiocb has been either | ||
| 19 | * cancelled or completed (this makes a certain amount of sense because | ||
| 20 | * successful cancellation - io_cancel() - does deliver the completion to | ||
| 21 | * userspace). | ||
| 22 | * | ||
| 23 | * And since most things don't implement kiocb cancellation and we'd really like | ||
| 24 | * kiocb completion to be lockless when possible, we use ki_cancel to | ||
| 25 | * synchronize cancellation and completion - we only set it to KIOCB_CANCELLED | ||
| 26 | * with xchg() or cmpxchg(), see batch_complete_aio() and kiocb_cancel(). | ||
| 27 | */ | ||
| 28 | #define KIOCB_CANCELLED ((void *) (~0ULL)) | ||
| 29 | |||
| 30 | typedef int (kiocb_cancel_fn)(struct kiocb *); | 12 | typedef int (kiocb_cancel_fn)(struct kiocb *); |
| 31 | 13 | ||
| 32 | struct kiocb { | ||
| 33 | struct file *ki_filp; | ||
| 34 | struct kioctx *ki_ctx; /* NULL for sync ops */ | ||
| 35 | kiocb_cancel_fn *ki_cancel; | ||
| 36 | void *private; | ||
| 37 | |||
| 38 | union { | ||
| 39 | void __user *user; | ||
| 40 | struct task_struct *tsk; | ||
| 41 | } ki_obj; | ||
| 42 | |||
| 43 | __u64 ki_user_data; /* user's data for completion */ | ||
| 44 | loff_t ki_pos; | ||
| 45 | size_t ki_nbytes; /* copy of iocb->aio_nbytes */ | ||
| 46 | |||
| 47 | struct list_head ki_list; /* the aio core uses this | ||
| 48 | * for cancellation */ | ||
| 49 | |||
| 50 | /* | ||
| 51 | * If the aio_resfd field of the userspace iocb is not zero, | ||
| 52 | * this is the underlying eventfd context to deliver events to. | ||
| 53 | */ | ||
| 54 | struct eventfd_ctx *ki_eventfd; | ||
| 55 | }; | ||
| 56 | |||
| 57 | static inline bool is_sync_kiocb(struct kiocb *kiocb) | ||
| 58 | { | ||
| 59 | return kiocb->ki_ctx == NULL; | ||
| 60 | } | ||
| 61 | |||
| 62 | static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp) | ||
| 63 | { | ||
| 64 | *kiocb = (struct kiocb) { | ||
| 65 | .ki_ctx = NULL, | ||
| 66 | .ki_filp = filp, | ||
| 67 | .ki_obj.tsk = current, | ||
| 68 | }; | ||
| 69 | } | ||
| 70 | |||
| 71 | /* prototypes */ | 14 | /* prototypes */ |
| 72 | #ifdef CONFIG_AIO | 15 | #ifdef CONFIG_AIO |
| 73 | extern ssize_t wait_on_sync_kiocb(struct kiocb *iocb); | ||
| 74 | extern void aio_complete(struct kiocb *iocb, long res, long res2); | ||
| 75 | struct mm_struct; | ||
| 76 | extern void exit_aio(struct mm_struct *mm); | 16 | extern void exit_aio(struct mm_struct *mm); |
| 77 | extern long do_io_submit(aio_context_t ctx_id, long nr, | 17 | extern long do_io_submit(aio_context_t ctx_id, long nr, |
| 78 | struct iocb __user *__user *iocbpp, bool compat); | 18 | struct iocb __user *__user *iocbpp, bool compat); |
| 79 | void kiocb_set_cancel_fn(struct kiocb *req, kiocb_cancel_fn *cancel); | 19 | void kiocb_set_cancel_fn(struct kiocb *req, kiocb_cancel_fn *cancel); |
| 80 | #else | 20 | #else |
| 81 | static inline ssize_t wait_on_sync_kiocb(struct kiocb *iocb) { return 0; } | ||
| 82 | static inline void aio_complete(struct kiocb *iocb, long res, long res2) { } | ||
| 83 | struct mm_struct; | ||
| 84 | static inline void exit_aio(struct mm_struct *mm) { } | 21 | static inline void exit_aio(struct mm_struct *mm) { } |
| 85 | static inline long do_io_submit(aio_context_t ctx_id, long nr, | 22 | static inline long do_io_submit(aio_context_t ctx_id, long nr, |
| 86 | struct iocb __user * __user *iocbpp, | 23 | struct iocb __user * __user *iocbpp, |
| @@ -89,11 +26,6 @@ static inline void kiocb_set_cancel_fn(struct kiocb *req, | |||
| 89 | kiocb_cancel_fn *cancel) { } | 26 | kiocb_cancel_fn *cancel) { } |
| 90 | #endif /* CONFIG_AIO */ | 27 | #endif /* CONFIG_AIO */ |
| 91 | 28 | ||
| 92 | static inline struct kiocb *list_kiocb(struct list_head *h) | ||
| 93 | { | ||
| 94 | return list_entry(h, struct kiocb, ki_list); | ||
| 95 | } | ||
| 96 | |||
| 97 | /* for sysctl: */ | 29 | /* for sysctl: */ |
| 98 | extern unsigned long aio_nr; | 30 | extern unsigned long aio_nr; |
| 99 | extern unsigned long aio_max_nr; | 31 | extern unsigned long aio_max_nr; |
diff --git a/include/linux/ata.h b/include/linux/ata.h index 1648026e06b4..b666b773e111 100644 --- a/include/linux/ata.h +++ b/include/linux/ata.h | |||
| @@ -94,6 +94,8 @@ enum { | |||
| 94 | ATA_ID_SECTOR_SIZE = 106, | 94 | ATA_ID_SECTOR_SIZE = 106, |
| 95 | ATA_ID_WWN = 108, | 95 | ATA_ID_WWN = 108, |
| 96 | ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */ | 96 | ATA_ID_LOGICAL_SECTOR_SIZE = 117, /* and 118 */ |
| 97 | ATA_ID_COMMAND_SET_3 = 119, | ||
| 98 | ATA_ID_COMMAND_SET_4 = 120, | ||
| 97 | ATA_ID_LAST_LUN = 126, | 99 | ATA_ID_LAST_LUN = 126, |
| 98 | ATA_ID_DLF = 128, | 100 | ATA_ID_DLF = 128, |
| 99 | ATA_ID_CSFO = 129, | 101 | ATA_ID_CSFO = 129, |
| @@ -177,7 +179,7 @@ enum { | |||
| 177 | ATA_DSC = (1 << 4), /* drive seek complete */ | 179 | ATA_DSC = (1 << 4), /* drive seek complete */ |
| 178 | ATA_DRQ = (1 << 3), /* data request i/o */ | 180 | ATA_DRQ = (1 << 3), /* data request i/o */ |
| 179 | ATA_CORR = (1 << 2), /* corrected data error */ | 181 | ATA_CORR = (1 << 2), /* corrected data error */ |
| 180 | ATA_IDX = (1 << 1), /* index */ | 182 | ATA_SENSE = (1 << 1), /* sense code available */ |
| 181 | ATA_ERR = (1 << 0), /* have an error */ | 183 | ATA_ERR = (1 << 0), /* have an error */ |
| 182 | ATA_SRST = (1 << 2), /* software reset */ | 184 | ATA_SRST = (1 << 2), /* software reset */ |
| 183 | ATA_ICRC = (1 << 7), /* interface CRC error */ | 185 | ATA_ICRC = (1 << 7), /* interface CRC error */ |
| @@ -382,6 +384,8 @@ enum { | |||
| 382 | SATA_SSP = 0x06, /* Software Settings Preservation */ | 384 | SATA_SSP = 0x06, /* Software Settings Preservation */ |
| 383 | SATA_DEVSLP = 0x09, /* Device Sleep */ | 385 | SATA_DEVSLP = 0x09, /* Device Sleep */ |
| 384 | 386 | ||
| 387 | SETFEATURE_SENSE_DATA = 0xC3, /* Sense Data Reporting feature */ | ||
| 388 | |||
| 385 | /* feature values for SET_MAX */ | 389 | /* feature values for SET_MAX */ |
| 386 | ATA_SET_MAX_ADDR = 0x00, | 390 | ATA_SET_MAX_ADDR = 0x00, |
| 387 | ATA_SET_MAX_PASSWD = 0x01, | 391 | ATA_SET_MAX_PASSWD = 0x01, |
| @@ -525,6 +529,8 @@ struct ata_bmdma_prd { | |||
| 525 | #define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20) | 529 | #define ata_id_cdb_intr(id) (((id)[ATA_ID_CONFIG] & 0x60) == 0x20) |
| 526 | #define ata_id_has_da(id) ((id)[ATA_ID_SATA_CAPABILITY_2] & (1 << 4)) | 530 | #define ata_id_has_da(id) ((id)[ATA_ID_SATA_CAPABILITY_2] & (1 << 4)) |
| 527 | #define ata_id_has_devslp(id) ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8)) | 531 | #define ata_id_has_devslp(id) ((id)[ATA_ID_FEATURE_SUPP] & (1 << 8)) |
| 532 | #define ata_id_has_ncq_autosense(id) \ | ||
| 533 | ((id)[ATA_ID_FEATURE_SUPP] & (1 << 7)) | ||
| 528 | 534 | ||
| 529 | static inline bool ata_id_has_hipm(const u16 *id) | 535 | static inline bool ata_id_has_hipm(const u16 *id) |
| 530 | { | 536 | { |
| @@ -696,6 +702,27 @@ static inline bool ata_id_wcache_enabled(const u16 *id) | |||
| 696 | return id[ATA_ID_CFS_ENABLE_1] & (1 << 5); | 702 | return id[ATA_ID_CFS_ENABLE_1] & (1 << 5); |
| 697 | } | 703 | } |
| 698 | 704 | ||
| 705 | static inline bool ata_id_has_read_log_dma_ext(const u16 *id) | ||
| 706 | { | ||
| 707 | if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15))) | ||
| 708 | return false; | ||
| 709 | return id[ATA_ID_COMMAND_SET_3] & (1 << 3); | ||
| 710 | } | ||
| 711 | |||
| 712 | static inline bool ata_id_has_sense_reporting(const u16 *id) | ||
| 713 | { | ||
| 714 | if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15))) | ||
| 715 | return false; | ||
| 716 | return id[ATA_ID_COMMAND_SET_3] & (1 << 6); | ||
| 717 | } | ||
| 718 | |||
| 719 | static inline bool ata_id_sense_reporting_enabled(const u16 *id) | ||
| 720 | { | ||
| 721 | if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15))) | ||
| 722 | return false; | ||
| 723 | return id[ATA_ID_COMMAND_SET_4] & (1 << 6); | ||
| 724 | } | ||
| 725 | |||
| 699 | /** | 726 | /** |
| 700 | * ata_id_major_version - get ATA level of drive | 727 | * ata_id_major_version - get ATA level of drive |
| 701 | * @id: Identify data | 728 | * @id: Identify data |
diff --git a/include/linux/bpf.h b/include/linux/bpf.h index bbfceb756452..c2e21113ecc0 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h | |||
| @@ -113,8 +113,6 @@ struct bpf_prog_type_list { | |||
| 113 | enum bpf_prog_type type; | 113 | enum bpf_prog_type type; |
| 114 | }; | 114 | }; |
| 115 | 115 | ||
| 116 | void bpf_register_prog_type(struct bpf_prog_type_list *tl); | ||
| 117 | |||
| 118 | struct bpf_prog; | 116 | struct bpf_prog; |
| 119 | 117 | ||
| 120 | struct bpf_prog_aux { | 118 | struct bpf_prog_aux { |
| @@ -129,11 +127,25 @@ struct bpf_prog_aux { | |||
| 129 | }; | 127 | }; |
| 130 | 128 | ||
| 131 | #ifdef CONFIG_BPF_SYSCALL | 129 | #ifdef CONFIG_BPF_SYSCALL |
| 130 | void bpf_register_prog_type(struct bpf_prog_type_list *tl); | ||
| 131 | |||
| 132 | void bpf_prog_put(struct bpf_prog *prog); | 132 | void bpf_prog_put(struct bpf_prog *prog); |
| 133 | struct bpf_prog *bpf_prog_get(u32 ufd); | ||
| 133 | #else | 134 | #else |
| 134 | static inline void bpf_prog_put(struct bpf_prog *prog) {} | 135 | static inline void bpf_register_prog_type(struct bpf_prog_type_list *tl) |
| 136 | { | ||
| 137 | } | ||
| 138 | |||
| 139 | static inline struct bpf_prog *bpf_prog_get(u32 ufd) | ||
| 140 | { | ||
| 141 | return ERR_PTR(-EOPNOTSUPP); | ||
| 142 | } | ||
| 143 | |||
| 144 | static inline void bpf_prog_put(struct bpf_prog *prog) | ||
| 145 | { | ||
| 146 | } | ||
| 135 | #endif | 147 | #endif |
| 136 | struct bpf_prog *bpf_prog_get(u32 ufd); | 148 | |
| 137 | /* verify correctness of eBPF program */ | 149 | /* verify correctness of eBPF program */ |
| 138 | int bpf_check(struct bpf_prog *fp, union bpf_attr *attr); | 150 | int bpf_check(struct bpf_prog *fp, union bpf_attr *attr); |
| 139 | 151 | ||
diff --git a/include/linux/cleancache.h b/include/linux/cleancache.h index 4ce9056b31a8..bda5ec0b4b4d 100644 --- a/include/linux/cleancache.h +++ b/include/linux/cleancache.h | |||
| @@ -5,6 +5,10 @@ | |||
| 5 | #include <linux/exportfs.h> | 5 | #include <linux/exportfs.h> |
| 6 | #include <linux/mm.h> | 6 | #include <linux/mm.h> |
| 7 | 7 | ||
| 8 | #define CLEANCACHE_NO_POOL -1 | ||
| 9 | #define CLEANCACHE_NO_BACKEND -2 | ||
| 10 | #define CLEANCACHE_NO_BACKEND_SHARED -3 | ||
| 11 | |||
| 8 | #define CLEANCACHE_KEY_MAX 6 | 12 | #define CLEANCACHE_KEY_MAX 6 |
| 9 | 13 | ||
| 10 | /* | 14 | /* |
| @@ -33,10 +37,9 @@ struct cleancache_ops { | |||
| 33 | void (*invalidate_fs)(int); | 37 | void (*invalidate_fs)(int); |
| 34 | }; | 38 | }; |
| 35 | 39 | ||
| 36 | extern struct cleancache_ops * | 40 | extern int cleancache_register_ops(struct cleancache_ops *ops); |
| 37 | cleancache_register_ops(struct cleancache_ops *ops); | ||
| 38 | extern void __cleancache_init_fs(struct super_block *); | 41 | extern void __cleancache_init_fs(struct super_block *); |
| 39 | extern void __cleancache_init_shared_fs(char *, struct super_block *); | 42 | extern void __cleancache_init_shared_fs(struct super_block *); |
| 40 | extern int __cleancache_get_page(struct page *); | 43 | extern int __cleancache_get_page(struct page *); |
| 41 | extern void __cleancache_put_page(struct page *); | 44 | extern void __cleancache_put_page(struct page *); |
| 42 | extern void __cleancache_invalidate_page(struct address_space *, struct page *); | 45 | extern void __cleancache_invalidate_page(struct address_space *, struct page *); |
| @@ -78,10 +81,10 @@ static inline void cleancache_init_fs(struct super_block *sb) | |||
| 78 | __cleancache_init_fs(sb); | 81 | __cleancache_init_fs(sb); |
| 79 | } | 82 | } |
| 80 | 83 | ||
| 81 | static inline void cleancache_init_shared_fs(char *uuid, struct super_block *sb) | 84 | static inline void cleancache_init_shared_fs(struct super_block *sb) |
| 82 | { | 85 | { |
| 83 | if (cleancache_enabled) | 86 | if (cleancache_enabled) |
| 84 | __cleancache_init_shared_fs(uuid, sb); | 87 | __cleancache_init_shared_fs(sb); |
| 85 | } | 88 | } |
| 86 | 89 | ||
| 87 | static inline int cleancache_get_page(struct page *page) | 90 | static inline int cleancache_get_page(struct page *page) |
diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 2e4cb67f6e56..96c280b2c263 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h | |||
| @@ -8,33 +8,19 @@ | |||
| 8 | #ifndef _LINUX_CLOCKCHIPS_H | 8 | #ifndef _LINUX_CLOCKCHIPS_H |
| 9 | #define _LINUX_CLOCKCHIPS_H | 9 | #define _LINUX_CLOCKCHIPS_H |
| 10 | 10 | ||
| 11 | /* Clock event notification values */ | 11 | #ifdef CONFIG_GENERIC_CLOCKEVENTS |
| 12 | enum clock_event_nofitiers { | ||
| 13 | CLOCK_EVT_NOTIFY_ADD, | ||
| 14 | CLOCK_EVT_NOTIFY_BROADCAST_ON, | ||
| 15 | CLOCK_EVT_NOTIFY_BROADCAST_OFF, | ||
| 16 | CLOCK_EVT_NOTIFY_BROADCAST_FORCE, | ||
| 17 | CLOCK_EVT_NOTIFY_BROADCAST_ENTER, | ||
| 18 | CLOCK_EVT_NOTIFY_BROADCAST_EXIT, | ||
| 19 | CLOCK_EVT_NOTIFY_SUSPEND, | ||
| 20 | CLOCK_EVT_NOTIFY_RESUME, | ||
| 21 | CLOCK_EVT_NOTIFY_CPU_DYING, | ||
| 22 | CLOCK_EVT_NOTIFY_CPU_DEAD, | ||
| 23 | }; | ||
| 24 | |||
| 25 | #ifdef CONFIG_GENERIC_CLOCKEVENTS_BUILD | ||
| 26 | 12 | ||
| 27 | #include <linux/clocksource.h> | 13 | # include <linux/clocksource.h> |
| 28 | #include <linux/cpumask.h> | 14 | # include <linux/cpumask.h> |
| 29 | #include <linux/ktime.h> | 15 | # include <linux/ktime.h> |
| 30 | #include <linux/notifier.h> | 16 | # include <linux/notifier.h> |
| 31 | 17 | ||
| 32 | struct clock_event_device; | 18 | struct clock_event_device; |
| 33 | struct module; | 19 | struct module; |
| 34 | 20 | ||
| 35 | /* Clock event mode commands */ | 21 | /* Clock event mode commands for legacy ->set_mode(): OBSOLETE */ |
| 36 | enum clock_event_mode { | 22 | enum clock_event_mode { |
| 37 | CLOCK_EVT_MODE_UNUSED = 0, | 23 | CLOCK_EVT_MODE_UNUSED, |
| 38 | CLOCK_EVT_MODE_SHUTDOWN, | 24 | CLOCK_EVT_MODE_SHUTDOWN, |
| 39 | CLOCK_EVT_MODE_PERIODIC, | 25 | CLOCK_EVT_MODE_PERIODIC, |
| 40 | CLOCK_EVT_MODE_ONESHOT, | 26 | CLOCK_EVT_MODE_ONESHOT, |
| @@ -42,30 +28,49 @@ enum clock_event_mode { | |||
| 42 | }; | 28 | }; |
| 43 | 29 | ||
| 44 | /* | 30 | /* |
| 31 | * Possible states of a clock event device. | ||
| 32 | * | ||
| 33 | * DETACHED: Device is not used by clockevents core. Initial state or can be | ||
| 34 | * reached from SHUTDOWN. | ||
| 35 | * SHUTDOWN: Device is powered-off. Can be reached from PERIODIC or ONESHOT. | ||
| 36 | * PERIODIC: Device is programmed to generate events periodically. Can be | ||
| 37 | * reached from DETACHED or SHUTDOWN. | ||
| 38 | * ONESHOT: Device is programmed to generate event only once. Can be reached | ||
| 39 | * from DETACHED or SHUTDOWN. | ||
| 40 | */ | ||
| 41 | enum clock_event_state { | ||
| 42 | CLOCK_EVT_STATE_DETACHED, | ||
| 43 | CLOCK_EVT_STATE_SHUTDOWN, | ||
| 44 | CLOCK_EVT_STATE_PERIODIC, | ||
| 45 | CLOCK_EVT_STATE_ONESHOT, | ||
| 46 | }; | ||
| 47 | |||
| 48 | /* | ||
| 45 | * Clock event features | 49 | * Clock event features |
| 46 | */ | 50 | */ |
| 47 | #define CLOCK_EVT_FEAT_PERIODIC 0x000001 | 51 | # define CLOCK_EVT_FEAT_PERIODIC 0x000001 |
| 48 | #define CLOCK_EVT_FEAT_ONESHOT 0x000002 | 52 | # define CLOCK_EVT_FEAT_ONESHOT 0x000002 |
| 49 | #define CLOCK_EVT_FEAT_KTIME 0x000004 | 53 | # define CLOCK_EVT_FEAT_KTIME 0x000004 |
| 54 | |||
| 50 | /* | 55 | /* |
| 51 | * x86(64) specific misfeatures: | 56 | * x86(64) specific (mis)features: |
| 52 | * | 57 | * |
| 53 | * - Clockevent source stops in C3 State and needs broadcast support. | 58 | * - Clockevent source stops in C3 State and needs broadcast support. |
| 54 | * - Local APIC timer is used as a dummy device. | 59 | * - Local APIC timer is used as a dummy device. |
| 55 | */ | 60 | */ |
| 56 | #define CLOCK_EVT_FEAT_C3STOP 0x000008 | 61 | # define CLOCK_EVT_FEAT_C3STOP 0x000008 |
| 57 | #define CLOCK_EVT_FEAT_DUMMY 0x000010 | 62 | # define CLOCK_EVT_FEAT_DUMMY 0x000010 |
| 58 | 63 | ||
| 59 | /* | 64 | /* |
| 60 | * Core shall set the interrupt affinity dynamically in broadcast mode | 65 | * Core shall set the interrupt affinity dynamically in broadcast mode |
| 61 | */ | 66 | */ |
| 62 | #define CLOCK_EVT_FEAT_DYNIRQ 0x000020 | 67 | # define CLOCK_EVT_FEAT_DYNIRQ 0x000020 |
| 63 | #define CLOCK_EVT_FEAT_PERCPU 0x000040 | 68 | # define CLOCK_EVT_FEAT_PERCPU 0x000040 |
| 64 | 69 | ||
| 65 | /* | 70 | /* |
| 66 | * Clockevent device is based on a hrtimer for broadcast | 71 | * Clockevent device is based on a hrtimer for broadcast |
| 67 | */ | 72 | */ |
| 68 | #define CLOCK_EVT_FEAT_HRTIMER 0x000080 | 73 | # define CLOCK_EVT_FEAT_HRTIMER 0x000080 |
| 69 | 74 | ||
| 70 | /** | 75 | /** |
| 71 | * struct clock_event_device - clock event device descriptor | 76 | * struct clock_event_device - clock event device descriptor |
| @@ -78,10 +83,15 @@ enum clock_event_mode { | |||
| 78 | * @min_delta_ns: minimum delta value in ns | 83 | * @min_delta_ns: minimum delta value in ns |
| 79 | * @mult: nanosecond to cycles multiplier | 84 | * @mult: nanosecond to cycles multiplier |
| 80 | * @shift: nanoseconds to cycles divisor (power of two) | 85 | * @shift: nanoseconds to cycles divisor (power of two) |
| 81 | * @mode: operating mode assigned by the management code | 86 | * @mode: operating mode, relevant only to ->set_mode(), OBSOLETE |
| 87 | * @state: current state of the device, assigned by the core code | ||
| 82 | * @features: features | 88 | * @features: features |
| 83 | * @retries: number of forced programming retries | 89 | * @retries: number of forced programming retries |
| 84 | * @set_mode: set mode function | 90 | * @set_mode: legacy set mode function, only for modes <= CLOCK_EVT_MODE_RESUME. |
| 91 | * @set_state_periodic: switch state to periodic, if !set_mode | ||
| 92 | * @set_state_oneshot: switch state to oneshot, if !set_mode | ||
| 93 | * @set_state_shutdown: switch state to shutdown, if !set_mode | ||
| 94 | * @tick_resume: resume clkevt device, if !set_mode | ||
| 85 | * @broadcast: function to broadcast events | 95 | * @broadcast: function to broadcast events |
| 86 | * @min_delta_ticks: minimum delta value in ticks stored for reconfiguration | 96 | * @min_delta_ticks: minimum delta value in ticks stored for reconfiguration |
| 87 | * @max_delta_ticks: maximum delta value in ticks stored for reconfiguration | 97 | * @max_delta_ticks: maximum delta value in ticks stored for reconfiguration |
| @@ -95,22 +105,31 @@ enum clock_event_mode { | |||
| 95 | */ | 105 | */ |
| 96 | struct clock_event_device { | 106 | struct clock_event_device { |
| 97 | void (*event_handler)(struct clock_event_device *); | 107 | void (*event_handler)(struct clock_event_device *); |
| 98 | int (*set_next_event)(unsigned long evt, | 108 | int (*set_next_event)(unsigned long evt, struct clock_event_device *); |
| 99 | struct clock_event_device *); | 109 | int (*set_next_ktime)(ktime_t expires, struct clock_event_device *); |
| 100 | int (*set_next_ktime)(ktime_t expires, | ||
| 101 | struct clock_event_device *); | ||
| 102 | ktime_t next_event; | 110 | ktime_t next_event; |
| 103 | u64 max_delta_ns; | 111 | u64 max_delta_ns; |
| 104 | u64 min_delta_ns; | 112 | u64 min_delta_ns; |
| 105 | u32 mult; | 113 | u32 mult; |
| 106 | u32 shift; | 114 | u32 shift; |
| 107 | enum clock_event_mode mode; | 115 | enum clock_event_mode mode; |
| 116 | enum clock_event_state state; | ||
| 108 | unsigned int features; | 117 | unsigned int features; |
| 109 | unsigned long retries; | 118 | unsigned long retries; |
| 110 | 119 | ||
| 120 | /* | ||
| 121 | * State transition callback(s): Only one of the two groups should be | ||
| 122 | * defined: | ||
| 123 | * - set_mode(), only for modes <= CLOCK_EVT_MODE_RESUME. | ||
| 124 | * - set_state_{shutdown|periodic|oneshot}(), tick_resume(). | ||
| 125 | */ | ||
| 126 | void (*set_mode)(enum clock_event_mode mode, struct clock_event_device *); | ||
| 127 | int (*set_state_periodic)(struct clock_event_device *); | ||
| 128 | int (*set_state_oneshot)(struct clock_event_device *); | ||
| 129 | int (*set_state_shutdown)(struct clock_event_device *); | ||
| 130 | int (*tick_resume)(struct clock_event_device *); | ||
| 131 | |||
| 111 | void (*broadcast)(const struct cpumask *mask); | 132 | void (*broadcast)(const struct cpumask *mask); |
| 112 | void (*set_mode)(enum clock_event_mode mode, | ||
| 113 | struct clock_event_device *); | ||
| 114 | void (*suspend)(struct clock_event_device *); | 133 | void (*suspend)(struct clock_event_device *); |
| 115 | void (*resume)(struct clock_event_device *); | 134 | void (*resume)(struct clock_event_device *); |
| 116 | unsigned long min_delta_ticks; | 135 | unsigned long min_delta_ticks; |
| @@ -136,18 +155,18 @@ struct clock_event_device { | |||
| 136 | * | 155 | * |
| 137 | * factor = (clock_ticks << shift) / nanoseconds | 156 | * factor = (clock_ticks << shift) / nanoseconds |
| 138 | */ | 157 | */ |
| 139 | static inline unsigned long div_sc(unsigned long ticks, unsigned long nsec, | 158 | static inline unsigned long |
| 140 | int shift) | 159 | div_sc(unsigned long ticks, unsigned long nsec, int shift) |
| 141 | { | 160 | { |
| 142 | uint64_t tmp = ((uint64_t)ticks) << shift; | 161 | u64 tmp = ((u64)ticks) << shift; |
| 143 | 162 | ||
| 144 | do_div(tmp, nsec); | 163 | do_div(tmp, nsec); |
| 164 | |||
| 145 | return (unsigned long) tmp; | 165 | return (unsigned long) tmp; |
| 146 | } | 166 | } |
| 147 | 167 | ||
| 148 | /* Clock event layer functions */ | 168 | /* Clock event layer functions */ |
| 149 | extern u64 clockevent_delta2ns(unsigned long latch, | 169 | extern u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *evt); |
| 150 | struct clock_event_device *evt); | ||
| 151 | extern void clockevents_register_device(struct clock_event_device *dev); | 170 | extern void clockevents_register_device(struct clock_event_device *dev); |
| 152 | extern int clockevents_unbind_device(struct clock_event_device *ced, int cpu); | 171 | extern int clockevents_unbind_device(struct clock_event_device *ced, int cpu); |
| 153 | 172 | ||
| @@ -158,57 +177,42 @@ extern void clockevents_config_and_register(struct clock_event_device *dev, | |||
| 158 | 177 | ||
| 159 | extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq); | 178 | extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq); |
| 160 | 179 | ||
| 161 | extern void clockevents_exchange_device(struct clock_event_device *old, | ||
| 162 | struct clock_event_device *new); | ||
| 163 | extern void clockevents_set_mode(struct clock_event_device *dev, | ||
| 164 | enum clock_event_mode mode); | ||
| 165 | extern int clockevents_program_event(struct clock_event_device *dev, | ||
| 166 | ktime_t expires, bool force); | ||
| 167 | |||
| 168 | extern void clockevents_handle_noop(struct clock_event_device *dev); | ||
| 169 | |||
| 170 | static inline void | 180 | static inline void |
| 171 | clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec) | 181 | clockevents_calc_mult_shift(struct clock_event_device *ce, u32 freq, u32 minsec) |
| 172 | { | 182 | { |
| 173 | return clocks_calc_mult_shift(&ce->mult, &ce->shift, NSEC_PER_SEC, | 183 | return clocks_calc_mult_shift(&ce->mult, &ce->shift, NSEC_PER_SEC, freq, minsec); |
| 174 | freq, minsec); | ||
| 175 | } | 184 | } |
| 176 | 185 | ||
| 177 | extern void clockevents_suspend(void); | 186 | extern void clockevents_suspend(void); |
| 178 | extern void clockevents_resume(void); | 187 | extern void clockevents_resume(void); |
| 179 | 188 | ||
| 180 | #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST | 189 | # ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST |
| 181 | #ifdef CONFIG_ARCH_HAS_TICK_BROADCAST | 190 | # ifdef CONFIG_ARCH_HAS_TICK_BROADCAST |
| 182 | extern void tick_broadcast(const struct cpumask *mask); | 191 | extern void tick_broadcast(const struct cpumask *mask); |
| 183 | #else | 192 | # else |
| 184 | #define tick_broadcast NULL | 193 | # define tick_broadcast NULL |
| 185 | #endif | 194 | # endif |
| 186 | extern int tick_receive_broadcast(void); | 195 | extern int tick_receive_broadcast(void); |
| 187 | #endif | 196 | # endif |
| 188 | 197 | ||
| 189 | #if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT) | 198 | # if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT) |
| 190 | extern void tick_setup_hrtimer_broadcast(void); | 199 | extern void tick_setup_hrtimer_broadcast(void); |
| 191 | extern int tick_check_broadcast_expired(void); | 200 | extern int tick_check_broadcast_expired(void); |
| 192 | #else | 201 | # else |
| 193 | static inline int tick_check_broadcast_expired(void) { return 0; } | 202 | static inline int tick_check_broadcast_expired(void) { return 0; } |
| 194 | static inline void tick_setup_hrtimer_broadcast(void) {}; | 203 | static inline void tick_setup_hrtimer_broadcast(void) { } |
| 195 | #endif | 204 | # endif |
| 196 | 205 | ||
| 197 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | ||
| 198 | extern int clockevents_notify(unsigned long reason, void *arg); | 206 | extern int clockevents_notify(unsigned long reason, void *arg); |
| 199 | #else | ||
| 200 | static inline int clockevents_notify(unsigned long reason, void *arg) { return 0; } | ||
| 201 | #endif | ||
| 202 | |||
| 203 | #else /* CONFIG_GENERIC_CLOCKEVENTS_BUILD */ | ||
| 204 | 207 | ||
| 205 | static inline void clockevents_suspend(void) {} | 208 | #else /* !CONFIG_GENERIC_CLOCKEVENTS: */ |
| 206 | static inline void clockevents_resume(void) {} | ||
| 207 | 209 | ||
| 210 | static inline void clockevents_suspend(void) { } | ||
| 211 | static inline void clockevents_resume(void) { } | ||
| 208 | static inline int clockevents_notify(unsigned long reason, void *arg) { return 0; } | 212 | static inline int clockevents_notify(unsigned long reason, void *arg) { return 0; } |
| 209 | static inline int tick_check_broadcast_expired(void) { return 0; } | 213 | static inline int tick_check_broadcast_expired(void) { return 0; } |
| 210 | static inline void tick_setup_hrtimer_broadcast(void) {}; | 214 | static inline void tick_setup_hrtimer_broadcast(void) { } |
| 211 | 215 | ||
| 212 | #endif | 216 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ |
| 213 | 217 | ||
| 214 | #endif | 218 | #endif /* _LINUX_CLOCKCHIPS_H */ |
diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 9c78d15d33e4..135509821c39 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h | |||
| @@ -56,6 +56,7 @@ struct module; | |||
| 56 | * @shift: cycle to nanosecond divisor (power of two) | 56 | * @shift: cycle to nanosecond divisor (power of two) |
| 57 | * @max_idle_ns: max idle time permitted by the clocksource (nsecs) | 57 | * @max_idle_ns: max idle time permitted by the clocksource (nsecs) |
| 58 | * @maxadj: maximum adjustment value to mult (~11%) | 58 | * @maxadj: maximum adjustment value to mult (~11%) |
| 59 | * @max_cycles: maximum safe cycle value which won't overflow on multiplication | ||
| 59 | * @flags: flags describing special properties | 60 | * @flags: flags describing special properties |
| 60 | * @archdata: arch-specific data | 61 | * @archdata: arch-specific data |
| 61 | * @suspend: suspend function for the clocksource, if necessary | 62 | * @suspend: suspend function for the clocksource, if necessary |
| @@ -76,7 +77,7 @@ struct clocksource { | |||
| 76 | #ifdef CONFIG_ARCH_CLOCKSOURCE_DATA | 77 | #ifdef CONFIG_ARCH_CLOCKSOURCE_DATA |
| 77 | struct arch_clocksource_data archdata; | 78 | struct arch_clocksource_data archdata; |
| 78 | #endif | 79 | #endif |
| 79 | 80 | u64 max_cycles; | |
| 80 | const char *name; | 81 | const char *name; |
| 81 | struct list_head list; | 82 | struct list_head list; |
| 82 | int rating; | 83 | int rating; |
| @@ -178,7 +179,6 @@ static inline s64 clocksource_cyc2ns(cycle_t cycles, u32 mult, u32 shift) | |||
| 178 | } | 179 | } |
| 179 | 180 | ||
| 180 | 181 | ||
| 181 | extern int clocksource_register(struct clocksource*); | ||
| 182 | extern int clocksource_unregister(struct clocksource*); | 182 | extern int clocksource_unregister(struct clocksource*); |
| 183 | extern void clocksource_touch_watchdog(void); | 183 | extern void clocksource_touch_watchdog(void); |
| 184 | extern struct clocksource* clocksource_get_next(void); | 184 | extern struct clocksource* clocksource_get_next(void); |
| @@ -189,7 +189,7 @@ extern struct clocksource * __init clocksource_default_clock(void); | |||
| 189 | extern void clocksource_mark_unstable(struct clocksource *cs); | 189 | extern void clocksource_mark_unstable(struct clocksource *cs); |
| 190 | 190 | ||
| 191 | extern u64 | 191 | extern u64 |
| 192 | clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask); | 192 | clocks_calc_max_nsecs(u32 mult, u32 shift, u32 maxadj, u64 mask, u64 *max_cycles); |
| 193 | extern void | 193 | extern void |
| 194 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); | 194 | clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); |
| 195 | 195 | ||
| @@ -200,7 +200,16 @@ clocks_calc_mult_shift(u32 *mult, u32 *shift, u32 from, u32 to, u32 minsec); | |||
| 200 | extern int | 200 | extern int |
| 201 | __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq); | 201 | __clocksource_register_scale(struct clocksource *cs, u32 scale, u32 freq); |
| 202 | extern void | 202 | extern void |
| 203 | __clocksource_updatefreq_scale(struct clocksource *cs, u32 scale, u32 freq); | 203 | __clocksource_update_freq_scale(struct clocksource *cs, u32 scale, u32 freq); |
| 204 | |||
| 205 | /* | ||
| 206 | * Don't call this unless you are a default clocksource | ||
| 207 | * (AKA: jiffies) and absolutely have to. | ||
| 208 | */ | ||
| 209 | static inline int __clocksource_register(struct clocksource *cs) | ||
| 210 | { | ||
| 211 | return __clocksource_register_scale(cs, 1, 0); | ||
| 212 | } | ||
| 204 | 213 | ||
| 205 | static inline int clocksource_register_hz(struct clocksource *cs, u32 hz) | 214 | static inline int clocksource_register_hz(struct clocksource *cs, u32 hz) |
| 206 | { | 215 | { |
| @@ -212,14 +221,14 @@ static inline int clocksource_register_khz(struct clocksource *cs, u32 khz) | |||
| 212 | return __clocksource_register_scale(cs, 1000, khz); | 221 | return __clocksource_register_scale(cs, 1000, khz); |
| 213 | } | 222 | } |
| 214 | 223 | ||
| 215 | static inline void __clocksource_updatefreq_hz(struct clocksource *cs, u32 hz) | 224 | static inline void __clocksource_update_freq_hz(struct clocksource *cs, u32 hz) |
| 216 | { | 225 | { |
| 217 | __clocksource_updatefreq_scale(cs, 1, hz); | 226 | __clocksource_update_freq_scale(cs, 1, hz); |
| 218 | } | 227 | } |
| 219 | 228 | ||
| 220 | static inline void __clocksource_updatefreq_khz(struct clocksource *cs, u32 khz) | 229 | static inline void __clocksource_update_freq_khz(struct clocksource *cs, u32 khz) |
| 221 | { | 230 | { |
| 222 | __clocksource_updatefreq_scale(cs, 1000, khz); | 231 | __clocksource_update_freq_scale(cs, 1000, khz); |
| 223 | } | 232 | } |
| 224 | 233 | ||
| 225 | 234 | ||
diff --git a/include/linux/cma.h b/include/linux/cma.h index 9384ba66e975..f7ef093ec49a 100644 --- a/include/linux/cma.h +++ b/include/linux/cma.h | |||
| @@ -16,16 +16,16 @@ | |||
| 16 | struct cma; | 16 | struct cma; |
| 17 | 17 | ||
| 18 | extern unsigned long totalcma_pages; | 18 | extern unsigned long totalcma_pages; |
| 19 | extern phys_addr_t cma_get_base(struct cma *cma); | 19 | extern phys_addr_t cma_get_base(const struct cma *cma); |
| 20 | extern unsigned long cma_get_size(struct cma *cma); | 20 | extern unsigned long cma_get_size(const struct cma *cma); |
| 21 | 21 | ||
| 22 | extern int __init cma_declare_contiguous(phys_addr_t base, | 22 | extern int __init cma_declare_contiguous(phys_addr_t base, |
| 23 | phys_addr_t size, phys_addr_t limit, | 23 | phys_addr_t size, phys_addr_t limit, |
| 24 | phys_addr_t alignment, unsigned int order_per_bit, | 24 | phys_addr_t alignment, unsigned int order_per_bit, |
| 25 | bool fixed, struct cma **res_cma); | 25 | bool fixed, struct cma **res_cma); |
| 26 | extern int cma_init_reserved_mem(phys_addr_t base, | 26 | extern int cma_init_reserved_mem(phys_addr_t base, phys_addr_t size, |
| 27 | phys_addr_t size, int order_per_bit, | 27 | unsigned int order_per_bit, |
| 28 | struct cma **res_cma); | 28 | struct cma **res_cma); |
| 29 | extern struct page *cma_alloc(struct cma *cma, int count, unsigned int align); | 29 | extern struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align); |
| 30 | extern bool cma_release(struct cma *cma, struct page *pages, int count); | 30 | extern bool cma_release(struct cma *cma, const struct page *pages, unsigned int count); |
| 31 | #endif | 31 | #endif |
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index 1b45e4a0519b..0e41ca0e5927 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h | |||
| @@ -192,29 +192,16 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); | |||
| 192 | 192 | ||
| 193 | #include <uapi/linux/types.h> | 193 | #include <uapi/linux/types.h> |
| 194 | 194 | ||
| 195 | static __always_inline void data_access_exceeds_word_size(void) | ||
| 196 | #ifdef __compiletime_warning | ||
| 197 | __compiletime_warning("data access exceeds word size and won't be atomic") | ||
| 198 | #endif | ||
| 199 | ; | ||
| 200 | |||
| 201 | static __always_inline void data_access_exceeds_word_size(void) | ||
| 202 | { | ||
| 203 | } | ||
| 204 | |||
| 205 | static __always_inline void __read_once_size(const volatile void *p, void *res, int size) | 195 | static __always_inline void __read_once_size(const volatile void *p, void *res, int size) |
| 206 | { | 196 | { |
| 207 | switch (size) { | 197 | switch (size) { |
| 208 | case 1: *(__u8 *)res = *(volatile __u8 *)p; break; | 198 | case 1: *(__u8 *)res = *(volatile __u8 *)p; break; |
| 209 | case 2: *(__u16 *)res = *(volatile __u16 *)p; break; | 199 | case 2: *(__u16 *)res = *(volatile __u16 *)p; break; |
| 210 | case 4: *(__u32 *)res = *(volatile __u32 *)p; break; | 200 | case 4: *(__u32 *)res = *(volatile __u32 *)p; break; |
| 211 | #ifdef CONFIG_64BIT | ||
| 212 | case 8: *(__u64 *)res = *(volatile __u64 *)p; break; | 201 | case 8: *(__u64 *)res = *(volatile __u64 *)p; break; |
| 213 | #endif | ||
| 214 | default: | 202 | default: |
| 215 | barrier(); | 203 | barrier(); |
| 216 | __builtin_memcpy((void *)res, (const void *)p, size); | 204 | __builtin_memcpy((void *)res, (const void *)p, size); |
| 217 | data_access_exceeds_word_size(); | ||
| 218 | barrier(); | 205 | barrier(); |
| 219 | } | 206 | } |
| 220 | } | 207 | } |
| @@ -225,13 +212,10 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s | |||
| 225 | case 1: *(volatile __u8 *)p = *(__u8 *)res; break; | 212 | case 1: *(volatile __u8 *)p = *(__u8 *)res; break; |
| 226 | case 2: *(volatile __u16 *)p = *(__u16 *)res; break; | 213 | case 2: *(volatile __u16 *)p = *(__u16 *)res; break; |
| 227 | case 4: *(volatile __u32 *)p = *(__u32 *)res; break; | 214 | case 4: *(volatile __u32 *)p = *(__u32 *)res; break; |
| 228 | #ifdef CONFIG_64BIT | ||
| 229 | case 8: *(volatile __u64 *)p = *(__u64 *)res; break; | 215 | case 8: *(volatile __u64 *)p = *(__u64 *)res; break; |
| 230 | #endif | ||
| 231 | default: | 216 | default: |
| 232 | barrier(); | 217 | barrier(); |
| 233 | __builtin_memcpy((void *)p, (const void *)res, size); | 218 | __builtin_memcpy((void *)p, (const void *)res, size); |
| 234 | data_access_exceeds_word_size(); | ||
| 235 | barrier(); | 219 | barrier(); |
| 236 | } | 220 | } |
| 237 | } | 221 | } |
diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h index 37b81bd51ec0..2821838256b4 100644 --- a/include/linux/context_tracking.h +++ b/include/linux/context_tracking.h | |||
| @@ -10,6 +10,8 @@ | |||
| 10 | #ifdef CONFIG_CONTEXT_TRACKING | 10 | #ifdef CONFIG_CONTEXT_TRACKING |
| 11 | extern void context_tracking_cpu_set(int cpu); | 11 | extern void context_tracking_cpu_set(int cpu); |
| 12 | 12 | ||
| 13 | extern void context_tracking_enter(enum ctx_state state); | ||
| 14 | extern void context_tracking_exit(enum ctx_state state); | ||
| 13 | extern void context_tracking_user_enter(void); | 15 | extern void context_tracking_user_enter(void); |
| 14 | extern void context_tracking_user_exit(void); | 16 | extern void context_tracking_user_exit(void); |
| 15 | extern void __context_tracking_task_switch(struct task_struct *prev, | 17 | extern void __context_tracking_task_switch(struct task_struct *prev, |
| @@ -35,7 +37,8 @@ static inline enum ctx_state exception_enter(void) | |||
| 35 | return 0; | 37 | return 0; |
| 36 | 38 | ||
| 37 | prev_ctx = this_cpu_read(context_tracking.state); | 39 | prev_ctx = this_cpu_read(context_tracking.state); |
| 38 | context_tracking_user_exit(); | 40 | if (prev_ctx != CONTEXT_KERNEL) |
| 41 | context_tracking_exit(prev_ctx); | ||
| 39 | 42 | ||
| 40 | return prev_ctx; | 43 | return prev_ctx; |
| 41 | } | 44 | } |
| @@ -43,8 +46,8 @@ static inline enum ctx_state exception_enter(void) | |||
| 43 | static inline void exception_exit(enum ctx_state prev_ctx) | 46 | static inline void exception_exit(enum ctx_state prev_ctx) |
| 44 | { | 47 | { |
| 45 | if (context_tracking_is_enabled()) { | 48 | if (context_tracking_is_enabled()) { |
| 46 | if (prev_ctx == IN_USER) | 49 | if (prev_ctx != CONTEXT_KERNEL) |
| 47 | context_tracking_user_enter(); | 50 | context_tracking_enter(prev_ctx); |
| 48 | } | 51 | } |
| 49 | } | 52 | } |
| 50 | 53 | ||
| @@ -78,10 +81,16 @@ static inline void guest_enter(void) | |||
| 78 | vtime_guest_enter(current); | 81 | vtime_guest_enter(current); |
| 79 | else | 82 | else |
| 80 | current->flags |= PF_VCPU; | 83 | current->flags |= PF_VCPU; |
| 84 | |||
| 85 | if (context_tracking_is_enabled()) | ||
| 86 | context_tracking_enter(CONTEXT_GUEST); | ||
| 81 | } | 87 | } |
| 82 | 88 | ||
| 83 | static inline void guest_exit(void) | 89 | static inline void guest_exit(void) |
| 84 | { | 90 | { |
| 91 | if (context_tracking_is_enabled()) | ||
| 92 | context_tracking_exit(CONTEXT_GUEST); | ||
| 93 | |||
| 85 | if (vtime_accounting_enabled()) | 94 | if (vtime_accounting_enabled()) |
| 86 | vtime_guest_exit(current); | 95 | vtime_guest_exit(current); |
| 87 | else | 96 | else |
diff --git a/include/linux/context_tracking_state.h b/include/linux/context_tracking_state.h index 97a81225d037..6b7b96a32b75 100644 --- a/include/linux/context_tracking_state.h +++ b/include/linux/context_tracking_state.h | |||
| @@ -13,8 +13,9 @@ struct context_tracking { | |||
| 13 | */ | 13 | */ |
| 14 | bool active; | 14 | bool active; |
| 15 | enum ctx_state { | 15 | enum ctx_state { |
| 16 | IN_KERNEL = 0, | 16 | CONTEXT_KERNEL = 0, |
| 17 | IN_USER, | 17 | CONTEXT_USER, |
| 18 | CONTEXT_GUEST, | ||
| 18 | } state; | 19 | } state; |
| 19 | }; | 20 | }; |
| 20 | 21 | ||
| @@ -34,11 +35,13 @@ static inline bool context_tracking_cpu_is_enabled(void) | |||
| 34 | 35 | ||
| 35 | static inline bool context_tracking_in_user(void) | 36 | static inline bool context_tracking_in_user(void) |
| 36 | { | 37 | { |
| 37 | return __this_cpu_read(context_tracking.state) == IN_USER; | 38 | return __this_cpu_read(context_tracking.state) == CONTEXT_USER; |
| 38 | } | 39 | } |
| 39 | #else | 40 | #else |
| 40 | static inline bool context_tracking_in_user(void) { return false; } | 41 | static inline bool context_tracking_in_user(void) { return false; } |
| 41 | static inline bool context_tracking_active(void) { return false; } | 42 | static inline bool context_tracking_active(void) { return false; } |
| 43 | static inline bool context_tracking_is_enabled(void) { return false; } | ||
| 44 | static inline bool context_tracking_cpu_is_enabled(void) { return false; } | ||
| 42 | #endif /* CONFIG_CONTEXT_TRACKING */ | 45 | #endif /* CONFIG_CONTEXT_TRACKING */ |
| 43 | 46 | ||
| 44 | #endif | 47 | #endif |
diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 4260e8594bd7..c0fb6b1b4712 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h | |||
| @@ -73,6 +73,7 @@ enum { | |||
| 73 | /* migration should happen before other stuff but after perf */ | 73 | /* migration should happen before other stuff but after perf */ |
| 74 | CPU_PRI_PERF = 20, | 74 | CPU_PRI_PERF = 20, |
| 75 | CPU_PRI_MIGRATION = 10, | 75 | CPU_PRI_MIGRATION = 10, |
| 76 | CPU_PRI_SMPBOOT = 9, | ||
| 76 | /* bring up workqueues before normal notifiers and down after */ | 77 | /* bring up workqueues before normal notifiers and down after */ |
| 77 | CPU_PRI_WORKQUEUE_UP = 5, | 78 | CPU_PRI_WORKQUEUE_UP = 5, |
| 78 | CPU_PRI_WORKQUEUE_DOWN = -5, | 79 | CPU_PRI_WORKQUEUE_DOWN = -5, |
| @@ -95,6 +96,10 @@ enum { | |||
| 95 | * Called on the new cpu, just before | 96 | * Called on the new cpu, just before |
| 96 | * enabling interrupts. Must not sleep, | 97 | * enabling interrupts. Must not sleep, |
| 97 | * must not fail */ | 98 | * must not fail */ |
| 99 | #define CPU_DYING_IDLE 0x000B /* CPU (unsigned)v dying, reached | ||
| 100 | * idle loop. */ | ||
| 101 | #define CPU_BROKEN 0x000C /* CPU (unsigned)v did not die properly, | ||
| 102 | * perhaps due to preemption. */ | ||
| 98 | 103 | ||
| 99 | /* Used for CPU hotplug events occurring while tasks are frozen due to a suspend | 104 | /* Used for CPU hotplug events occurring while tasks are frozen due to a suspend |
| 100 | * operation in progress | 105 | * operation in progress |
| @@ -161,6 +166,7 @@ static inline void __unregister_cpu_notifier(struct notifier_block *nb) | |||
| 161 | } | 166 | } |
| 162 | #endif | 167 | #endif |
| 163 | 168 | ||
| 169 | void smpboot_thread_init(void); | ||
| 164 | int cpu_up(unsigned int cpu); | 170 | int cpu_up(unsigned int cpu); |
| 165 | void notify_cpu_starting(unsigned int cpu); | 171 | void notify_cpu_starting(unsigned int cpu); |
| 166 | extern void cpu_maps_update_begin(void); | 172 | extern void cpu_maps_update_begin(void); |
| @@ -208,6 +214,10 @@ static inline void cpu_notifier_register_done(void) | |||
| 208 | { | 214 | { |
| 209 | } | 215 | } |
| 210 | 216 | ||
| 217 | static inline void smpboot_thread_init(void) | ||
| 218 | { | ||
| 219 | } | ||
| 220 | |||
| 211 | #endif /* CONFIG_SMP */ | 221 | #endif /* CONFIG_SMP */ |
| 212 | extern struct bus_type cpu_subsys; | 222 | extern struct bus_type cpu_subsys; |
| 213 | 223 | ||
| @@ -271,4 +281,14 @@ void arch_cpu_idle_enter(void); | |||
| 271 | void arch_cpu_idle_exit(void); | 281 | void arch_cpu_idle_exit(void); |
| 272 | void arch_cpu_idle_dead(void); | 282 | void arch_cpu_idle_dead(void); |
| 273 | 283 | ||
| 284 | DECLARE_PER_CPU(bool, cpu_dead_idle); | ||
| 285 | |||
| 286 | int cpu_report_state(int cpu); | ||
| 287 | int cpu_check_up_prepare(int cpu); | ||
| 288 | void cpu_set_state_online(int cpu); | ||
| 289 | #ifdef CONFIG_HOTPLUG_CPU | ||
| 290 | bool cpu_wait_death(unsigned int cpu, int seconds); | ||
| 291 | bool cpu_report_death(void); | ||
| 292 | #endif /* #ifdef CONFIG_HOTPLUG_CPU */ | ||
| 293 | |||
| 274 | #endif /* _LINUX_CPU_H_ */ | 294 | #endif /* _LINUX_CPU_H_ */ |
diff --git a/include/linux/device.h b/include/linux/device.h index 324d02add7b4..6558af90c8fe 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -909,6 +909,13 @@ static inline void device_lock_assert(struct device *dev) | |||
| 909 | lockdep_assert_held(&dev->mutex); | 909 | lockdep_assert_held(&dev->mutex); |
| 910 | } | 910 | } |
| 911 | 911 | ||
| 912 | static inline struct device_node *dev_of_node(struct device *dev) | ||
| 913 | { | ||
| 914 | if (!IS_ENABLED(CONFIG_OF)) | ||
| 915 | return NULL; | ||
| 916 | return dev->of_node; | ||
| 917 | } | ||
| 918 | |||
| 912 | void driver_init(void); | 919 | void driver_init(void); |
| 913 | 920 | ||
| 914 | /* | 921 | /* |
diff --git a/include/linux/efi.h b/include/linux/efi.h index cf7e431cbc73..af5be0368dec 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
| @@ -942,6 +942,7 @@ extern int __init efi_setup_pcdp_console(char *); | |||
| 942 | #define EFI_64BIT 5 /* Is the firmware 64-bit? */ | 942 | #define EFI_64BIT 5 /* Is the firmware 64-bit? */ |
| 943 | #define EFI_PARAVIRT 6 /* Access is via a paravirt interface */ | 943 | #define EFI_PARAVIRT 6 /* Access is via a paravirt interface */ |
| 944 | #define EFI_ARCH_1 7 /* First arch-specific bit */ | 944 | #define EFI_ARCH_1 7 /* First arch-specific bit */ |
| 945 | #define EFI_DBG 8 /* Print additional debug info at runtime */ | ||
| 945 | 946 | ||
| 946 | #ifdef CONFIG_EFI | 947 | #ifdef CONFIG_EFI |
| 947 | /* | 948 | /* |
diff --git a/include/linux/elf-randomize.h b/include/linux/elf-randomize.h new file mode 100644 index 000000000000..b5f0bda9472e --- /dev/null +++ b/include/linux/elf-randomize.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | #ifndef _ELF_RANDOMIZE_H | ||
| 2 | #define _ELF_RANDOMIZE_H | ||
| 3 | |||
| 4 | struct mm_struct; | ||
| 5 | |||
| 6 | #ifndef CONFIG_ARCH_HAS_ELF_RANDOMIZE | ||
| 7 | static inline unsigned long arch_mmap_rnd(void) { return 0; } | ||
| 8 | # if defined(arch_randomize_brk) && defined(CONFIG_COMPAT_BRK) | ||
| 9 | # define compat_brk_randomized | ||
| 10 | # endif | ||
| 11 | # ifndef arch_randomize_brk | ||
| 12 | # define arch_randomize_brk(mm) (mm->brk) | ||
| 13 | # endif | ||
| 14 | #else | ||
| 15 | extern unsigned long arch_mmap_rnd(void); | ||
| 16 | extern unsigned long arch_randomize_brk(struct mm_struct *mm); | ||
| 17 | # ifdef CONFIG_COMPAT_BRK | ||
| 18 | # define compat_brk_randomized | ||
| 19 | # endif | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #endif | ||
diff --git a/include/linux/fs.h b/include/linux/fs.h index 52cc4492cb3a..d502e5436c84 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -314,6 +314,28 @@ struct page; | |||
| 314 | struct address_space; | 314 | struct address_space; |
| 315 | struct writeback_control; | 315 | struct writeback_control; |
| 316 | 316 | ||
| 317 | #define IOCB_EVENTFD (1 << 0) | ||
| 318 | |||
| 319 | struct kiocb { | ||
| 320 | struct file *ki_filp; | ||
| 321 | loff_t ki_pos; | ||
| 322 | void (*ki_complete)(struct kiocb *iocb, long ret, long ret2); | ||
| 323 | void *private; | ||
| 324 | int ki_flags; | ||
| 325 | }; | ||
| 326 | |||
| 327 | static inline bool is_sync_kiocb(struct kiocb *kiocb) | ||
| 328 | { | ||
| 329 | return kiocb->ki_complete == NULL; | ||
| 330 | } | ||
| 331 | |||
| 332 | static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp) | ||
| 333 | { | ||
| 334 | *kiocb = (struct kiocb) { | ||
| 335 | .ki_filp = filp, | ||
| 336 | }; | ||
| 337 | } | ||
| 338 | |||
| 317 | /* | 339 | /* |
| 318 | * "descriptor" for what we're up to with a read. | 340 | * "descriptor" for what we're up to with a read. |
| 319 | * This allows us to use the same read code yet | 341 | * This allows us to use the same read code yet |
| @@ -2145,7 +2167,7 @@ struct filename { | |||
| 2145 | const __user char *uptr; /* original userland pointer */ | 2167 | const __user char *uptr; /* original userland pointer */ |
| 2146 | struct audit_names *aname; | 2168 | struct audit_names *aname; |
| 2147 | int refcnt; | 2169 | int refcnt; |
| 2148 | bool separate; /* should "name" be freed? */ | 2170 | const char iname[]; |
| 2149 | }; | 2171 | }; |
| 2150 | 2172 | ||
| 2151 | extern long vfs_truncate(struct path *, loff_t); | 2173 | extern long vfs_truncate(struct path *, loff_t); |
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index c674ee8f7fca..46e83c2156c6 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
| @@ -13,6 +13,7 @@ struct trace_array; | |||
| 13 | struct trace_buffer; | 13 | struct trace_buffer; |
| 14 | struct tracer; | 14 | struct tracer; |
| 15 | struct dentry; | 15 | struct dentry; |
| 16 | struct bpf_prog; | ||
| 16 | 17 | ||
| 17 | struct trace_print_flags { | 18 | struct trace_print_flags { |
| 18 | unsigned long mask; | 19 | unsigned long mask; |
| @@ -202,7 +203,7 @@ enum trace_reg { | |||
| 202 | struct ftrace_event_call; | 203 | struct ftrace_event_call; |
| 203 | 204 | ||
| 204 | struct ftrace_event_class { | 205 | struct ftrace_event_class { |
| 205 | char *system; | 206 | const char *system; |
| 206 | void *probe; | 207 | void *probe; |
| 207 | #ifdef CONFIG_PERF_EVENTS | 208 | #ifdef CONFIG_PERF_EVENTS |
| 208 | void *perf_probe; | 209 | void *perf_probe; |
| @@ -252,6 +253,7 @@ enum { | |||
| 252 | TRACE_EVENT_FL_WAS_ENABLED_BIT, | 253 | TRACE_EVENT_FL_WAS_ENABLED_BIT, |
| 253 | TRACE_EVENT_FL_USE_CALL_FILTER_BIT, | 254 | TRACE_EVENT_FL_USE_CALL_FILTER_BIT, |
| 254 | TRACE_EVENT_FL_TRACEPOINT_BIT, | 255 | TRACE_EVENT_FL_TRACEPOINT_BIT, |
| 256 | TRACE_EVENT_FL_KPROBE_BIT, | ||
| 255 | }; | 257 | }; |
| 256 | 258 | ||
| 257 | /* | 259 | /* |
| @@ -265,6 +267,7 @@ enum { | |||
| 265 | * it is best to clear the buffers that used it). | 267 | * it is best to clear the buffers that used it). |
| 266 | * USE_CALL_FILTER - For ftrace internal events, don't use file filter | 268 | * USE_CALL_FILTER - For ftrace internal events, don't use file filter |
| 267 | * TRACEPOINT - Event is a tracepoint | 269 | * TRACEPOINT - Event is a tracepoint |
| 270 | * KPROBE - Event is a kprobe | ||
| 268 | */ | 271 | */ |
| 269 | enum { | 272 | enum { |
| 270 | TRACE_EVENT_FL_FILTERED = (1 << TRACE_EVENT_FL_FILTERED_BIT), | 273 | TRACE_EVENT_FL_FILTERED = (1 << TRACE_EVENT_FL_FILTERED_BIT), |
| @@ -274,6 +277,7 @@ enum { | |||
| 274 | TRACE_EVENT_FL_WAS_ENABLED = (1 << TRACE_EVENT_FL_WAS_ENABLED_BIT), | 277 | TRACE_EVENT_FL_WAS_ENABLED = (1 << TRACE_EVENT_FL_WAS_ENABLED_BIT), |
| 275 | TRACE_EVENT_FL_USE_CALL_FILTER = (1 << TRACE_EVENT_FL_USE_CALL_FILTER_BIT), | 278 | TRACE_EVENT_FL_USE_CALL_FILTER = (1 << TRACE_EVENT_FL_USE_CALL_FILTER_BIT), |
| 276 | TRACE_EVENT_FL_TRACEPOINT = (1 << TRACE_EVENT_FL_TRACEPOINT_BIT), | 279 | TRACE_EVENT_FL_TRACEPOINT = (1 << TRACE_EVENT_FL_TRACEPOINT_BIT), |
| 280 | TRACE_EVENT_FL_KPROBE = (1 << TRACE_EVENT_FL_KPROBE_BIT), | ||
| 277 | }; | 281 | }; |
| 278 | 282 | ||
| 279 | struct ftrace_event_call { | 283 | struct ftrace_event_call { |
| @@ -285,7 +289,7 @@ struct ftrace_event_call { | |||
| 285 | struct tracepoint *tp; | 289 | struct tracepoint *tp; |
| 286 | }; | 290 | }; |
| 287 | struct trace_event event; | 291 | struct trace_event event; |
| 288 | const char *print_fmt; | 292 | char *print_fmt; |
| 289 | struct event_filter *filter; | 293 | struct event_filter *filter; |
| 290 | void *mod; | 294 | void *mod; |
| 291 | void *data; | 295 | void *data; |
| @@ -303,6 +307,7 @@ struct ftrace_event_call { | |||
| 303 | #ifdef CONFIG_PERF_EVENTS | 307 | #ifdef CONFIG_PERF_EVENTS |
| 304 | int perf_refcount; | 308 | int perf_refcount; |
| 305 | struct hlist_head __percpu *perf_events; | 309 | struct hlist_head __percpu *perf_events; |
| 310 | struct bpf_prog *prog; | ||
| 306 | 311 | ||
| 307 | int (*perf_perm)(struct ftrace_event_call *, | 312 | int (*perf_perm)(struct ftrace_event_call *, |
| 308 | struct perf_event *); | 313 | struct perf_event *); |
| @@ -548,6 +553,15 @@ event_trigger_unlock_commit_regs(struct ftrace_event_file *file, | |||
| 548 | event_triggers_post_call(file, tt); | 553 | event_triggers_post_call(file, tt); |
| 549 | } | 554 | } |
| 550 | 555 | ||
| 556 | #ifdef CONFIG_BPF_SYSCALL | ||
| 557 | unsigned int trace_call_bpf(struct bpf_prog *prog, void *ctx); | ||
| 558 | #else | ||
| 559 | static inline unsigned int trace_call_bpf(struct bpf_prog *prog, void *ctx) | ||
| 560 | { | ||
| 561 | return 1; | ||
| 562 | } | ||
| 563 | #endif | ||
| 564 | |||
| 551 | enum { | 565 | enum { |
| 552 | FILTER_OTHER = 0, | 566 | FILTER_OTHER = 0, |
| 553 | FILTER_STATIC_STRING, | 567 | FILTER_STATIC_STRING, |
diff --git a/include/linux/gfp.h b/include/linux/gfp.h index 51bd1e72a917..97a9373e61e8 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h | |||
| @@ -57,8 +57,10 @@ struct vm_area_struct; | |||
| 57 | * _might_ fail. This depends upon the particular VM implementation. | 57 | * _might_ fail. This depends upon the particular VM implementation. |
| 58 | * | 58 | * |
| 59 | * __GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller | 59 | * __GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller |
| 60 | * cannot handle allocation failures. This modifier is deprecated and no new | 60 | * cannot handle allocation failures. New users should be evaluated carefully |
| 61 | * users should be added. | 61 | * (and the flag should be used only when there is no reasonable failure policy) |
| 62 | * but it is definitely preferable to use the flag rather than opencode endless | ||
| 63 | * loop around allocator. | ||
| 62 | * | 64 | * |
| 63 | * __GFP_NORETRY: The VM implementation must not retry indefinitely. | 65 | * __GFP_NORETRY: The VM implementation must not retry indefinitely. |
| 64 | * | 66 | * |
| @@ -117,16 +119,6 @@ struct vm_area_struct; | |||
| 117 | __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN | \ | 119 | __GFP_NOMEMALLOC | __GFP_NORETRY | __GFP_NOWARN | \ |
| 118 | __GFP_NO_KSWAPD) | 120 | __GFP_NO_KSWAPD) |
| 119 | 121 | ||
| 120 | /* | ||
| 121 | * GFP_THISNODE does not perform any reclaim, you most likely want to | ||
| 122 | * use __GFP_THISNODE to allocate from a given node without fallback! | ||
| 123 | */ | ||
| 124 | #ifdef CONFIG_NUMA | ||
| 125 | #define GFP_THISNODE (__GFP_THISNODE | __GFP_NOWARN | __GFP_NORETRY) | ||
| 126 | #else | ||
| 127 | #define GFP_THISNODE ((__force gfp_t)0) | ||
| 128 | #endif | ||
| 129 | |||
| 130 | /* This mask makes up all the page movable related flags */ | 122 | /* This mask makes up all the page movable related flags */ |
| 131 | #define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE) | 123 | #define GFP_MOVABLE_MASK (__GFP_RECLAIMABLE|__GFP_MOVABLE) |
| 132 | 124 | ||
diff --git a/include/linux/hardirq.h b/include/linux/hardirq.h index cba442ec3c66..f4af03404b97 100644 --- a/include/linux/hardirq.h +++ b/include/linux/hardirq.h | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | 9 | ||
| 10 | 10 | ||
| 11 | extern void synchronize_irq(unsigned int irq); | 11 | extern void synchronize_irq(unsigned int irq); |
| 12 | extern void synchronize_hardirq(unsigned int irq); | 12 | extern bool synchronize_hardirq(unsigned int irq); |
| 13 | 13 | ||
| 14 | #if defined(CONFIG_TINY_RCU) | 14 | #if defined(CONFIG_TINY_RCU) |
| 15 | 15 | ||
diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h index 4173a8fdad9e..0408421d885f 100644 --- a/include/linux/hid-sensor-hub.h +++ b/include/linux/hid-sensor-hub.h | |||
| @@ -49,19 +49,43 @@ struct hid_sensor_hub_attribute_info { | |||
| 49 | }; | 49 | }; |
| 50 | 50 | ||
| 51 | /** | 51 | /** |
| 52 | * struct sensor_hub_pending - Synchronous read pending information | ||
| 53 | * @status: Pending status true/false. | ||
| 54 | * @ready: Completion synchronization data. | ||
| 55 | * @usage_id: Usage id for physical device, E.g. Gyro usage id. | ||
| 56 | * @attr_usage_id: Usage Id of a field, E.g. X-AXIS for a gyro. | ||
| 57 | * @raw_size: Response size for a read request. | ||
| 58 | * @raw_data: Place holder for received response. | ||
| 59 | */ | ||
| 60 | struct sensor_hub_pending { | ||
| 61 | bool status; | ||
| 62 | struct completion ready; | ||
| 63 | u32 usage_id; | ||
| 64 | u32 attr_usage_id; | ||
| 65 | int raw_size; | ||
| 66 | u8 *raw_data; | ||
| 67 | }; | ||
| 68 | |||
| 69 | /** | ||
| 52 | * struct hid_sensor_hub_device - Stores the hub instance data | 70 | * struct hid_sensor_hub_device - Stores the hub instance data |
| 53 | * @hdev: Stores the hid instance. | 71 | * @hdev: Stores the hid instance. |
| 54 | * @vendor_id: Vendor id of hub device. | 72 | * @vendor_id: Vendor id of hub device. |
| 55 | * @product_id: Product id of hub device. | 73 | * @product_id: Product id of hub device. |
| 74 | * @usage: Usage id for this hub device instance. | ||
| 56 | * @start_collection_index: Starting index for a phy type collection | 75 | * @start_collection_index: Starting index for a phy type collection |
| 57 | * @end_collection_index: Last index for a phy type collection | 76 | * @end_collection_index: Last index for a phy type collection |
| 77 | * @mutex: synchronizing mutex. | ||
| 78 | * @pending: Holds information of pending sync read request. | ||
| 58 | */ | 79 | */ |
| 59 | struct hid_sensor_hub_device { | 80 | struct hid_sensor_hub_device { |
| 60 | struct hid_device *hdev; | 81 | struct hid_device *hdev; |
| 61 | u32 vendor_id; | 82 | u32 vendor_id; |
| 62 | u32 product_id; | 83 | u32 product_id; |
| 84 | u32 usage; | ||
| 63 | int start_collection_index; | 85 | int start_collection_index; |
| 64 | int end_collection_index; | 86 | int end_collection_index; |
| 87 | struct mutex mutex; | ||
| 88 | struct sensor_hub_pending pending; | ||
| 65 | }; | 89 | }; |
| 66 | 90 | ||
| 67 | /** | 91 | /** |
| @@ -152,40 +176,51 @@ int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev, | |||
| 152 | * @usage_id: Attribute usage id of parent physical device as per spec | 176 | * @usage_id: Attribute usage id of parent physical device as per spec |
| 153 | * @attr_usage_id: Attribute usage id as per spec | 177 | * @attr_usage_id: Attribute usage id as per spec |
| 154 | * @report_id: Report id to look for | 178 | * @report_id: Report id to look for |
| 179 | * @flag: Synchronous or asynchronous read | ||
| 155 | * | 180 | * |
| 156 | * Issues a synchronous read request for an input attribute. Returns | 181 | * Issues a synchronous or asynchronous read request for an input attribute. |
| 157 | * data upto 32 bits. Since client can get events, so this call should | 182 | * Returns data upto 32 bits. |
| 158 | * not be used for data paths, this will impact performance. | ||
| 159 | */ | 183 | */ |
| 160 | 184 | ||
| 185 | enum sensor_hub_read_flags { | ||
| 186 | SENSOR_HUB_SYNC, | ||
| 187 | SENSOR_HUB_ASYNC, | ||
| 188 | }; | ||
| 189 | |||
| 161 | int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, | 190 | int sensor_hub_input_attr_get_raw_value(struct hid_sensor_hub_device *hsdev, |
| 162 | u32 usage_id, | 191 | u32 usage_id, |
| 163 | u32 attr_usage_id, u32 report_id); | 192 | u32 attr_usage_id, u32 report_id, |
| 193 | enum sensor_hub_read_flags flag | ||
| 194 | ); | ||
| 195 | |||
| 164 | /** | 196 | /** |
| 165 | * sensor_hub_set_feature() - Feature set request | 197 | * sensor_hub_set_feature() - Feature set request |
| 166 | * @hsdev: Hub device instance. | 198 | * @hsdev: Hub device instance. |
| 167 | * @report_id: Report id to look for | 199 | * @report_id: Report id to look for |
| 168 | * @field_index: Field index inside a report | 200 | * @field_index: Field index inside a report |
| 169 | * @value: Value to set | 201 | * @buffer_size: size of the buffer |
| 202 | * @buffer: buffer to use in the feature set | ||
| 170 | * | 203 | * |
| 171 | * Used to set a field in feature report. For example this can set polling | 204 | * Used to set a field in feature report. For example this can set polling |
| 172 | * interval, sensitivity, activate/deactivate state. | 205 | * interval, sensitivity, activate/deactivate state. |
| 173 | */ | 206 | */ |
| 174 | int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, | 207 | int sensor_hub_set_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, |
| 175 | u32 field_index, s32 value); | 208 | u32 field_index, int buffer_size, void *buffer); |
| 176 | 209 | ||
| 177 | /** | 210 | /** |
| 178 | * sensor_hub_get_feature() - Feature get request | 211 | * sensor_hub_get_feature() - Feature get request |
| 179 | * @hsdev: Hub device instance. | 212 | * @hsdev: Hub device instance. |
| 180 | * @report_id: Report id to look for | 213 | * @report_id: Report id to look for |
| 181 | * @field_index: Field index inside a report | 214 | * @field_index: Field index inside a report |
| 182 | * @value: Place holder for return value | 215 | * @buffer_size: size of the buffer |
| 216 | * @buffer: buffer to copy output | ||
| 183 | * | 217 | * |
| 184 | * Used to get a field in feature report. For example this can get polling | 218 | * Used to get a field in feature report. For example this can get polling |
| 185 | * interval, sensitivity, activate/deactivate state. | 219 | * interval, sensitivity, activate/deactivate state. On success it returns |
| 220 | * number of bytes copied to buffer. On failure, it returns value < 0. | ||
| 186 | */ | 221 | */ |
| 187 | int sensor_hub_get_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, | 222 | int sensor_hub_get_feature(struct hid_sensor_hub_device *hsdev, u32 report_id, |
| 188 | u32 field_index, s32 *value); | 223 | u32 field_index, int buffer_size, void *buffer); |
| 189 | 224 | ||
| 190 | /* hid-sensor-attributes */ | 225 | /* hid-sensor-attributes */ |
| 191 | 226 | ||
diff --git a/include/linux/hid-sensor-ids.h b/include/linux/hid-sensor-ids.h index 109f0e633e01..f2ee90aed0c2 100644 --- a/include/linux/hid-sensor-ids.h +++ b/include/linux/hid-sensor-ids.h | |||
| @@ -21,6 +21,8 @@ | |||
| 21 | 21 | ||
| 22 | #define HID_MAX_PHY_DEVICES 0xFF | 22 | #define HID_MAX_PHY_DEVICES 0xFF |
| 23 | 23 | ||
| 24 | #define HID_USAGE_SENSOR_COLLECTION 0x200001 | ||
| 25 | |||
| 24 | /* Accel 3D (200073) */ | 26 | /* Accel 3D (200073) */ |
| 25 | #define HID_USAGE_SENSOR_ACCEL_3D 0x200073 | 27 | #define HID_USAGE_SENSOR_ACCEL_3D 0x200073 |
| 26 | #define HID_USAGE_SENSOR_DATA_ACCELERATION 0x200452 | 28 | #define HID_USAGE_SENSOR_DATA_ACCELERATION 0x200452 |
diff --git a/include/linux/hid.h b/include/linux/hid.h index efc7787a41a8..176b43670e5d 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -159,6 +159,7 @@ struct hid_item { | |||
| 159 | #define HID_UP_LED 0x00080000 | 159 | #define HID_UP_LED 0x00080000 |
| 160 | #define HID_UP_BUTTON 0x00090000 | 160 | #define HID_UP_BUTTON 0x00090000 |
| 161 | #define HID_UP_ORDINAL 0x000a0000 | 161 | #define HID_UP_ORDINAL 0x000a0000 |
| 162 | #define HID_UP_TELEPHONY 0x000b0000 | ||
| 162 | #define HID_UP_CONSUMER 0x000c0000 | 163 | #define HID_UP_CONSUMER 0x000c0000 |
| 163 | #define HID_UP_DIGITIZER 0x000d0000 | 164 | #define HID_UP_DIGITIZER 0x000d0000 |
| 164 | #define HID_UP_PID 0x000f0000 | 165 | #define HID_UP_PID 0x000f0000 |
| @@ -269,6 +270,7 @@ struct hid_item { | |||
| 269 | #define HID_DG_DEVICEINDEX 0x000d0053 | 270 | #define HID_DG_DEVICEINDEX 0x000d0053 |
| 270 | #define HID_DG_CONTACTCOUNT 0x000d0054 | 271 | #define HID_DG_CONTACTCOUNT 0x000d0054 |
| 271 | #define HID_DG_CONTACTMAX 0x000d0055 | 272 | #define HID_DG_CONTACTMAX 0x000d0055 |
| 273 | #define HID_DG_BUTTONTYPE 0x000d0059 | ||
| 272 | #define HID_DG_BARRELSWITCH2 0x000d005a | 274 | #define HID_DG_BARRELSWITCH2 0x000d005a |
| 273 | #define HID_DG_TOOLSERIALNUMBER 0x000d005b | 275 | #define HID_DG_TOOLSERIALNUMBER 0x000d005b |
| 274 | 276 | ||
| @@ -514,10 +516,10 @@ struct hid_device { /* device report descriptor */ | |||
| 514 | #ifdef CONFIG_HID_BATTERY_STRENGTH | 516 | #ifdef CONFIG_HID_BATTERY_STRENGTH |
| 515 | /* | 517 | /* |
| 516 | * Power supply information for HID devices which report | 518 | * Power supply information for HID devices which report |
| 517 | * battery strength. power_supply is registered iff | 519 | * battery strength. power_supply was successfully registered if |
| 518 | * battery.name is non-NULL. | 520 | * battery is non-NULL. |
| 519 | */ | 521 | */ |
| 520 | struct power_supply battery; | 522 | struct power_supply *battery; |
| 521 | __s32 battery_min; | 523 | __s32 battery_min; |
| 522 | __s32 battery_max; | 524 | __s32 battery_max; |
| 523 | __s32 battery_report_type; | 525 | __s32 battery_report_type; |
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index 6d89575361a8..e83a738a3b87 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
| @@ -253,10 +253,10 @@ static inline void i2c_set_clientdata(struct i2c_client *dev, void *data) | |||
| 253 | 253 | ||
| 254 | #if IS_ENABLED(CONFIG_I2C_SLAVE) | 254 | #if IS_ENABLED(CONFIG_I2C_SLAVE) |
| 255 | enum i2c_slave_event { | 255 | enum i2c_slave_event { |
| 256 | I2C_SLAVE_REQ_READ_START, | 256 | I2C_SLAVE_READ_REQUESTED, |
| 257 | I2C_SLAVE_REQ_READ_END, | 257 | I2C_SLAVE_WRITE_REQUESTED, |
| 258 | I2C_SLAVE_REQ_WRITE_START, | 258 | I2C_SLAVE_READ_PROCESSED, |
| 259 | I2C_SLAVE_REQ_WRITE_END, | 259 | I2C_SLAVE_WRITE_RECEIVED, |
| 260 | I2C_SLAVE_STOP, | 260 | I2C_SLAVE_STOP, |
| 261 | }; | 261 | }; |
| 262 | 262 | ||
| @@ -435,8 +435,8 @@ struct i2c_bus_recovery_info { | |||
| 435 | void (*set_scl)(struct i2c_adapter *, int val); | 435 | void (*set_scl)(struct i2c_adapter *, int val); |
| 436 | int (*get_sda)(struct i2c_adapter *); | 436 | int (*get_sda)(struct i2c_adapter *); |
| 437 | 437 | ||
| 438 | void (*prepare_recovery)(struct i2c_bus_recovery_info *bri); | 438 | void (*prepare_recovery)(struct i2c_adapter *); |
| 439 | void (*unprepare_recovery)(struct i2c_bus_recovery_info *bri); | 439 | void (*unprepare_recovery)(struct i2c_adapter *); |
| 440 | 440 | ||
| 441 | /* gpio recovery */ | 441 | /* gpio recovery */ |
| 442 | int scl_gpio; | 442 | int scl_gpio; |
| @@ -449,6 +449,48 @@ int i2c_recover_bus(struct i2c_adapter *adap); | |||
| 449 | int i2c_generic_gpio_recovery(struct i2c_adapter *adap); | 449 | int i2c_generic_gpio_recovery(struct i2c_adapter *adap); |
| 450 | int i2c_generic_scl_recovery(struct i2c_adapter *adap); | 450 | int i2c_generic_scl_recovery(struct i2c_adapter *adap); |
| 451 | 451 | ||
| 452 | /** | ||
| 453 | * struct i2c_adapter_quirks - describe flaws of an i2c adapter | ||
| 454 | * @flags: see I2C_AQ_* for possible flags and read below | ||
| 455 | * @max_num_msgs: maximum number of messages per transfer | ||
| 456 | * @max_write_len: maximum length of a write message | ||
| 457 | * @max_read_len: maximum length of a read message | ||
| 458 | * @max_comb_1st_msg_len: maximum length of the first msg in a combined message | ||
| 459 | * @max_comb_2nd_msg_len: maximum length of the second msg in a combined message | ||
| 460 | * | ||
| 461 | * Note about combined messages: Some I2C controllers can only send one message | ||
| 462 | * per transfer, plus something called combined message or write-then-read. | ||
| 463 | * This is (usually) a small write message followed by a read message and | ||
| 464 | * barely enough to access register based devices like EEPROMs. There is a flag | ||
| 465 | * to support this mode. It implies max_num_msg = 2 and does the length checks | ||
| 466 | * with max_comb_*_len because combined message mode usually has its own | ||
| 467 | * limitations. Because of HW implementations, some controllers can actually do | ||
| 468 | * write-then-anything or other variants. To support that, write-then-read has | ||
| 469 | * been broken out into smaller bits like write-first and read-second which can | ||
| 470 | * be combined as needed. | ||
| 471 | */ | ||
| 472 | |||
| 473 | struct i2c_adapter_quirks { | ||
| 474 | u64 flags; | ||
| 475 | int max_num_msgs; | ||
| 476 | u16 max_write_len; | ||
| 477 | u16 max_read_len; | ||
| 478 | u16 max_comb_1st_msg_len; | ||
| 479 | u16 max_comb_2nd_msg_len; | ||
| 480 | }; | ||
| 481 | |||
| 482 | /* enforce max_num_msgs = 2 and use max_comb_*_len for length checks */ | ||
| 483 | #define I2C_AQ_COMB BIT(0) | ||
| 484 | /* first combined message must be write */ | ||
| 485 | #define I2C_AQ_COMB_WRITE_FIRST BIT(1) | ||
| 486 | /* second combined message must be read */ | ||
| 487 | #define I2C_AQ_COMB_READ_SECOND BIT(2) | ||
| 488 | /* both combined messages must have the same target address */ | ||
| 489 | #define I2C_AQ_COMB_SAME_ADDR BIT(3) | ||
| 490 | /* convenience macro for typical write-then read case */ | ||
| 491 | #define I2C_AQ_COMB_WRITE_THEN_READ (I2C_AQ_COMB | I2C_AQ_COMB_WRITE_FIRST | \ | ||
| 492 | I2C_AQ_COMB_READ_SECOND | I2C_AQ_COMB_SAME_ADDR) | ||
| 493 | |||
| 452 | /* | 494 | /* |
| 453 | * i2c_adapter is the structure used to identify a physical i2c bus along | 495 | * i2c_adapter is the structure used to identify a physical i2c bus along |
| 454 | * with the access algorithms necessary to access it. | 496 | * with the access algorithms necessary to access it. |
| @@ -474,6 +516,7 @@ struct i2c_adapter { | |||
| 474 | struct list_head userspace_clients; | 516 | struct list_head userspace_clients; |
| 475 | 517 | ||
| 476 | struct i2c_bus_recovery_info *bus_recovery_info; | 518 | struct i2c_bus_recovery_info *bus_recovery_info; |
| 519 | const struct i2c_adapter_quirks *quirks; | ||
| 477 | }; | 520 | }; |
| 478 | #define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev) | 521 | #define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev) |
| 479 | 522 | ||
diff --git a/include/linux/iio/buffer.h b/include/linux/iio/buffer.h index b65850a41127..eb8622b78ec9 100644 --- a/include/linux/iio/buffer.h +++ b/include/linux/iio/buffer.h | |||
| @@ -21,8 +21,8 @@ struct iio_buffer; | |||
| 21 | * struct iio_buffer_access_funcs - access functions for buffers. | 21 | * struct iio_buffer_access_funcs - access functions for buffers. |
| 22 | * @store_to: actually store stuff to the buffer | 22 | * @store_to: actually store stuff to the buffer |
| 23 | * @read_first_n: try to get a specified number of bytes (must exist) | 23 | * @read_first_n: try to get a specified number of bytes (must exist) |
| 24 | * @data_available: indicates whether data for reading from the buffer is | 24 | * @data_available: indicates how much data is available for reading from |
| 25 | * available. | 25 | * the buffer. |
| 26 | * @request_update: if a parameter change has been marked, update underlying | 26 | * @request_update: if a parameter change has been marked, update underlying |
| 27 | * storage. | 27 | * storage. |
| 28 | * @set_bytes_per_datum:set number of bytes per datum | 28 | * @set_bytes_per_datum:set number of bytes per datum |
| @@ -43,7 +43,7 @@ struct iio_buffer_access_funcs { | |||
| 43 | int (*read_first_n)(struct iio_buffer *buffer, | 43 | int (*read_first_n)(struct iio_buffer *buffer, |
| 44 | size_t n, | 44 | size_t n, |
| 45 | char __user *buf); | 45 | char __user *buf); |
| 46 | bool (*data_available)(struct iio_buffer *buffer); | 46 | size_t (*data_available)(struct iio_buffer *buffer); |
| 47 | 47 | ||
| 48 | int (*request_update)(struct iio_buffer *buffer); | 48 | int (*request_update)(struct iio_buffer *buffer); |
| 49 | 49 | ||
| @@ -72,6 +72,7 @@ struct iio_buffer_access_funcs { | |||
| 72 | * @demux_bounce: [INTERN] buffer for doing gather from incoming scan. | 72 | * @demux_bounce: [INTERN] buffer for doing gather from incoming scan. |
| 73 | * @buffer_list: [INTERN] entry in the devices list of current buffers. | 73 | * @buffer_list: [INTERN] entry in the devices list of current buffers. |
| 74 | * @ref: [INTERN] reference count of the buffer. | 74 | * @ref: [INTERN] reference count of the buffer. |
| 75 | * @watermark: [INTERN] number of datums to wait for poll/read. | ||
| 75 | */ | 76 | */ |
| 76 | struct iio_buffer { | 77 | struct iio_buffer { |
| 77 | int length; | 78 | int length; |
| @@ -90,6 +91,7 @@ struct iio_buffer { | |||
| 90 | void *demux_bounce; | 91 | void *demux_bounce; |
| 91 | struct list_head buffer_list; | 92 | struct list_head buffer_list; |
| 92 | struct kref ref; | 93 | struct kref ref; |
| 94 | unsigned int watermark; | ||
| 93 | }; | 95 | }; |
| 94 | 96 | ||
| 95 | /** | 97 | /** |
diff --git a/include/linux/iio/dac/max517.h b/include/linux/iio/dac/max517.h index f6d1d252f08d..7668716cd73c 100644 --- a/include/linux/iio/dac/max517.h +++ b/include/linux/iio/dac/max517.h | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | #define IIO_DAC_MAX517_H_ | 9 | #define IIO_DAC_MAX517_H_ |
| 10 | 10 | ||
| 11 | struct max517_platform_data { | 11 | struct max517_platform_data { |
| 12 | u16 vref_mv[2]; | 12 | u16 vref_mv[8]; |
| 13 | }; | 13 | }; |
| 14 | 14 | ||
| 15 | #endif /* IIO_DAC_MAX517_H_ */ | 15 | #endif /* IIO_DAC_MAX517_H_ */ |
diff --git a/include/linux/iio/events.h b/include/linux/iio/events.h index 03fa332ad2a8..8ad87d1c5340 100644 --- a/include/linux/iio/events.h +++ b/include/linux/iio/events.h | |||
| @@ -9,22 +9,8 @@ | |||
| 9 | #ifndef _IIO_EVENTS_H_ | 9 | #ifndef _IIO_EVENTS_H_ |
| 10 | #define _IIO_EVENTS_H_ | 10 | #define _IIO_EVENTS_H_ |
| 11 | 11 | ||
| 12 | #include <linux/ioctl.h> | ||
| 13 | #include <linux/types.h> | ||
| 14 | #include <linux/iio/types.h> | 12 | #include <linux/iio/types.h> |
| 15 | 13 | #include <uapi/linux/iio/events.h> | |
| 16 | /** | ||
| 17 | * struct iio_event_data - The actual event being pushed to userspace | ||
| 18 | * @id: event identifier | ||
| 19 | * @timestamp: best estimate of time of event occurrence (often from | ||
| 20 | * the interrupt handler) | ||
| 21 | */ | ||
| 22 | struct iio_event_data { | ||
| 23 | __u64 id; | ||
| 24 | __s64 timestamp; | ||
| 25 | }; | ||
| 26 | |||
| 27 | #define IIO_GET_EVENT_FD_IOCTL _IOR('i', 0x90, int) | ||
| 28 | 14 | ||
| 29 | /** | 15 | /** |
| 30 | * IIO_EVENT_CODE() - create event identifier | 16 | * IIO_EVENT_CODE() - create event identifier |
| @@ -70,18 +56,4 @@ struct iio_event_data { | |||
| 70 | #define IIO_UNMOD_EVENT_CODE(chan_type, number, type, direction) \ | 56 | #define IIO_UNMOD_EVENT_CODE(chan_type, number, type, direction) \ |
| 71 | IIO_EVENT_CODE(chan_type, 0, 0, direction, type, number, 0, 0) | 57 | IIO_EVENT_CODE(chan_type, 0, 0, direction, type, number, 0, 0) |
| 72 | 58 | ||
| 73 | #define IIO_EVENT_CODE_EXTRACT_TYPE(mask) ((mask >> 56) & 0xFF) | ||
| 74 | |||
| 75 | #define IIO_EVENT_CODE_EXTRACT_DIR(mask) ((mask >> 48) & 0x7F) | ||
| 76 | |||
| 77 | #define IIO_EVENT_CODE_EXTRACT_CHAN_TYPE(mask) ((mask >> 32) & 0xFF) | ||
| 78 | |||
| 79 | /* Event code number extraction depends on which type of event we have. | ||
| 80 | * Perhaps review this function in the future*/ | ||
| 81 | #define IIO_EVENT_CODE_EXTRACT_CHAN(mask) ((__s16)(mask & 0xFFFF)) | ||
| 82 | #define IIO_EVENT_CODE_EXTRACT_CHAN2(mask) ((__s16)(((mask) >> 16) & 0xFFFF)) | ||
| 83 | |||
| 84 | #define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF) | ||
| 85 | #define IIO_EVENT_CODE_EXTRACT_DIFF(mask) (((mask) >> 55) & 0x1) | ||
| 86 | |||
| 87 | #endif | 59 | #endif |
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index 80d855061064..d86b753e9b30 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h | |||
| @@ -338,6 +338,16 @@ struct iio_dev; | |||
| 338 | * provide a custom of_xlate function that reads the | 338 | * provide a custom of_xlate function that reads the |
| 339 | * *args* and returns the appropriate index in registered | 339 | * *args* and returns the appropriate index in registered |
| 340 | * IIO channels array. | 340 | * IIO channels array. |
| 341 | * @hwfifo_set_watermark: function pointer to set the current hardware | ||
| 342 | * fifo watermark level; see hwfifo_* entries in | ||
| 343 | * Documentation/ABI/testing/sysfs-bus-iio for details on | ||
| 344 | * how the hardware fifo operates | ||
| 345 | * @hwfifo_flush_to_buffer: function pointer to flush the samples stored | ||
| 346 | * in the hardware fifo to the device buffer. The driver | ||
| 347 | * should not flush more than count samples. The function | ||
| 348 | * must return the number of samples flushed, 0 if no | ||
| 349 | * samples were flushed or a negative integer if no samples | ||
| 350 | * were flushed and there was an error. | ||
| 341 | **/ | 351 | **/ |
| 342 | struct iio_info { | 352 | struct iio_info { |
| 343 | struct module *driver_module; | 353 | struct module *driver_module; |
| @@ -399,6 +409,9 @@ struct iio_info { | |||
| 399 | unsigned *readval); | 409 | unsigned *readval); |
| 400 | int (*of_xlate)(struct iio_dev *indio_dev, | 410 | int (*of_xlate)(struct iio_dev *indio_dev, |
| 401 | const struct of_phandle_args *iiospec); | 411 | const struct of_phandle_args *iiospec); |
| 412 | int (*hwfifo_set_watermark)(struct iio_dev *indio_dev, unsigned val); | ||
| 413 | int (*hwfifo_flush_to_buffer)(struct iio_dev *indio_dev, | ||
| 414 | unsigned count); | ||
| 402 | }; | 415 | }; |
| 403 | 416 | ||
| 404 | /** | 417 | /** |
diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h index 580ed5bdb3fa..942b6de68e2f 100644 --- a/include/linux/iio/types.h +++ b/include/linux/iio/types.h | |||
| @@ -10,76 +10,7 @@ | |||
| 10 | #ifndef _IIO_TYPES_H_ | 10 | #ifndef _IIO_TYPES_H_ |
| 11 | #define _IIO_TYPES_H_ | 11 | #define _IIO_TYPES_H_ |
| 12 | 12 | ||
| 13 | enum iio_chan_type { | 13 | #include <uapi/linux/iio/types.h> |
| 14 | IIO_VOLTAGE, | ||
| 15 | IIO_CURRENT, | ||
| 16 | IIO_POWER, | ||
| 17 | IIO_ACCEL, | ||
| 18 | IIO_ANGL_VEL, | ||
| 19 | IIO_MAGN, | ||
| 20 | IIO_LIGHT, | ||
| 21 | IIO_INTENSITY, | ||
| 22 | IIO_PROXIMITY, | ||
| 23 | IIO_TEMP, | ||
| 24 | IIO_INCLI, | ||
| 25 | IIO_ROT, | ||
| 26 | IIO_ANGL, | ||
| 27 | IIO_TIMESTAMP, | ||
| 28 | IIO_CAPACITANCE, | ||
| 29 | IIO_ALTVOLTAGE, | ||
| 30 | IIO_CCT, | ||
| 31 | IIO_PRESSURE, | ||
| 32 | IIO_HUMIDITYRELATIVE, | ||
| 33 | IIO_ACTIVITY, | ||
| 34 | IIO_STEPS, | ||
| 35 | IIO_ENERGY, | ||
| 36 | IIO_DISTANCE, | ||
| 37 | IIO_VELOCITY, | ||
| 38 | }; | ||
| 39 | |||
| 40 | enum iio_modifier { | ||
| 41 | IIO_NO_MOD, | ||
| 42 | IIO_MOD_X, | ||
| 43 | IIO_MOD_Y, | ||
| 44 | IIO_MOD_Z, | ||
| 45 | IIO_MOD_X_AND_Y, | ||
| 46 | IIO_MOD_X_AND_Z, | ||
| 47 | IIO_MOD_Y_AND_Z, | ||
| 48 | IIO_MOD_X_AND_Y_AND_Z, | ||
| 49 | IIO_MOD_X_OR_Y, | ||
| 50 | IIO_MOD_X_OR_Z, | ||
| 51 | IIO_MOD_Y_OR_Z, | ||
| 52 | IIO_MOD_X_OR_Y_OR_Z, | ||
| 53 | IIO_MOD_LIGHT_BOTH, | ||
| 54 | IIO_MOD_LIGHT_IR, | ||
| 55 | IIO_MOD_ROOT_SUM_SQUARED_X_Y, | ||
| 56 | IIO_MOD_SUM_SQUARED_X_Y_Z, | ||
| 57 | IIO_MOD_LIGHT_CLEAR, | ||
| 58 | IIO_MOD_LIGHT_RED, | ||
| 59 | IIO_MOD_LIGHT_GREEN, | ||
| 60 | IIO_MOD_LIGHT_BLUE, | ||
| 61 | IIO_MOD_QUATERNION, | ||
| 62 | IIO_MOD_TEMP_AMBIENT, | ||
| 63 | IIO_MOD_TEMP_OBJECT, | ||
| 64 | IIO_MOD_NORTH_MAGN, | ||
| 65 | IIO_MOD_NORTH_TRUE, | ||
| 66 | IIO_MOD_NORTH_MAGN_TILT_COMP, | ||
| 67 | IIO_MOD_NORTH_TRUE_TILT_COMP, | ||
| 68 | IIO_MOD_RUNNING, | ||
| 69 | IIO_MOD_JOGGING, | ||
| 70 | IIO_MOD_WALKING, | ||
| 71 | IIO_MOD_STILL, | ||
| 72 | IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z, | ||
| 73 | }; | ||
| 74 | |||
| 75 | enum iio_event_type { | ||
| 76 | IIO_EV_TYPE_THRESH, | ||
| 77 | IIO_EV_TYPE_MAG, | ||
| 78 | IIO_EV_TYPE_ROC, | ||
| 79 | IIO_EV_TYPE_THRESH_ADAPTIVE, | ||
| 80 | IIO_EV_TYPE_MAG_ADAPTIVE, | ||
| 81 | IIO_EV_TYPE_CHANGE, | ||
| 82 | }; | ||
| 83 | 14 | ||
| 84 | enum iio_event_info { | 15 | enum iio_event_info { |
| 85 | IIO_EV_INFO_ENABLE, | 16 | IIO_EV_INFO_ENABLE, |
| @@ -88,13 +19,6 @@ enum iio_event_info { | |||
| 88 | IIO_EV_INFO_PERIOD, | 19 | IIO_EV_INFO_PERIOD, |
| 89 | }; | 20 | }; |
| 90 | 21 | ||
| 91 | enum iio_event_direction { | ||
| 92 | IIO_EV_DIR_EITHER, | ||
| 93 | IIO_EV_DIR_RISING, | ||
| 94 | IIO_EV_DIR_FALLING, | ||
| 95 | IIO_EV_DIR_NONE, | ||
| 96 | }; | ||
| 97 | |||
| 98 | #define IIO_VAL_INT 1 | 22 | #define IIO_VAL_INT 1 |
| 99 | #define IIO_VAL_INT_PLUS_MICRO 2 | 23 | #define IIO_VAL_INT_PLUS_MICRO 2 |
| 100 | #define IIO_VAL_INT_PLUS_NANO 3 | 24 | #define IIO_VAL_INT_PLUS_NANO 3 |
diff --git a/include/linux/init.h b/include/linux/init.h index 2df8e8dd10a4..21b6d768edd7 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
| @@ -253,21 +253,41 @@ struct obs_kernel_param { | |||
| 253 | * obs_kernel_param "array" too far apart in .init.setup. | 253 | * obs_kernel_param "array" too far apart in .init.setup. |
| 254 | */ | 254 | */ |
| 255 | #define __setup_param(str, unique_id, fn, early) \ | 255 | #define __setup_param(str, unique_id, fn, early) \ |
| 256 | static const char __setup_str_##unique_id[] __initconst \ | 256 | static const char __setup_str_##unique_id[] __initconst \ |
| 257 | __aligned(1) = str; \ | 257 | __aligned(1) = str; \ |
| 258 | static struct obs_kernel_param __setup_##unique_id \ | 258 | static struct obs_kernel_param __setup_##unique_id \ |
| 259 | __used __section(.init.setup) \ | 259 | __used __section(.init.setup) \ |
| 260 | __attribute__((aligned((sizeof(long))))) \ | 260 | __attribute__((aligned((sizeof(long))))) \ |
| 261 | = { __setup_str_##unique_id, fn, early } | 261 | = { __setup_str_##unique_id, fn, early } |
| 262 | 262 | ||
| 263 | #define __setup(str, fn) \ | 263 | #define __setup(str, fn) \ |
| 264 | __setup_param(str, fn, fn, 0) | 264 | __setup_param(str, fn, fn, 0) |
| 265 | 265 | ||
| 266 | /* NOTE: fn is as per module_param, not __setup! Emits warning if fn | 266 | /* |
| 267 | * returns non-zero. */ | 267 | * NOTE: fn is as per module_param, not __setup! |
| 268 | #define early_param(str, fn) \ | 268 | * Emits warning if fn returns non-zero. |
| 269 | */ | ||
| 270 | #define early_param(str, fn) \ | ||
| 269 | __setup_param(str, fn, fn, 1) | 271 | __setup_param(str, fn, fn, 1) |
| 270 | 272 | ||
| 273 | #define early_param_on_off(str_on, str_off, var, config) \ | ||
| 274 | \ | ||
| 275 | int var = IS_ENABLED(config); \ | ||
| 276 | \ | ||
| 277 | static int __init parse_##var##_on(char *arg) \ | ||
| 278 | { \ | ||
| 279 | var = 1; \ | ||
| 280 | return 0; \ | ||
| 281 | } \ | ||
| 282 | __setup_param(str_on, parse_##var##_on, parse_##var##_on, 1); \ | ||
| 283 | \ | ||
| 284 | static int __init parse_##var##_off(char *arg) \ | ||
| 285 | { \ | ||
| 286 | var = 0; \ | ||
| 287 | return 0; \ | ||
| 288 | } \ | ||
| 289 | __setup_param(str_off, parse_##var##_off, parse_##var##_off, 1) | ||
| 290 | |||
| 271 | /* Relies on boot_command_line being set */ | 291 | /* Relies on boot_command_line being set */ |
| 272 | void __init parse_early_param(void); | 292 | void __init parse_early_param(void); |
| 273 | void __init parse_early_options(char *cmdline); | 293 | void __init parse_early_options(char *cmdline); |
diff --git a/include/linux/intel_mid_dma.h b/include/linux/intel_mid_dma.h deleted file mode 100644 index 10496bd24c5c..000000000000 --- a/include/linux/intel_mid_dma.h +++ /dev/null | |||
| @@ -1,76 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * intel_mid_dma.h - Intel MID DMA Drivers | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008-10 Intel Corp | ||
| 5 | * Author: Vinod Koul <vinod.koul@intel.com> | ||
| 6 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; version 2 of the License. | ||
| 11 | * | ||
| 12 | * This program is distributed in the hope that it will be useful, but | ||
| 13 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 15 | * General Public License for more details. | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License along | ||
| 18 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
| 19 | * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. | ||
| 20 | * | ||
| 21 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| 22 | * | ||
| 23 | * | ||
| 24 | */ | ||
| 25 | #ifndef __INTEL_MID_DMA_H__ | ||
| 26 | #define __INTEL_MID_DMA_H__ | ||
| 27 | |||
| 28 | #include <linux/dmaengine.h> | ||
| 29 | |||
| 30 | #define DMA_PREP_CIRCULAR_LIST (1 << 10) | ||
| 31 | |||
| 32 | /*DMA mode configurations*/ | ||
| 33 | enum intel_mid_dma_mode { | ||
| 34 | LNW_DMA_PER_TO_MEM = 0, /*periphral to memory configuration*/ | ||
| 35 | LNW_DMA_MEM_TO_PER, /*memory to periphral configuration*/ | ||
| 36 | LNW_DMA_MEM_TO_MEM, /*mem to mem confg (testing only)*/ | ||
| 37 | }; | ||
| 38 | |||
| 39 | /*DMA handshaking*/ | ||
| 40 | enum intel_mid_dma_hs_mode { | ||
| 41 | LNW_DMA_HW_HS = 0, /*HW Handshaking only*/ | ||
| 42 | LNW_DMA_SW_HS = 1, /*SW Handshaking not recommended*/ | ||
| 43 | }; | ||
| 44 | |||
| 45 | /*Burst size configuration*/ | ||
| 46 | enum intel_mid_dma_msize { | ||
| 47 | LNW_DMA_MSIZE_1 = 0x0, | ||
| 48 | LNW_DMA_MSIZE_4 = 0x1, | ||
| 49 | LNW_DMA_MSIZE_8 = 0x2, | ||
| 50 | LNW_DMA_MSIZE_16 = 0x3, | ||
| 51 | LNW_DMA_MSIZE_32 = 0x4, | ||
| 52 | LNW_DMA_MSIZE_64 = 0x5, | ||
| 53 | }; | ||
| 54 | |||
| 55 | /** | ||
| 56 | * struct intel_mid_dma_slave - DMA slave structure | ||
| 57 | * | ||
| 58 | * @dirn: DMA trf direction | ||
| 59 | * @src_width: tx register width | ||
| 60 | * @dst_width: rx register width | ||
| 61 | * @hs_mode: HW/SW handshaking mode | ||
| 62 | * @cfg_mode: DMA data transfer mode (per-per/mem-per/mem-mem) | ||
| 63 | * @src_msize: Source DMA burst size | ||
| 64 | * @dst_msize: Dst DMA burst size | ||
| 65 | * @per_addr: Periphral address | ||
| 66 | * @device_instance: DMA peripheral device instance, we can have multiple | ||
| 67 | * peripheral device connected to single DMAC | ||
| 68 | */ | ||
| 69 | struct intel_mid_dma_slave { | ||
| 70 | enum intel_mid_dma_hs_mode hs_mode; /*handshaking*/ | ||
| 71 | enum intel_mid_dma_mode cfg_mode; /*mode configuration*/ | ||
| 72 | unsigned int device_instance; /*0, 1 for periphral instance*/ | ||
| 73 | struct dma_slave_config dma_slave; | ||
| 74 | }; | ||
| 75 | |||
| 76 | #endif /*__INTEL_MID_DMA_H__*/ | ||
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 2e88580194f0..950ae4501826 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -39,8 +39,6 @@ | |||
| 39 | * These flags used only by the kernel as part of the | 39 | * These flags used only by the kernel as part of the |
| 40 | * irq handling routines. | 40 | * irq handling routines. |
| 41 | * | 41 | * |
| 42 | * IRQF_DISABLED - keep irqs disabled when calling the action handler. | ||
| 43 | * DEPRECATED. This flag is a NOOP and scheduled to be removed | ||
| 44 | * IRQF_SHARED - allow sharing the irq among several devices | 42 | * IRQF_SHARED - allow sharing the irq among several devices |
| 45 | * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur | 43 | * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur |
| 46 | * IRQF_TIMER - Flag to mark this interrupt as timer interrupt | 44 | * IRQF_TIMER - Flag to mark this interrupt as timer interrupt |
| @@ -64,7 +62,6 @@ | |||
| 64 | * wakeup devices users need to implement wakeup detection in | 62 | * wakeup devices users need to implement wakeup detection in |
| 65 | * their interrupt handlers. | 63 | * their interrupt handlers. |
| 66 | */ | 64 | */ |
| 67 | #define IRQF_DISABLED 0x00000020 | ||
| 68 | #define IRQF_SHARED 0x00000080 | 65 | #define IRQF_SHARED 0x00000080 |
| 69 | #define IRQF_PROBE_SHARED 0x00000100 | 66 | #define IRQF_PROBE_SHARED 0x00000100 |
| 70 | #define __IRQF_TIMER 0x00000200 | 67 | #define __IRQF_TIMER 0x00000200 |
| @@ -191,6 +188,7 @@ extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id); | |||
| 191 | #endif | 188 | #endif |
| 192 | 189 | ||
| 193 | extern void disable_irq_nosync(unsigned int irq); | 190 | extern void disable_irq_nosync(unsigned int irq); |
| 191 | extern bool disable_hardirq(unsigned int irq); | ||
| 194 | extern void disable_irq(unsigned int irq); | 192 | extern void disable_irq(unsigned int irq); |
| 195 | extern void disable_percpu_irq(unsigned int irq); | 193 | extern void disable_percpu_irq(unsigned int irq); |
| 196 | extern void enable_irq(unsigned int irq); | 194 | extern void enable_irq(unsigned int irq); |
| @@ -363,6 +361,20 @@ static inline int disable_irq_wake(unsigned int irq) | |||
| 363 | return irq_set_irq_wake(irq, 0); | 361 | return irq_set_irq_wake(irq, 0); |
| 364 | } | 362 | } |
| 365 | 363 | ||
| 364 | /* | ||
| 365 | * irq_get_irqchip_state/irq_set_irqchip_state specific flags | ||
| 366 | */ | ||
| 367 | enum irqchip_irq_state { | ||
| 368 | IRQCHIP_STATE_PENDING, /* Is interrupt pending? */ | ||
| 369 | IRQCHIP_STATE_ACTIVE, /* Is interrupt in progress? */ | ||
| 370 | IRQCHIP_STATE_MASKED, /* Is interrupt masked? */ | ||
| 371 | IRQCHIP_STATE_LINE_LEVEL, /* Is IRQ line high? */ | ||
| 372 | }; | ||
| 373 | |||
| 374 | extern int irq_get_irqchip_state(unsigned int irq, enum irqchip_irq_state which, | ||
| 375 | bool *state); | ||
| 376 | extern int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which, | ||
| 377 | bool state); | ||
| 366 | 378 | ||
| 367 | #ifdef CONFIG_IRQ_FORCED_THREADING | 379 | #ifdef CONFIG_IRQ_FORCED_THREADING |
| 368 | extern bool force_irqthreads; | 380 | extern bool force_irqthreads; |
diff --git a/include/linux/io.h b/include/linux/io.h index fa02e55e5a2e..4cc299c598e0 100644 --- a/include/linux/io.h +++ b/include/linux/io.h | |||
| @@ -38,6 +38,14 @@ static inline int ioremap_page_range(unsigned long addr, unsigned long end, | |||
| 38 | } | 38 | } |
| 39 | #endif | 39 | #endif |
| 40 | 40 | ||
| 41 | #ifdef CONFIG_HAVE_ARCH_HUGE_VMAP | ||
| 42 | void __init ioremap_huge_init(void); | ||
| 43 | int arch_ioremap_pud_supported(void); | ||
| 44 | int arch_ioremap_pmd_supported(void); | ||
| 45 | #else | ||
| 46 | static inline void ioremap_huge_init(void) { } | ||
| 47 | #endif | ||
| 48 | |||
| 41 | /* | 49 | /* |
| 42 | * Managed iomap interface | 50 | * Managed iomap interface |
| 43 | */ | 51 | */ |
diff --git a/include/linux/irq.h b/include/linux/irq.h index d09ec7a1243e..62c6901cab55 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | struct seq_file; | 30 | struct seq_file; |
| 31 | struct module; | 31 | struct module; |
| 32 | struct msi_msg; | 32 | struct msi_msg; |
| 33 | enum irqchip_irq_state; | ||
| 33 | 34 | ||
| 34 | /* | 35 | /* |
| 35 | * IRQ line status. | 36 | * IRQ line status. |
| @@ -324,6 +325,8 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) | |||
| 324 | * irq_request_resources | 325 | * irq_request_resources |
| 325 | * @irq_compose_msi_msg: optional to compose message content for MSI | 326 | * @irq_compose_msi_msg: optional to compose message content for MSI |
| 326 | * @irq_write_msi_msg: optional to write message content for MSI | 327 | * @irq_write_msi_msg: optional to write message content for MSI |
| 328 | * @irq_get_irqchip_state: return the internal state of an interrupt | ||
| 329 | * @irq_set_irqchip_state: set the internal state of a interrupt | ||
| 327 | * @flags: chip specific flags | 330 | * @flags: chip specific flags |
| 328 | */ | 331 | */ |
| 329 | struct irq_chip { | 332 | struct irq_chip { |
| @@ -363,6 +366,9 @@ struct irq_chip { | |||
| 363 | void (*irq_compose_msi_msg)(struct irq_data *data, struct msi_msg *msg); | 366 | void (*irq_compose_msi_msg)(struct irq_data *data, struct msi_msg *msg); |
| 364 | void (*irq_write_msi_msg)(struct irq_data *data, struct msi_msg *msg); | 367 | void (*irq_write_msi_msg)(struct irq_data *data, struct msi_msg *msg); |
| 365 | 368 | ||
| 369 | int (*irq_get_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool *state); | ||
| 370 | int (*irq_set_irqchip_state)(struct irq_data *data, enum irqchip_irq_state which, bool state); | ||
| 371 | |||
| 366 | unsigned long flags; | 372 | unsigned long flags; |
| 367 | }; | 373 | }; |
| 368 | 374 | ||
| @@ -460,6 +466,7 @@ extern void irq_chip_eoi_parent(struct irq_data *data); | |||
| 460 | extern int irq_chip_set_affinity_parent(struct irq_data *data, | 466 | extern int irq_chip_set_affinity_parent(struct irq_data *data, |
| 461 | const struct cpumask *dest, | 467 | const struct cpumask *dest, |
| 462 | bool force); | 468 | bool force); |
| 469 | extern int irq_chip_set_wake_parent(struct irq_data *data, unsigned int on); | ||
| 463 | #endif | 470 | #endif |
| 464 | 471 | ||
| 465 | /* Handling of unhandled and spurious interrupts: */ | 472 | /* Handling of unhandled and spurious interrupts: */ |
diff --git a/include/linux/irq_work.h b/include/linux/irq_work.h index bf3fe719c7ce..47b9ebd4a74f 100644 --- a/include/linux/irq_work.h +++ b/include/linux/irq_work.h | |||
| @@ -38,16 +38,17 @@ bool irq_work_queue(struct irq_work *work); | |||
| 38 | bool irq_work_queue_on(struct irq_work *work, int cpu); | 38 | bool irq_work_queue_on(struct irq_work *work, int cpu); |
| 39 | #endif | 39 | #endif |
| 40 | 40 | ||
| 41 | void irq_work_run(void); | ||
| 42 | void irq_work_tick(void); | 41 | void irq_work_tick(void); |
| 43 | void irq_work_sync(struct irq_work *work); | 42 | void irq_work_sync(struct irq_work *work); |
| 44 | 43 | ||
| 45 | #ifdef CONFIG_IRQ_WORK | 44 | #ifdef CONFIG_IRQ_WORK |
| 46 | #include <asm/irq_work.h> | 45 | #include <asm/irq_work.h> |
| 47 | 46 | ||
| 47 | void irq_work_run(void); | ||
| 48 | bool irq_work_needs_cpu(void); | 48 | bool irq_work_needs_cpu(void); |
| 49 | #else | 49 | #else |
| 50 | static inline bool irq_work_needs_cpu(void) { return false; } | 50 | static inline bool irq_work_needs_cpu(void) { return false; } |
| 51 | static inline void irq_work_run(void) { } | ||
| 51 | #endif | 52 | #endif |
| 52 | 53 | ||
| 53 | #endif /* _LINUX_IRQ_WORK_H */ | 54 | #endif /* _LINUX_IRQ_WORK_H */ |
diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h index 71d706d5f169..36ec4ae74634 100644 --- a/include/linux/irqchip/arm-gic.h +++ b/include/linux/irqchip/arm-gic.h | |||
| @@ -97,6 +97,7 @@ struct device_node; | |||
| 97 | 97 | ||
| 98 | extern struct irq_chip gic_arch_extn; | 98 | extern struct irq_chip gic_arch_extn; |
| 99 | 99 | ||
| 100 | void gic_set_irqchip_flags(unsigned long flags); | ||
| 100 | void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, | 101 | void gic_init_bases(unsigned int, int, void __iomem *, void __iomem *, |
| 101 | u32 offset, struct device_node *); | 102 | u32 offset, struct device_node *); |
| 102 | void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); | 103 | void gic_cascade_irq(unsigned int gic_nr, unsigned int irq); |
| @@ -115,11 +116,5 @@ int gic_get_cpu_id(unsigned int cpu); | |||
| 115 | void gic_migrate_target(unsigned int new_cpu_id); | 116 | void gic_migrate_target(unsigned int new_cpu_id); |
| 116 | unsigned long gic_get_sgir_physaddr(void); | 117 | unsigned long gic_get_sgir_physaddr(void); |
| 117 | 118 | ||
| 118 | extern const struct irq_domain_ops *gic_routable_irq_domain_ops; | ||
| 119 | static inline void __init register_routable_domain_ops | ||
| 120 | (const struct irq_domain_ops *ops) | ||
| 121 | { | ||
| 122 | gic_routable_irq_domain_ops = ops; | ||
| 123 | } | ||
| 124 | #endif /* __ASSEMBLY */ | 119 | #endif /* __ASSEMBLY */ |
| 125 | #endif | 120 | #endif |
diff --git a/include/linux/irqchip/irq-crossbar.h b/include/linux/irqchip/irq-crossbar.h deleted file mode 100644 index e5537b81df8d..000000000000 --- a/include/linux/irqchip/irq-crossbar.h +++ /dev/null | |||
| @@ -1,11 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * drivers/irqchip/irq-crossbar.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | */ | ||
| 11 | int irqcrossbar_init(void); | ||
diff --git a/include/linux/irqchip/mips-gic.h b/include/linux/irqchip/mips-gic.h index e6a6aac451db..3ea2e4754c40 100644 --- a/include/linux/irqchip/mips-gic.h +++ b/include/linux/irqchip/mips-gic.h | |||
| @@ -240,6 +240,8 @@ extern unsigned int gic_get_count_width(void); | |||
| 240 | extern cycle_t gic_read_compare(void); | 240 | extern cycle_t gic_read_compare(void); |
| 241 | extern void gic_write_compare(cycle_t cnt); | 241 | extern void gic_write_compare(cycle_t cnt); |
| 242 | extern void gic_write_cpu_compare(cycle_t cnt, int cpu); | 242 | extern void gic_write_cpu_compare(cycle_t cnt, int cpu); |
| 243 | extern void gic_start_count(void); | ||
| 244 | extern void gic_stop_count(void); | ||
| 243 | extern void gic_send_ipi(unsigned int intr); | 245 | extern void gic_send_ipi(unsigned int intr); |
| 244 | extern unsigned int plat_ipi_call_int_xlate(unsigned int); | 246 | extern unsigned int plat_ipi_call_int_xlate(unsigned int); |
| 245 | extern unsigned int plat_ipi_resched_int_xlate(unsigned int); | 247 | extern unsigned int plat_ipi_resched_int_xlate(unsigned int); |
diff --git a/include/linux/irqflags.h b/include/linux/irqflags.h index d176d658fe25..5dd1272d1ab2 100644 --- a/include/linux/irqflags.h +++ b/include/linux/irqflags.h | |||
| @@ -85,7 +85,7 @@ | |||
| 85 | * The local_irq_*() APIs are equal to the raw_local_irq*() | 85 | * The local_irq_*() APIs are equal to the raw_local_irq*() |
| 86 | * if !TRACE_IRQFLAGS. | 86 | * if !TRACE_IRQFLAGS. |
| 87 | */ | 87 | */ |
| 88 | #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT | 88 | #ifdef CONFIG_TRACE_IRQFLAGS |
| 89 | #define local_irq_enable() \ | 89 | #define local_irq_enable() \ |
| 90 | do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0) | 90 | do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0) |
| 91 | #define local_irq_disable() \ | 91 | #define local_irq_disable() \ |
| @@ -107,22 +107,6 @@ | |||
| 107 | raw_local_irq_restore(flags); \ | 107 | raw_local_irq_restore(flags); \ |
| 108 | } \ | 108 | } \ |
| 109 | } while (0) | 109 | } while (0) |
| 110 | #define local_save_flags(flags) \ | ||
| 111 | do { \ | ||
| 112 | raw_local_save_flags(flags); \ | ||
| 113 | } while (0) | ||
| 114 | |||
| 115 | #define irqs_disabled_flags(flags) \ | ||
| 116 | ({ \ | ||
| 117 | raw_irqs_disabled_flags(flags); \ | ||
| 118 | }) | ||
| 119 | |||
| 120 | #define irqs_disabled() \ | ||
| 121 | ({ \ | ||
| 122 | unsigned long _flags; \ | ||
| 123 | raw_local_save_flags(_flags); \ | ||
| 124 | raw_irqs_disabled_flags(_flags); \ | ||
| 125 | }) | ||
| 126 | 110 | ||
| 127 | #define safe_halt() \ | 111 | #define safe_halt() \ |
| 128 | do { \ | 112 | do { \ |
| @@ -131,7 +115,7 @@ | |||
| 131 | } while (0) | 115 | } while (0) |
| 132 | 116 | ||
| 133 | 117 | ||
| 134 | #else /* !CONFIG_TRACE_IRQFLAGS_SUPPORT */ | 118 | #else /* !CONFIG_TRACE_IRQFLAGS */ |
| 135 | 119 | ||
| 136 | #define local_irq_enable() do { raw_local_irq_enable(); } while (0) | 120 | #define local_irq_enable() do { raw_local_irq_enable(); } while (0) |
| 137 | #define local_irq_disable() do { raw_local_irq_disable(); } while (0) | 121 | #define local_irq_disable() do { raw_local_irq_disable(); } while (0) |
| @@ -140,11 +124,28 @@ | |||
| 140 | raw_local_irq_save(flags); \ | 124 | raw_local_irq_save(flags); \ |
| 141 | } while (0) | 125 | } while (0) |
| 142 | #define local_irq_restore(flags) do { raw_local_irq_restore(flags); } while (0) | 126 | #define local_irq_restore(flags) do { raw_local_irq_restore(flags); } while (0) |
| 143 | #define local_save_flags(flags) do { raw_local_save_flags(flags); } while (0) | ||
| 144 | #define irqs_disabled() (raw_irqs_disabled()) | ||
| 145 | #define irqs_disabled_flags(flags) (raw_irqs_disabled_flags(flags)) | ||
| 146 | #define safe_halt() do { raw_safe_halt(); } while (0) | 127 | #define safe_halt() do { raw_safe_halt(); } while (0) |
| 147 | 128 | ||
| 129 | #endif /* CONFIG_TRACE_IRQFLAGS */ | ||
| 130 | |||
| 131 | #define local_save_flags(flags) raw_local_save_flags(flags) | ||
| 132 | |||
| 133 | /* | ||
| 134 | * Some architectures don't define arch_irqs_disabled(), so even if either | ||
| 135 | * definition would be fine we need to use different ones for the time being | ||
| 136 | * to avoid build issues. | ||
| 137 | */ | ||
| 138 | #ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT | ||
| 139 | #define irqs_disabled() \ | ||
| 140 | ({ \ | ||
| 141 | unsigned long _flags; \ | ||
| 142 | raw_local_save_flags(_flags); \ | ||
| 143 | raw_irqs_disabled_flags(_flags); \ | ||
| 144 | }) | ||
| 145 | #else /* !CONFIG_TRACE_IRQFLAGS_SUPPORT */ | ||
| 146 | #define irqs_disabled() raw_irqs_disabled() | ||
| 148 | #endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */ | 147 | #endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */ |
| 149 | 148 | ||
| 149 | #define irqs_disabled_flags(flags) raw_irqs_disabled_flags(flags) | ||
| 150 | |||
| 150 | #endif | 151 | #endif |
diff --git a/include/linux/jump_label.h b/include/linux/jump_label.h index 98f923b6a0ea..f4de473f226b 100644 --- a/include/linux/jump_label.h +++ b/include/linux/jump_label.h | |||
| @@ -45,6 +45,12 @@ | |||
| 45 | * same as using STATIC_KEY_INIT_FALSE. | 45 | * same as using STATIC_KEY_INIT_FALSE. |
| 46 | */ | 46 | */ |
| 47 | 47 | ||
| 48 | #if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL) | ||
| 49 | # define HAVE_JUMP_LABEL | ||
| 50 | #endif | ||
| 51 | |||
| 52 | #ifndef __ASSEMBLY__ | ||
| 53 | |||
| 48 | #include <linux/types.h> | 54 | #include <linux/types.h> |
| 49 | #include <linux/compiler.h> | 55 | #include <linux/compiler.h> |
| 50 | #include <linux/bug.h> | 56 | #include <linux/bug.h> |
| @@ -55,7 +61,7 @@ extern bool static_key_initialized; | |||
| 55 | "%s used before call to jump_label_init", \ | 61 | "%s used before call to jump_label_init", \ |
| 56 | __func__) | 62 | __func__) |
| 57 | 63 | ||
| 58 | #if defined(CC_HAVE_ASM_GOTO) && defined(CONFIG_JUMP_LABEL) | 64 | #ifdef HAVE_JUMP_LABEL |
| 59 | 65 | ||
| 60 | struct static_key { | 66 | struct static_key { |
| 61 | atomic_t enabled; | 67 | atomic_t enabled; |
| @@ -66,13 +72,18 @@ struct static_key { | |||
| 66 | #endif | 72 | #endif |
| 67 | }; | 73 | }; |
| 68 | 74 | ||
| 69 | # include <asm/jump_label.h> | ||
| 70 | # define HAVE_JUMP_LABEL | ||
| 71 | #else | 75 | #else |
| 72 | struct static_key { | 76 | struct static_key { |
| 73 | atomic_t enabled; | 77 | atomic_t enabled; |
| 74 | }; | 78 | }; |
| 75 | #endif /* CC_HAVE_ASM_GOTO && CONFIG_JUMP_LABEL */ | 79 | #endif /* HAVE_JUMP_LABEL */ |
| 80 | #endif /* __ASSEMBLY__ */ | ||
| 81 | |||
| 82 | #ifdef HAVE_JUMP_LABEL | ||
| 83 | #include <asm/jump_label.h> | ||
| 84 | #endif | ||
| 85 | |||
| 86 | #ifndef __ASSEMBLY__ | ||
| 76 | 87 | ||
| 77 | enum jump_label_type { | 88 | enum jump_label_type { |
| 78 | JUMP_LABEL_DISABLE = 0, | 89 | JUMP_LABEL_DISABLE = 0, |
| @@ -203,3 +214,5 @@ static inline bool static_key_enabled(struct static_key *key) | |||
| 203 | } | 214 | } |
| 204 | 215 | ||
| 205 | #endif /* _LINUX_JUMP_LABEL_H */ | 216 | #endif /* _LINUX_JUMP_LABEL_H */ |
| 217 | |||
| 218 | #endif /* __ASSEMBLY__ */ | ||
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index d12b2104d19b..ad45054309a0 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -165,12 +165,12 @@ enum kvm_bus { | |||
| 165 | KVM_NR_BUSES | 165 | KVM_NR_BUSES |
| 166 | }; | 166 | }; |
| 167 | 167 | ||
| 168 | int kvm_io_bus_write(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, | 168 | int kvm_io_bus_write(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx, gpa_t addr, |
| 169 | int len, const void *val); | 169 | int len, const void *val); |
| 170 | int kvm_io_bus_write_cookie(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, | 170 | int kvm_io_bus_write_cookie(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx, |
| 171 | int len, const void *val, long cookie); | 171 | gpa_t addr, int len, const void *val, long cookie); |
| 172 | int kvm_io_bus_read(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, int len, | 172 | int kvm_io_bus_read(struct kvm_vcpu *vcpu, enum kvm_bus bus_idx, gpa_t addr, |
| 173 | void *val); | 173 | int len, void *val); |
| 174 | int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, | 174 | int kvm_io_bus_register_dev(struct kvm *kvm, enum kvm_bus bus_idx, gpa_t addr, |
| 175 | int len, struct kvm_io_device *dev); | 175 | int len, struct kvm_io_device *dev); |
| 176 | int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx, | 176 | int kvm_io_bus_unregister_dev(struct kvm *kvm, enum kvm_bus bus_idx, |
| @@ -658,7 +658,6 @@ int kvm_arch_vcpu_runnable(struct kvm_vcpu *vcpu); | |||
| 658 | int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu); | 658 | int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu); |
| 659 | 659 | ||
| 660 | void *kvm_kvzalloc(unsigned long size); | 660 | void *kvm_kvzalloc(unsigned long size); |
| 661 | void kvm_kvfree(const void *addr); | ||
| 662 | 661 | ||
| 663 | #ifndef __KVM_HAVE_ARCH_VM_ALLOC | 662 | #ifndef __KVM_HAVE_ARCH_VM_ALLOC |
| 664 | static inline struct kvm *kvm_arch_alloc_vm(void) | 663 | static inline struct kvm *kvm_arch_alloc_vm(void) |
| @@ -700,6 +699,20 @@ static inline wait_queue_head_t *kvm_arch_vcpu_wq(struct kvm_vcpu *vcpu) | |||
| 700 | #endif | 699 | #endif |
| 701 | } | 700 | } |
| 702 | 701 | ||
| 702 | #ifdef __KVM_HAVE_ARCH_INTC_INITIALIZED | ||
| 703 | /* | ||
| 704 | * returns true if the virtual interrupt controller is initialized and | ||
| 705 | * ready to accept virtual IRQ. On some architectures the virtual interrupt | ||
| 706 | * controller is dynamically instantiated and this is not always true. | ||
| 707 | */ | ||
| 708 | bool kvm_arch_intc_initialized(struct kvm *kvm); | ||
| 709 | #else | ||
| 710 | static inline bool kvm_arch_intc_initialized(struct kvm *kvm) | ||
| 711 | { | ||
| 712 | return true; | ||
| 713 | } | ||
| 714 | #endif | ||
| 715 | |||
| 703 | int kvm_arch_init_vm(struct kvm *kvm, unsigned long type); | 716 | int kvm_arch_init_vm(struct kvm *kvm, unsigned long type); |
| 704 | void kvm_arch_destroy_vm(struct kvm *kvm); | 717 | void kvm_arch_destroy_vm(struct kvm *kvm); |
| 705 | void kvm_arch_sync_events(struct kvm *kvm); | 718 | void kvm_arch_sync_events(struct kvm *kvm); |
| @@ -766,7 +779,8 @@ static inline void kvm_guest_enter(void) | |||
| 766 | * one time slice). Lets treat guest mode as quiescent state, just like | 779 | * one time slice). Lets treat guest mode as quiescent state, just like |
| 767 | * we do with user-mode execution. | 780 | * we do with user-mode execution. |
| 768 | */ | 781 | */ |
| 769 | rcu_virt_note_context_switch(smp_processor_id()); | 782 | if (!context_tracking_cpu_is_enabled()) |
| 783 | rcu_virt_note_context_switch(smp_processor_id()); | ||
| 770 | } | 784 | } |
| 771 | 785 | ||
| 772 | static inline void kvm_guest_exit(void) | 786 | static inline void kvm_guest_exit(void) |
| @@ -969,11 +983,16 @@ static inline int kvm_ioeventfd(struct kvm *kvm, struct kvm_ioeventfd *args) | |||
| 969 | #endif /* CONFIG_HAVE_KVM_EVENTFD */ | 983 | #endif /* CONFIG_HAVE_KVM_EVENTFD */ |
| 970 | 984 | ||
| 971 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE | 985 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE |
| 972 | static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu) | 986 | static inline bool kvm_vcpu_is_reset_bsp(struct kvm_vcpu *vcpu) |
| 973 | { | 987 | { |
| 974 | return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; | 988 | return vcpu->kvm->bsp_vcpu_id == vcpu->vcpu_id; |
| 975 | } | 989 | } |
| 976 | 990 | ||
| 991 | static inline bool kvm_vcpu_is_bsp(struct kvm_vcpu *vcpu) | ||
| 992 | { | ||
| 993 | return (vcpu->arch.apic_base & MSR_IA32_APICBASE_BSP) != 0; | ||
| 994 | } | ||
| 995 | |||
| 977 | bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu); | 996 | bool kvm_vcpu_compatible(struct kvm_vcpu *vcpu); |
| 978 | 997 | ||
| 979 | #else | 998 | #else |
diff --git a/include/linux/libata.h b/include/linux/libata.h index 6b08cc106c21..8dad4a307bb8 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -231,8 +231,7 @@ enum { | |||
| 231 | ATA_FLAG_SW_ACTIVITY = (1 << 22), /* driver supports sw activity | 231 | ATA_FLAG_SW_ACTIVITY = (1 << 22), /* driver supports sw activity |
| 232 | * led */ | 232 | * led */ |
| 233 | ATA_FLAG_NO_DIPM = (1 << 23), /* host not happy with DIPM */ | 233 | ATA_FLAG_NO_DIPM = (1 << 23), /* host not happy with DIPM */ |
| 234 | ATA_FLAG_LOWTAG = (1 << 24), /* host wants lowest available tag */ | 234 | ATA_FLAG_SAS_HOST = (1 << 24), /* SAS host */ |
| 235 | ATA_FLAG_SAS_HOST = (1 << 25), /* SAS host */ | ||
| 236 | 235 | ||
| 237 | /* bits 24:31 of ap->flags are reserved for LLD specific flags */ | 236 | /* bits 24:31 of ap->flags are reserved for LLD specific flags */ |
| 238 | 237 | ||
diff --git a/include/linux/livepatch.h b/include/linux/livepatch.h index 95023fd8b00d..ee6dbb39a809 100644 --- a/include/linux/livepatch.h +++ b/include/linux/livepatch.h | |||
| @@ -123,10 +123,10 @@ struct klp_patch { | |||
| 123 | enum klp_state state; | 123 | enum klp_state state; |
| 124 | }; | 124 | }; |
| 125 | 125 | ||
| 126 | extern int klp_register_patch(struct klp_patch *); | 126 | int klp_register_patch(struct klp_patch *); |
| 127 | extern int klp_unregister_patch(struct klp_patch *); | 127 | int klp_unregister_patch(struct klp_patch *); |
| 128 | extern int klp_enable_patch(struct klp_patch *); | 128 | int klp_enable_patch(struct klp_patch *); |
| 129 | extern int klp_disable_patch(struct klp_patch *); | 129 | int klp_disable_patch(struct klp_patch *); |
| 130 | 130 | ||
| 131 | #endif /* CONFIG_LIVEPATCH */ | 131 | #endif /* CONFIG_LIVEPATCH */ |
| 132 | 132 | ||
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index 74ab23176e9b..066ba4157541 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
| @@ -531,8 +531,13 @@ do { \ | |||
| 531 | # define might_lock_read(lock) do { } while (0) | 531 | # define might_lock_read(lock) do { } while (0) |
| 532 | #endif | 532 | #endif |
| 533 | 533 | ||
| 534 | #ifdef CONFIG_PROVE_RCU | 534 | #ifdef CONFIG_LOCKDEP |
| 535 | void lockdep_rcu_suspicious(const char *file, const int line, const char *s); | 535 | void lockdep_rcu_suspicious(const char *file, const int line, const char *s); |
| 536 | #else | ||
| 537 | static inline void | ||
| 538 | lockdep_rcu_suspicious(const char *file, const int line, const char *s) | ||
| 539 | { | ||
| 540 | } | ||
| 536 | #endif | 541 | #endif |
| 537 | 542 | ||
| 538 | #endif /* __LINUX_LOCKDEP_H */ | 543 | #endif /* __LINUX_LOCKDEP_H */ |
diff --git a/include/linux/memblock.h b/include/linux/memblock.h index e8cc45307f8f..9497ec7c77ea 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h | |||
| @@ -365,6 +365,14 @@ static inline unsigned long memblock_region_reserved_end_pfn(const struct memblo | |||
| 365 | #define __initdata_memblock | 365 | #define __initdata_memblock |
| 366 | #endif | 366 | #endif |
| 367 | 367 | ||
| 368 | #ifdef CONFIG_MEMTEST | ||
| 369 | extern void early_memtest(phys_addr_t start, phys_addr_t end); | ||
| 370 | #else | ||
| 371 | static inline void early_memtest(phys_addr_t start, phys_addr_t end) | ||
| 372 | { | ||
| 373 | } | ||
| 374 | #endif | ||
| 375 | |||
| 368 | #else | 376 | #else |
| 369 | static inline phys_addr_t memblock_alloc(phys_addr_t size, phys_addr_t align) | 377 | static inline phys_addr_t memblock_alloc(phys_addr_t size, phys_addr_t align) |
| 370 | { | 378 | { |
diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 8f1a41951df9..6ffa0ac7f7d6 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h | |||
| @@ -192,6 +192,9 @@ extern void get_page_bootmem(unsigned long ingo, struct page *page, | |||
| 192 | void get_online_mems(void); | 192 | void get_online_mems(void); |
| 193 | void put_online_mems(void); | 193 | void put_online_mems(void); |
| 194 | 194 | ||
| 195 | void mem_hotplug_begin(void); | ||
| 196 | void mem_hotplug_done(void); | ||
| 197 | |||
| 195 | #else /* ! CONFIG_MEMORY_HOTPLUG */ | 198 | #else /* ! CONFIG_MEMORY_HOTPLUG */ |
| 196 | /* | 199 | /* |
| 197 | * Stub functions for when hotplug is off | 200 | * Stub functions for when hotplug is off |
| @@ -231,6 +234,9 @@ static inline int try_online_node(int nid) | |||
| 231 | static inline void get_online_mems(void) {} | 234 | static inline void get_online_mems(void) {} |
| 232 | static inline void put_online_mems(void) {} | 235 | static inline void put_online_mems(void) {} |
| 233 | 236 | ||
| 237 | static inline void mem_hotplug_begin(void) {} | ||
| 238 | static inline void mem_hotplug_done(void) {} | ||
| 239 | |||
| 234 | #endif /* ! CONFIG_MEMORY_HOTPLUG */ | 240 | #endif /* ! CONFIG_MEMORY_HOTPLUG */ |
| 235 | 241 | ||
| 236 | #ifdef CONFIG_MEMORY_HOTREMOVE | 242 | #ifdef CONFIG_MEMORY_HOTREMOVE |
diff --git a/include/linux/mempool.h b/include/linux/mempool.h index 39ed62ab5b8a..b19b3023c880 100644 --- a/include/linux/mempool.h +++ b/include/linux/mempool.h | |||
| @@ -29,7 +29,7 @@ extern mempool_t *mempool_create_node(int min_nr, mempool_alloc_t *alloc_fn, | |||
| 29 | mempool_free_t *free_fn, void *pool_data, | 29 | mempool_free_t *free_fn, void *pool_data, |
| 30 | gfp_t gfp_mask, int nid); | 30 | gfp_t gfp_mask, int nid); |
| 31 | 31 | ||
| 32 | extern int mempool_resize(mempool_t *pool, int new_min_nr, gfp_t gfp_mask); | 32 | extern int mempool_resize(mempool_t *pool, int new_min_nr); |
| 33 | extern void mempool_destroy(mempool_t *pool); | 33 | extern void mempool_destroy(mempool_t *pool); |
| 34 | extern void * mempool_alloc(mempool_t *pool, gfp_t gfp_mask); | 34 | extern void * mempool_alloc(mempool_t *pool, gfp_t gfp_mask); |
| 35 | extern void mempool_free(void *element, mempool_t *pool); | 35 | extern void mempool_free(void *element, mempool_t *pool); |
diff --git a/include/linux/mfd/abx500/ux500_chargalg.h b/include/linux/mfd/abx500/ux500_chargalg.h index 234c99143bf7..67703f23e7ba 100644 --- a/include/linux/mfd/abx500/ux500_chargalg.h +++ b/include/linux/mfd/abx500/ux500_chargalg.h | |||
| @@ -9,8 +9,13 @@ | |||
| 9 | 9 | ||
| 10 | #include <linux/power_supply.h> | 10 | #include <linux/power_supply.h> |
| 11 | 11 | ||
| 12 | #define psy_to_ux500_charger(x) container_of((x), \ | 12 | /* |
| 13 | struct ux500_charger, psy) | 13 | * Valid only for supplies of type: |
| 14 | * - POWER_SUPPLY_TYPE_MAINS, | ||
| 15 | * - POWER_SUPPLY_TYPE_USB, | ||
| 16 | * because only them store as drv_data pointer to struct ux500_charger. | ||
| 17 | */ | ||
| 18 | #define psy_to_ux500_charger(x) power_supply_get_drvdata(psy) | ||
| 14 | 19 | ||
| 15 | /* Forward declaration */ | 20 | /* Forward declaration */ |
| 16 | struct ux500_charger; | 21 | struct ux500_charger; |
| @@ -35,7 +40,7 @@ struct ux500_charger_ops { | |||
| 35 | * @power_path USB power path support | 40 | * @power_path USB power path support |
| 36 | */ | 41 | */ |
| 37 | struct ux500_charger { | 42 | struct ux500_charger { |
| 38 | struct power_supply psy; | 43 | struct power_supply *psy; |
| 39 | struct ux500_charger_ops ops; | 44 | struct ux500_charger_ops ops; |
| 40 | int max_out_volt; | 45 | int max_out_volt; |
| 41 | int max_out_curr; | 46 | int max_out_curr; |
diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h index 910e3aa1e965..f97010576f56 100644 --- a/include/linux/mfd/arizona/core.h +++ b/include/linux/mfd/arizona/core.h | |||
| @@ -24,6 +24,7 @@ enum arizona_type { | |||
| 24 | WM5102 = 1, | 24 | WM5102 = 1, |
| 25 | WM5110 = 2, | 25 | WM5110 = 2, |
| 26 | WM8997 = 3, | 26 | WM8997 = 3, |
| 27 | WM8280 = 4, | ||
| 27 | }; | 28 | }; |
| 28 | 29 | ||
| 29 | #define ARIZONA_IRQ_GP1 0 | 30 | #define ARIZONA_IRQ_GP1 0 |
diff --git a/include/linux/mfd/arizona/gpio.h b/include/linux/mfd/arizona/gpio.h deleted file mode 100644 index d2146bb74f89..000000000000 --- a/include/linux/mfd/arizona/gpio.h +++ /dev/null | |||
| @@ -1,96 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * GPIO configuration for Arizona devices | ||
| 3 | * | ||
| 4 | * Copyright 2013 Wolfson Microelectronics. PLC. | ||
| 5 | * | ||
| 6 | * Author: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #ifndef _ARIZONA_GPIO_H | ||
| 14 | #define _ARIZONA_GPIO_H | ||
| 15 | |||
| 16 | #define ARIZONA_GP_FN_TXLRCLK 0x00 | ||
| 17 | #define ARIZONA_GP_FN_GPIO 0x01 | ||
| 18 | #define ARIZONA_GP_FN_IRQ1 0x02 | ||
| 19 | #define ARIZONA_GP_FN_IRQ2 0x03 | ||
| 20 | #define ARIZONA_GP_FN_OPCLK 0x04 | ||
| 21 | #define ARIZONA_GP_FN_FLL1_OUT 0x05 | ||
| 22 | #define ARIZONA_GP_FN_FLL2_OUT 0x06 | ||
| 23 | #define ARIZONA_GP_FN_PWM1 0x08 | ||
| 24 | #define ARIZONA_GP_FN_PWM2 0x09 | ||
| 25 | #define ARIZONA_GP_FN_SYSCLK_UNDERCLOCKED 0x0A | ||
| 26 | #define ARIZONA_GP_FN_ASYNCCLK_UNDERCLOCKED 0x0B | ||
| 27 | #define ARIZONA_GP_FN_FLL1_LOCK 0x0C | ||
| 28 | #define ARIZONA_GP_FN_FLL2_LOCK 0x0D | ||
| 29 | #define ARIZONA_GP_FN_FLL1_CLOCK_OK 0x0F | ||
| 30 | #define ARIZONA_GP_FN_FLL2_CLOCK_OK 0x10 | ||
| 31 | #define ARIZONA_GP_FN_HEADPHONE_DET 0x12 | ||
| 32 | #define ARIZONA_GP_FN_MIC_DET 0x13 | ||
| 33 | #define ARIZONA_GP_FN_WSEQ_STATUS 0x15 | ||
| 34 | #define ARIZONA_GP_FN_CIF_ADDRESS_ERROR 0x16 | ||
| 35 | #define ARIZONA_GP_FN_ASRC1_LOCK 0x1A | ||
| 36 | #define ARIZONA_GP_FN_ASRC2_LOCK 0x1B | ||
| 37 | #define ARIZONA_GP_FN_ASRC_CONFIG_ERROR 0x1C | ||
| 38 | #define ARIZONA_GP_FN_DRC1_SIGNAL_DETECT 0x1D | ||
| 39 | #define ARIZONA_GP_FN_DRC1_ANTICLIP 0x1E | ||
| 40 | #define ARIZONA_GP_FN_DRC1_DECAY 0x1F | ||
| 41 | #define ARIZONA_GP_FN_DRC1_NOISE 0x20 | ||
| 42 | #define ARIZONA_GP_FN_DRC1_QUICK_RELEASE 0x21 | ||
| 43 | #define ARIZONA_GP_FN_DRC2_SIGNAL_DETECT 0x22 | ||
| 44 | #define ARIZONA_GP_FN_DRC2_ANTICLIP 0x23 | ||
| 45 | #define ARIZONA_GP_FN_DRC2_DECAY 0x24 | ||
| 46 | #define ARIZONA_GP_FN_DRC2_NOISE 0x25 | ||
| 47 | #define ARIZONA_GP_FN_DRC2_QUICK_RELEASE 0x26 | ||
| 48 | #define ARIZONA_GP_FN_MIXER_DROPPED_SAMPLE 0x27 | ||
| 49 | #define ARIZONA_GP_FN_AIF1_CONFIG_ERROR 0x28 | ||
| 50 | #define ARIZONA_GP_FN_AIF2_CONFIG_ERROR 0x29 | ||
| 51 | #define ARIZONA_GP_FN_AIF3_CONFIG_ERROR 0x2A | ||
| 52 | #define ARIZONA_GP_FN_SPK_TEMP_SHUTDOWN 0x2B | ||
| 53 | #define ARIZONA_GP_FN_SPK_TEMP_WARNING 0x2C | ||
| 54 | #define ARIZONA_GP_FN_UNDERCLOCKED 0x2D | ||
| 55 | #define ARIZONA_GP_FN_OVERCLOCKED 0x2E | ||
| 56 | #define ARIZONA_GP_FN_DSP_IRQ1 0x35 | ||
| 57 | #define ARIZONA_GP_FN_DSP_IRQ2 0x36 | ||
| 58 | #define ARIZONA_GP_FN_ASYNC_OPCLK 0x3D | ||
| 59 | #define ARIZONA_GP_FN_BOOT_DONE 0x44 | ||
| 60 | #define ARIZONA_GP_FN_DSP1_RAM_READY 0x45 | ||
| 61 | #define ARIZONA_GP_FN_SYSCLK_ENA_STATUS 0x4B | ||
| 62 | #define ARIZONA_GP_FN_ASYNCCLK_ENA_STATUS 0x4C | ||
| 63 | |||
| 64 | #define ARIZONA_GPN_DIR 0x8000 /* GPN_DIR */ | ||
| 65 | #define ARIZONA_GPN_DIR_MASK 0x8000 /* GPN_DIR */ | ||
| 66 | #define ARIZONA_GPN_DIR_SHIFT 15 /* GPN_DIR */ | ||
| 67 | #define ARIZONA_GPN_DIR_WIDTH 1 /* GPN_DIR */ | ||
| 68 | #define ARIZONA_GPN_PU 0x4000 /* GPN_PU */ | ||
| 69 | #define ARIZONA_GPN_PU_MASK 0x4000 /* GPN_PU */ | ||
| 70 | #define ARIZONA_GPN_PU_SHIFT 14 /* GPN_PU */ | ||
| 71 | #define ARIZONA_GPN_PU_WIDTH 1 /* GPN_PU */ | ||
| 72 | #define ARIZONA_GPN_PD 0x2000 /* GPN_PD */ | ||
| 73 | #define ARIZONA_GPN_PD_MASK 0x2000 /* GPN_PD */ | ||
| 74 | #define ARIZONA_GPN_PD_SHIFT 13 /* GPN_PD */ | ||
| 75 | #define ARIZONA_GPN_PD_WIDTH 1 /* GPN_PD */ | ||
| 76 | #define ARIZONA_GPN_LVL 0x0800 /* GPN_LVL */ | ||
| 77 | #define ARIZONA_GPN_LVL_MASK 0x0800 /* GPN_LVL */ | ||
| 78 | #define ARIZONA_GPN_LVL_SHIFT 11 /* GPN_LVL */ | ||
| 79 | #define ARIZONA_GPN_LVL_WIDTH 1 /* GPN_LVL */ | ||
| 80 | #define ARIZONA_GPN_POL 0x0400 /* GPN_POL */ | ||
| 81 | #define ARIZONA_GPN_POL_MASK 0x0400 /* GPN_POL */ | ||
| 82 | #define ARIZONA_GPN_POL_SHIFT 10 /* GPN_POL */ | ||
| 83 | #define ARIZONA_GPN_POL_WIDTH 1 /* GPN_POL */ | ||
| 84 | #define ARIZONA_GPN_OP_CFG 0x0200 /* GPN_OP_CFG */ | ||
| 85 | #define ARIZONA_GPN_OP_CFG_MASK 0x0200 /* GPN_OP_CFG */ | ||
| 86 | #define ARIZONA_GPN_OP_CFG_SHIFT 9 /* GPN_OP_CFG */ | ||
| 87 | #define ARIZONA_GPN_OP_CFG_WIDTH 1 /* GPN_OP_CFG */ | ||
| 88 | #define ARIZONA_GPN_DB 0x0100 /* GPN_DB */ | ||
| 89 | #define ARIZONA_GPN_DB_MASK 0x0100 /* GPN_DB */ | ||
| 90 | #define ARIZONA_GPN_DB_SHIFT 8 /* GPN_DB */ | ||
| 91 | #define ARIZONA_GPN_DB_WIDTH 1 /* GPN_DB */ | ||
| 92 | #define ARIZONA_GPN_FN_MASK 0x007F /* GPN_DB */ | ||
| 93 | #define ARIZONA_GPN_FN_SHIFT 0 /* GPN_DB */ | ||
| 94 | #define ARIZONA_GPN_FN_WIDTH 7 /* GPN_DB */ | ||
| 95 | |||
| 96 | #endif | ||
diff --git a/include/linux/mfd/arizona/pdata.h b/include/linux/mfd/arizona/pdata.h index 4578c72c9b86..1789cb0f4f17 100644 --- a/include/linux/mfd/arizona/pdata.h +++ b/include/linux/mfd/arizona/pdata.h | |||
| @@ -11,31 +11,26 @@ | |||
| 11 | #ifndef _ARIZONA_PDATA_H | 11 | #ifndef _ARIZONA_PDATA_H |
| 12 | #define _ARIZONA_PDATA_H | 12 | #define _ARIZONA_PDATA_H |
| 13 | 13 | ||
| 14 | #define ARIZONA_GPN_DIR 0x8000 /* GPN_DIR */ | 14 | #include <dt-bindings/mfd/arizona.h> |
| 15 | |||
| 15 | #define ARIZONA_GPN_DIR_MASK 0x8000 /* GPN_DIR */ | 16 | #define ARIZONA_GPN_DIR_MASK 0x8000 /* GPN_DIR */ |
| 16 | #define ARIZONA_GPN_DIR_SHIFT 15 /* GPN_DIR */ | 17 | #define ARIZONA_GPN_DIR_SHIFT 15 /* GPN_DIR */ |
| 17 | #define ARIZONA_GPN_DIR_WIDTH 1 /* GPN_DIR */ | 18 | #define ARIZONA_GPN_DIR_WIDTH 1 /* GPN_DIR */ |
| 18 | #define ARIZONA_GPN_PU 0x4000 /* GPN_PU */ | ||
| 19 | #define ARIZONA_GPN_PU_MASK 0x4000 /* GPN_PU */ | 19 | #define ARIZONA_GPN_PU_MASK 0x4000 /* GPN_PU */ |
| 20 | #define ARIZONA_GPN_PU_SHIFT 14 /* GPN_PU */ | 20 | #define ARIZONA_GPN_PU_SHIFT 14 /* GPN_PU */ |
| 21 | #define ARIZONA_GPN_PU_WIDTH 1 /* GPN_PU */ | 21 | #define ARIZONA_GPN_PU_WIDTH 1 /* GPN_PU */ |
| 22 | #define ARIZONA_GPN_PD 0x2000 /* GPN_PD */ | ||
| 23 | #define ARIZONA_GPN_PD_MASK 0x2000 /* GPN_PD */ | 22 | #define ARIZONA_GPN_PD_MASK 0x2000 /* GPN_PD */ |
| 24 | #define ARIZONA_GPN_PD_SHIFT 13 /* GPN_PD */ | 23 | #define ARIZONA_GPN_PD_SHIFT 13 /* GPN_PD */ |
| 25 | #define ARIZONA_GPN_PD_WIDTH 1 /* GPN_PD */ | 24 | #define ARIZONA_GPN_PD_WIDTH 1 /* GPN_PD */ |
| 26 | #define ARIZONA_GPN_LVL 0x0800 /* GPN_LVL */ | ||
| 27 | #define ARIZONA_GPN_LVL_MASK 0x0800 /* GPN_LVL */ | 25 | #define ARIZONA_GPN_LVL_MASK 0x0800 /* GPN_LVL */ |
| 28 | #define ARIZONA_GPN_LVL_SHIFT 11 /* GPN_LVL */ | 26 | #define ARIZONA_GPN_LVL_SHIFT 11 /* GPN_LVL */ |
| 29 | #define ARIZONA_GPN_LVL_WIDTH 1 /* GPN_LVL */ | 27 | #define ARIZONA_GPN_LVL_WIDTH 1 /* GPN_LVL */ |
| 30 | #define ARIZONA_GPN_POL 0x0400 /* GPN_POL */ | ||
| 31 | #define ARIZONA_GPN_POL_MASK 0x0400 /* GPN_POL */ | 28 | #define ARIZONA_GPN_POL_MASK 0x0400 /* GPN_POL */ |
| 32 | #define ARIZONA_GPN_POL_SHIFT 10 /* GPN_POL */ | 29 | #define ARIZONA_GPN_POL_SHIFT 10 /* GPN_POL */ |
| 33 | #define ARIZONA_GPN_POL_WIDTH 1 /* GPN_POL */ | 30 | #define ARIZONA_GPN_POL_WIDTH 1 /* GPN_POL */ |
| 34 | #define ARIZONA_GPN_OP_CFG 0x0200 /* GPN_OP_CFG */ | ||
| 35 | #define ARIZONA_GPN_OP_CFG_MASK 0x0200 /* GPN_OP_CFG */ | 31 | #define ARIZONA_GPN_OP_CFG_MASK 0x0200 /* GPN_OP_CFG */ |
| 36 | #define ARIZONA_GPN_OP_CFG_SHIFT 9 /* GPN_OP_CFG */ | 32 | #define ARIZONA_GPN_OP_CFG_SHIFT 9 /* GPN_OP_CFG */ |
| 37 | #define ARIZONA_GPN_OP_CFG_WIDTH 1 /* GPN_OP_CFG */ | 33 | #define ARIZONA_GPN_OP_CFG_WIDTH 1 /* GPN_OP_CFG */ |
| 38 | #define ARIZONA_GPN_DB 0x0100 /* GPN_DB */ | ||
| 39 | #define ARIZONA_GPN_DB_MASK 0x0100 /* GPN_DB */ | 34 | #define ARIZONA_GPN_DB_MASK 0x0100 /* GPN_DB */ |
| 40 | #define ARIZONA_GPN_DB_SHIFT 8 /* GPN_DB */ | 35 | #define ARIZONA_GPN_DB_SHIFT 8 /* GPN_DB */ |
| 41 | #define ARIZONA_GPN_DB_WIDTH 1 /* GPN_DB */ | 36 | #define ARIZONA_GPN_DB_WIDTH 1 /* GPN_DB */ |
| @@ -45,23 +40,10 @@ | |||
| 45 | 40 | ||
| 46 | #define ARIZONA_MAX_GPIO 5 | 41 | #define ARIZONA_MAX_GPIO 5 |
| 47 | 42 | ||
| 48 | #define ARIZONA_32KZ_MCLK1 1 | ||
| 49 | #define ARIZONA_32KZ_MCLK2 2 | ||
| 50 | #define ARIZONA_32KZ_NONE 3 | ||
| 51 | |||
| 52 | #define ARIZONA_MAX_INPUT 4 | 43 | #define ARIZONA_MAX_INPUT 4 |
| 53 | 44 | ||
| 54 | #define ARIZONA_DMIC_MICVDD 0 | ||
| 55 | #define ARIZONA_DMIC_MICBIAS1 1 | ||
| 56 | #define ARIZONA_DMIC_MICBIAS2 2 | ||
| 57 | #define ARIZONA_DMIC_MICBIAS3 3 | ||
| 58 | |||
| 59 | #define ARIZONA_MAX_MICBIAS 3 | 45 | #define ARIZONA_MAX_MICBIAS 3 |
| 60 | 46 | ||
| 61 | #define ARIZONA_INMODE_DIFF 0 | ||
| 62 | #define ARIZONA_INMODE_SE 1 | ||
| 63 | #define ARIZONA_INMODE_DMIC 2 | ||
| 64 | |||
| 65 | #define ARIZONA_MAX_OUTPUT 6 | 47 | #define ARIZONA_MAX_OUTPUT 6 |
| 66 | 48 | ||
| 67 | #define ARIZONA_MAX_AIF 3 | 49 | #define ARIZONA_MAX_AIF 3 |
| @@ -112,7 +94,7 @@ struct arizona_pdata { | |||
| 112 | int gpio_base; | 94 | int gpio_base; |
| 113 | 95 | ||
| 114 | /** Pin state for GPIO pins */ | 96 | /** Pin state for GPIO pins */ |
| 115 | int gpio_defaults[ARIZONA_MAX_GPIO]; | 97 | unsigned int gpio_defaults[ARIZONA_MAX_GPIO]; |
| 116 | 98 | ||
| 117 | /** | 99 | /** |
| 118 | * Maximum number of channels clocks will be generated for, | 100 | * Maximum number of channels clocks will be generated for, |
diff --git a/include/linux/mfd/max77693-private.h b/include/linux/mfd/max77693-private.h index 955dd990beaf..51633ea6f910 100644 --- a/include/linux/mfd/max77693-private.h +++ b/include/linux/mfd/max77693-private.h | |||
| @@ -87,6 +87,7 @@ enum max77693_pmic_reg { | |||
| 87 | /* MAX77693 ITORCH register */ | 87 | /* MAX77693 ITORCH register */ |
| 88 | #define TORCH_IOUT1_SHIFT 0 | 88 | #define TORCH_IOUT1_SHIFT 0 |
| 89 | #define TORCH_IOUT2_SHIFT 4 | 89 | #define TORCH_IOUT2_SHIFT 4 |
| 90 | #define TORCH_IOUT_MASK(x) (0xf << (x)) | ||
| 90 | #define TORCH_IOUT_MIN 15625 | 91 | #define TORCH_IOUT_MIN 15625 |
| 91 | #define TORCH_IOUT_MAX 250000 | 92 | #define TORCH_IOUT_MAX 250000 |
| 92 | #define TORCH_IOUT_STEP 15625 | 93 | #define TORCH_IOUT_STEP 15625 |
| @@ -113,8 +114,8 @@ enum max77693_pmic_reg { | |||
| 113 | #define FLASH_EN_FLASH 0x1 | 114 | #define FLASH_EN_FLASH 0x1 |
| 114 | #define FLASH_EN_TORCH 0x2 | 115 | #define FLASH_EN_TORCH 0x2 |
| 115 | #define FLASH_EN_ON 0x3 | 116 | #define FLASH_EN_ON 0x3 |
| 116 | #define FLASH_EN_SHIFT(x) (6 - ((x) - 1) * 2) | 117 | #define FLASH_EN_SHIFT(x) (6 - (x) * 2) |
| 117 | #define TORCH_EN_SHIFT(x) (2 - ((x) - 1) * 2) | 118 | #define TORCH_EN_SHIFT(x) (2 - (x) * 2) |
| 118 | 119 | ||
| 119 | /* MAX77693 MAX_FLASH1 register */ | 120 | /* MAX77693 MAX_FLASH1 register */ |
| 120 | #define MAX_FLASH1_MAX_FL_EN 0x80 | 121 | #define MAX_FLASH1_MAX_FL_EN 0x80 |
diff --git a/include/linux/mfd/max77693.h b/include/linux/mfd/max77693.h index f0b6585cd874..d450f687301b 100644 --- a/include/linux/mfd/max77693.h +++ b/include/linux/mfd/max77693.h | |||
| @@ -30,7 +30,7 @@ | |||
| 30 | #ifndef __LINUX_MFD_MAX77693_H | 30 | #ifndef __LINUX_MFD_MAX77693_H |
| 31 | #define __LINUX_MFD_MAX77693_H | 31 | #define __LINUX_MFD_MAX77693_H |
| 32 | 32 | ||
| 33 | /* MAX77686 regulator IDs */ | 33 | /* MAX77693 regulator IDs */ |
| 34 | enum max77693_regulators { | 34 | enum max77693_regulators { |
| 35 | MAX77693_ESAFEOUT1 = 0, | 35 | MAX77693_ESAFEOUT1 = 0, |
| 36 | MAX77693_ESAFEOUT2, | 36 | MAX77693_ESAFEOUT2, |
| @@ -38,12 +38,6 @@ enum max77693_regulators { | |||
| 38 | MAX77693_REG_MAX, | 38 | MAX77693_REG_MAX, |
| 39 | }; | 39 | }; |
| 40 | 40 | ||
| 41 | struct max77693_regulator_data { | ||
| 42 | int id; | ||
| 43 | struct regulator_init_data *initdata; | ||
| 44 | struct device_node *of_node; | ||
| 45 | }; | ||
| 46 | |||
| 47 | struct max77693_reg_data { | 41 | struct max77693_reg_data { |
| 48 | u8 addr; | 42 | u8 addr; |
| 49 | u8 data; | 43 | u8 data; |
| @@ -87,26 +81,9 @@ enum max77693_led_boost_mode { | |||
| 87 | MAX77693_LED_BOOST_FIXED, | 81 | MAX77693_LED_BOOST_FIXED, |
| 88 | }; | 82 | }; |
| 89 | 83 | ||
| 90 | struct max77693_led_platform_data { | ||
| 91 | u32 fleds[2]; | ||
| 92 | u32 iout_torch[2]; | ||
| 93 | u32 iout_flash[2]; | ||
| 94 | u32 trigger[2]; | ||
| 95 | u32 trigger_type[2]; | ||
| 96 | u32 num_leds; | ||
| 97 | u32 boost_mode; | ||
| 98 | u32 flash_timeout; | ||
| 99 | u32 boost_vout; | ||
| 100 | u32 low_vsys; | ||
| 101 | }; | ||
| 102 | |||
| 103 | /* MAX77693 */ | 84 | /* MAX77693 */ |
| 104 | 85 | ||
| 105 | struct max77693_platform_data { | 86 | struct max77693_platform_data { |
| 106 | /* regulator data */ | ||
| 107 | struct max77693_regulator_data *regulators; | ||
| 108 | int num_regulators; | ||
| 109 | |||
| 110 | /* muic data */ | 87 | /* muic data */ |
| 111 | struct max77693_muic_platform_data *muic_data; | 88 | struct max77693_muic_platform_data *muic_data; |
| 112 | struct max77693_led_platform_data *led_data; | 89 | struct max77693_led_platform_data *led_data; |
diff --git a/include/linux/mfd/max77843-private.h b/include/linux/mfd/max77843-private.h new file mode 100644 index 000000000000..7178ace8379e --- /dev/null +++ b/include/linux/mfd/max77843-private.h | |||
| @@ -0,0 +1,454 @@ | |||
| 1 | /* | ||
| 2 | * Common variables for the Maxim MAX77843 driver | ||
| 3 | * | ||
| 4 | * Copyright (C) 2015 Samsung Electronics | ||
| 5 | * Author: Jaewon Kim <jaewon02.kim@samsung.com> | ||
| 6 | * Author: Beomho Seo <beomho.seo@samsung.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License as published by | ||
| 10 | * the Free Software Foundation; either version 2 of the License, or | ||
| 11 | * (at your option) any later version. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef __MAX77843_PRIVATE_H_ | ||
| 15 | #define __MAX77843_PRIVATE_H_ | ||
| 16 | |||
| 17 | #include <linux/i2c.h> | ||
| 18 | #include <linux/regmap.h> | ||
| 19 | |||
| 20 | #define I2C_ADDR_TOPSYS (0xCC >> 1) | ||
| 21 | #define I2C_ADDR_CHG (0xD2 >> 1) | ||
| 22 | #define I2C_ADDR_FG (0x6C >> 1) | ||
| 23 | #define I2C_ADDR_MUIC (0x4A >> 1) | ||
| 24 | |||
| 25 | /* Topsys, Haptic and LED registers */ | ||
| 26 | enum max77843_sys_reg { | ||
| 27 | MAX77843_SYS_REG_PMICID = 0x00, | ||
| 28 | MAX77843_SYS_REG_PMICREV = 0x01, | ||
| 29 | MAX77843_SYS_REG_MAINCTRL1 = 0x02, | ||
| 30 | MAX77843_SYS_REG_INTSRC = 0x22, | ||
| 31 | MAX77843_SYS_REG_INTSRCMASK = 0x23, | ||
| 32 | MAX77843_SYS_REG_SYSINTSRC = 0x24, | ||
| 33 | MAX77843_SYS_REG_SYSINTMASK = 0x26, | ||
| 34 | MAX77843_SYS_REG_TOPSYS_STAT = 0x28, | ||
| 35 | MAX77843_SYS_REG_SAFEOUTCTRL = 0xC6, | ||
| 36 | |||
| 37 | MAX77843_SYS_REG_END, | ||
| 38 | }; | ||
| 39 | |||
| 40 | enum max77843_haptic_reg { | ||
| 41 | MAX77843_HAP_REG_MCONFIG = 0x10, | ||
| 42 | |||
| 43 | MAX77843_HAP_REG_END, | ||
| 44 | }; | ||
| 45 | |||
| 46 | enum max77843_led_reg { | ||
| 47 | MAX77843_LED_REG_LEDEN = 0x30, | ||
| 48 | MAX77843_LED_REG_LED0BRT = 0x31, | ||
| 49 | MAX77843_LED_REG_LED1BRT = 0x32, | ||
| 50 | MAX77843_LED_REG_LED2BRT = 0x33, | ||
| 51 | MAX77843_LED_REG_LED3BRT = 0x34, | ||
| 52 | MAX77843_LED_REG_LEDBLNK = 0x38, | ||
| 53 | MAX77843_LED_REG_LEDRAMP = 0x36, | ||
| 54 | |||
| 55 | MAX77843_LED_REG_END, | ||
| 56 | }; | ||
| 57 | |||
| 58 | /* Charger registers */ | ||
| 59 | enum max77843_charger_reg { | ||
| 60 | MAX77843_CHG_REG_CHG_INT = 0xB0, | ||
| 61 | MAX77843_CHG_REG_CHG_INT_MASK = 0xB1, | ||
| 62 | MAX77843_CHG_REG_CHG_INT_OK = 0xB2, | ||
| 63 | MAX77843_CHG_REG_CHG_DTLS_00 = 0xB3, | ||
| 64 | MAX77843_CHG_REG_CHG_DTLS_01 = 0xB4, | ||
| 65 | MAX77843_CHG_REG_CHG_DTLS_02 = 0xB5, | ||
| 66 | MAX77843_CHG_REG_CHG_CNFG_00 = 0xB7, | ||
| 67 | MAX77843_CHG_REG_CHG_CNFG_01 = 0xB8, | ||
| 68 | MAX77843_CHG_REG_CHG_CNFG_02 = 0xB9, | ||
| 69 | MAX77843_CHG_REG_CHG_CNFG_03 = 0xBA, | ||
| 70 | MAX77843_CHG_REG_CHG_CNFG_04 = 0xBB, | ||
| 71 | MAX77843_CHG_REG_CHG_CNFG_06 = 0xBD, | ||
| 72 | MAX77843_CHG_REG_CHG_CNFG_07 = 0xBE, | ||
| 73 | MAX77843_CHG_REG_CHG_CNFG_09 = 0xC0, | ||
| 74 | MAX77843_CHG_REG_CHG_CNFG_10 = 0xC1, | ||
| 75 | MAX77843_CHG_REG_CHG_CNFG_11 = 0xC2, | ||
| 76 | MAX77843_CHG_REG_CHG_CNFG_12 = 0xC3, | ||
| 77 | |||
| 78 | MAX77843_CHG_REG_END, | ||
| 79 | }; | ||
| 80 | |||
| 81 | /* Fuel gauge registers */ | ||
| 82 | enum max77843_fuelgauge { | ||
| 83 | MAX77843_FG_REG_STATUS = 0x00, | ||
| 84 | MAX77843_FG_REG_VALRT_TH = 0x01, | ||
| 85 | MAX77843_FG_REG_TALRT_TH = 0x02, | ||
| 86 | MAX77843_FG_REG_SALRT_TH = 0x03, | ||
| 87 | MAX77843_FG_RATE_AT_RATE = 0x04, | ||
| 88 | MAX77843_FG_REG_REMCAP_REP = 0x05, | ||
| 89 | MAX77843_FG_REG_SOCREP = 0x06, | ||
| 90 | MAX77843_FG_REG_AGE = 0x07, | ||
| 91 | MAX77843_FG_REG_TEMP = 0x08, | ||
| 92 | MAX77843_FG_REG_VCELL = 0x09, | ||
| 93 | MAX77843_FG_REG_CURRENT = 0x0A, | ||
| 94 | MAX77843_FG_REG_AVG_CURRENT = 0x0B, | ||
| 95 | MAX77843_FG_REG_SOCMIX = 0x0D, | ||
| 96 | MAX77843_FG_REG_SOCAV = 0x0E, | ||
| 97 | MAX77843_FG_REG_REMCAP_MIX = 0x0F, | ||
| 98 | MAX77843_FG_REG_FULLCAP = 0x10, | ||
| 99 | MAX77843_FG_REG_AVG_TEMP = 0x16, | ||
| 100 | MAX77843_FG_REG_CYCLES = 0x17, | ||
| 101 | MAX77843_FG_REG_AVG_VCELL = 0x19, | ||
| 102 | MAX77843_FG_REG_CONFIG = 0x1D, | ||
| 103 | MAX77843_FG_REG_REMCAP_AV = 0x1F, | ||
| 104 | MAX77843_FG_REG_FULLCAP_NOM = 0x23, | ||
| 105 | MAX77843_FG_REG_MISCCFG = 0x2B, | ||
| 106 | MAX77843_FG_REG_RCOMP = 0x38, | ||
| 107 | MAX77843_FG_REG_FSTAT = 0x3D, | ||
| 108 | MAX77843_FG_REG_DQACC = 0x45, | ||
| 109 | MAX77843_FG_REG_DPACC = 0x46, | ||
| 110 | MAX77843_FG_REG_OCV = 0xEE, | ||
| 111 | MAX77843_FG_REG_VFOCV = 0xFB, | ||
| 112 | MAX77843_FG_SOCVF = 0xFF, | ||
| 113 | |||
| 114 | MAX77843_FG_END, | ||
| 115 | }; | ||
| 116 | |||
| 117 | /* MUIC registers */ | ||
| 118 | enum max77843_muic_reg { | ||
| 119 | MAX77843_MUIC_REG_ID = 0x00, | ||
| 120 | MAX77843_MUIC_REG_INT1 = 0x01, | ||
| 121 | MAX77843_MUIC_REG_INT2 = 0x02, | ||
| 122 | MAX77843_MUIC_REG_INT3 = 0x03, | ||
| 123 | MAX77843_MUIC_REG_STATUS1 = 0x04, | ||
| 124 | MAX77843_MUIC_REG_STATUS2 = 0x05, | ||
| 125 | MAX77843_MUIC_REG_STATUS3 = 0x06, | ||
| 126 | MAX77843_MUIC_REG_INTMASK1 = 0x07, | ||
| 127 | MAX77843_MUIC_REG_INTMASK2 = 0x08, | ||
| 128 | MAX77843_MUIC_REG_INTMASK3 = 0x09, | ||
| 129 | MAX77843_MUIC_REG_CDETCTRL1 = 0x0A, | ||
| 130 | MAX77843_MUIC_REG_CDETCTRL2 = 0x0B, | ||
| 131 | MAX77843_MUIC_REG_CONTROL1 = 0x0C, | ||
| 132 | MAX77843_MUIC_REG_CONTROL2 = 0x0D, | ||
| 133 | MAX77843_MUIC_REG_CONTROL3 = 0x0E, | ||
| 134 | MAX77843_MUIC_REG_CONTROL4 = 0x16, | ||
| 135 | MAX77843_MUIC_REG_HVCONTROL1 = 0x17, | ||
| 136 | MAX77843_MUIC_REG_HVCONTROL2 = 0x18, | ||
| 137 | |||
| 138 | MAX77843_MUIC_REG_END, | ||
| 139 | }; | ||
| 140 | |||
| 141 | enum max77843_irq { | ||
| 142 | /* Topsys: SYSTEM */ | ||
| 143 | MAX77843_SYS_IRQ_SYSINTSRC_SYSUVLO_INT, | ||
| 144 | MAX77843_SYS_IRQ_SYSINTSRC_SYSOVLO_INT, | ||
| 145 | MAX77843_SYS_IRQ_SYSINTSRC_TSHDN_INT, | ||
| 146 | MAX77843_SYS_IRQ_SYSINTSRC_TM_INT, | ||
| 147 | |||
| 148 | /* Charger: CHG_INT */ | ||
| 149 | MAX77843_CHG_IRQ_CHG_INT_BYP_I, | ||
| 150 | MAX77843_CHG_IRQ_CHG_INT_BATP_I, | ||
| 151 | MAX77843_CHG_IRQ_CHG_INT_BAT_I, | ||
| 152 | MAX77843_CHG_IRQ_CHG_INT_CHG_I, | ||
| 153 | MAX77843_CHG_IRQ_CHG_INT_WCIN_I, | ||
| 154 | MAX77843_CHG_IRQ_CHG_INT_CHGIN_I, | ||
| 155 | MAX77843_CHG_IRQ_CHG_INT_AICL_I, | ||
| 156 | |||
| 157 | MAX77843_IRQ_NUM, | ||
| 158 | }; | ||
| 159 | |||
| 160 | enum max77843_irq_muic { | ||
| 161 | /* MUIC: INT1 */ | ||
| 162 | MAX77843_MUIC_IRQ_INT1_ADC, | ||
| 163 | MAX77843_MUIC_IRQ_INT1_ADCERROR, | ||
| 164 | MAX77843_MUIC_IRQ_INT1_ADC1K, | ||
| 165 | |||
| 166 | /* MUIC: INT2 */ | ||
| 167 | MAX77843_MUIC_IRQ_INT2_CHGTYP, | ||
| 168 | MAX77843_MUIC_IRQ_INT2_CHGDETRUN, | ||
| 169 | MAX77843_MUIC_IRQ_INT2_DCDTMR, | ||
| 170 | MAX77843_MUIC_IRQ_INT2_DXOVP, | ||
| 171 | MAX77843_MUIC_IRQ_INT2_VBVOLT, | ||
| 172 | |||
| 173 | /* MUIC: INT3 */ | ||
| 174 | MAX77843_MUIC_IRQ_INT3_VBADC, | ||
| 175 | MAX77843_MUIC_IRQ_INT3_VDNMON, | ||
| 176 | MAX77843_MUIC_IRQ_INT3_DNRES, | ||
| 177 | MAX77843_MUIC_IRQ_INT3_MPNACK, | ||
| 178 | MAX77843_MUIC_IRQ_INT3_MRXBUFOW, | ||
| 179 | MAX77843_MUIC_IRQ_INT3_MRXTRF, | ||
| 180 | MAX77843_MUIC_IRQ_INT3_MRXPERR, | ||
| 181 | MAX77843_MUIC_IRQ_INT3_MRXRDY, | ||
| 182 | |||
| 183 | MAX77843_MUIC_IRQ_NUM, | ||
| 184 | }; | ||
| 185 | |||
| 186 | /* MAX77843 interrupts */ | ||
| 187 | #define MAX77843_SYS_IRQ_SYSUVLO_INT BIT(0) | ||
| 188 | #define MAX77843_SYS_IRQ_SYSOVLO_INT BIT(1) | ||
| 189 | #define MAX77843_SYS_IRQ_TSHDN_INT BIT(2) | ||
| 190 | #define MAX77843_SYS_IRQ_TM_INT BIT(3) | ||
| 191 | |||
| 192 | /* MAX77843 MAINCTRL1 register */ | ||
| 193 | #define MAINCTRL1_BIASEN_SHIFT 7 | ||
| 194 | #define MAX77843_MAINCTRL1_BIASEN_MASK BIT(MAINCTRL1_BIASEN_SHIFT) | ||
| 195 | |||
| 196 | /* MAX77843 MCONFIG register */ | ||
| 197 | #define MCONFIG_MODE_SHIFT 7 | ||
| 198 | #define MCONFIG_MEN_SHIFT 6 | ||
| 199 | #define MCONFIG_PDIV_SHIFT 0 | ||
| 200 | |||
| 201 | #define MAX77843_MCONFIG_MODE_MASK BIT(MCONFIG_MODE_SHIFT) | ||
| 202 | #define MAX77843_MCONFIG_MEN_MASK BIT(MCONFIG_MEN_SHIFT) | ||
| 203 | #define MAX77843_MCONFIG_PDIV_MASK (0x3 << MCONFIG_PDIV_SHIFT) | ||
| 204 | |||
| 205 | /* Max77843 charger insterrupts */ | ||
| 206 | #define MAX77843_CHG_BYP_I BIT(0) | ||
| 207 | #define MAX77843_CHG_BATP_I BIT(2) | ||
| 208 | #define MAX77843_CHG_BAT_I BIT(3) | ||
| 209 | #define MAX77843_CHG_CHG_I BIT(4) | ||
| 210 | #define MAX77843_CHG_WCIN_I BIT(5) | ||
| 211 | #define MAX77843_CHG_CHGIN_I BIT(6) | ||
| 212 | #define MAX77843_CHG_AICL_I BIT(7) | ||
| 213 | |||
| 214 | /* MAX77843 CHG_INT_OK register */ | ||
| 215 | #define MAX77843_CHG_BYP_OK BIT(0) | ||
| 216 | #define MAX77843_CHG_BATP_OK BIT(2) | ||
| 217 | #define MAX77843_CHG_BAT_OK BIT(3) | ||
| 218 | #define MAX77843_CHG_CHG_OK BIT(4) | ||
| 219 | #define MAX77843_CHG_WCIN_OK BIT(5) | ||
| 220 | #define MAX77843_CHG_CHGIN_OK BIT(6) | ||
| 221 | #define MAX77843_CHG_AICL_OK BIT(7) | ||
| 222 | |||
| 223 | /* MAX77843 CHG_DETAILS_00 register */ | ||
| 224 | #define MAX77843_CHG_BAT_DTLS BIT(0) | ||
| 225 | |||
| 226 | /* MAX77843 CHG_DETAILS_01 register */ | ||
| 227 | #define MAX77843_CHG_DTLS_MASK 0x0f | ||
| 228 | #define MAX77843_CHG_PQ_MODE 0x00 | ||
| 229 | #define MAX77843_CHG_CC_MODE 0x01 | ||
| 230 | #define MAX77843_CHG_CV_MODE 0x02 | ||
| 231 | #define MAX77843_CHG_TO_MODE 0x03 | ||
| 232 | #define MAX77843_CHG_DO_MODE 0x04 | ||
| 233 | #define MAX77843_CHG_HT_MODE 0x05 | ||
| 234 | #define MAX77843_CHG_TF_MODE 0x06 | ||
| 235 | #define MAX77843_CHG_TS_MODE 0x07 | ||
| 236 | #define MAX77843_CHG_OFF_MODE 0x08 | ||
| 237 | |||
| 238 | #define MAX77843_CHG_BAT_DTLS_MASK 0xf0 | ||
| 239 | #define MAX77843_CHG_NO_BAT (0x00 << 4) | ||
| 240 | #define MAX77843_CHG_LOW_VOLT_BAT (0x01 << 4) | ||
| 241 | #define MAX77843_CHG_LONG_BAT_TIME (0x02 << 4) | ||
| 242 | #define MAX77843_CHG_OK_BAT (0x03 << 4) | ||
| 243 | #define MAX77843_CHG_OK_LOW_VOLT_BAT (0x04 << 4) | ||
| 244 | #define MAX77843_CHG_OVER_VOLT_BAT (0x05 << 4) | ||
| 245 | #define MAX77843_CHG_OVER_CURRENT_BAT (0x06 << 4) | ||
| 246 | |||
| 247 | /* MAX77843 CHG_CNFG_00 register */ | ||
| 248 | #define MAX77843_CHG_DISABLE 0x00 | ||
| 249 | #define MAX77843_CHG_ENABLE 0x05 | ||
| 250 | #define MAX77843_CHG_MASK 0x01 | ||
| 251 | #define MAX77843_CHG_BUCK_MASK 0x04 | ||
| 252 | |||
| 253 | /* MAX77843 CHG_CNFG_01 register */ | ||
| 254 | #define MAX77843_CHG_RESTART_THRESHOLD_100 0x00 | ||
| 255 | #define MAX77843_CHG_RESTART_THRESHOLD_150 0x10 | ||
| 256 | #define MAX77843_CHG_RESTART_THRESHOLD_200 0x20 | ||
| 257 | #define MAX77843_CHG_RESTART_THRESHOLD_DISABLE 0x30 | ||
| 258 | |||
| 259 | /* MAX77843 CHG_CNFG_02 register */ | ||
| 260 | #define MAX77843_CHG_FAST_CHG_CURRENT_MIN 100000 | ||
| 261 | #define MAX77843_CHG_FAST_CHG_CURRENT_MAX 3150000 | ||
| 262 | #define MAX77843_CHG_FAST_CHG_CURRENT_STEP 50000 | ||
| 263 | #define MAX77843_CHG_FAST_CHG_CURRENT_MASK 0x3f | ||
| 264 | #define MAX77843_CHG_OTG_ILIMIT_500 (0x00 << 6) | ||
| 265 | #define MAX77843_CHG_OTG_ILIMIT_900 (0x01 << 6) | ||
| 266 | #define MAX77843_CHG_OTG_ILIMIT_1200 (0x02 << 6) | ||
| 267 | #define MAX77843_CHG_OTG_ILIMIT_1500 (0x03 << 6) | ||
| 268 | #define MAX77843_CHG_OTG_ILIMIT_MASK 0xc0 | ||
| 269 | |||
| 270 | /* MAX77843 CHG_CNFG_03 register */ | ||
| 271 | #define MAX77843_CHG_TOP_OFF_CURRENT_MIN 125000 | ||
| 272 | #define MAX77843_CHG_TOP_OFF_CURRENT_MAX 650000 | ||
| 273 | #define MAX77843_CHG_TOP_OFF_CURRENT_STEP 75000 | ||
| 274 | #define MAX77843_CHG_TOP_OFF_CURRENT_MASK 0x07 | ||
| 275 | |||
| 276 | /* MAX77843 CHG_CNFG_06 register */ | ||
| 277 | #define MAX77843_CHG_WRITE_CAP_BLOCK 0x10 | ||
| 278 | #define MAX77843_CHG_WRITE_CAP_UNBLOCK 0x0C | ||
| 279 | |||
| 280 | /* MAX77843_CHG_CNFG_09_register */ | ||
| 281 | #define MAX77843_CHG_INPUT_CURRENT_LIMIT_MIN 100000 | ||
| 282 | #define MAX77843_CHG_INPUT_CURRENT_LIMIT_MAX 4000000 | ||
| 283 | #define MAX77843_CHG_INPUT_CURRENT_LIMIT_REF 3367000 | ||
| 284 | #define MAX77843_CHG_INPUT_CURRENT_LIMIT_STEP 33000 | ||
| 285 | |||
| 286 | #define MAX77843_MUIC_ADC BIT(0) | ||
| 287 | #define MAX77843_MUIC_ADCERROR BIT(2) | ||
| 288 | #define MAX77843_MUIC_ADC1K BIT(3) | ||
| 289 | |||
| 290 | #define MAX77843_MUIC_CHGTYP BIT(0) | ||
| 291 | #define MAX77843_MUIC_CHGDETRUN BIT(1) | ||
| 292 | #define MAX77843_MUIC_DCDTMR BIT(2) | ||
| 293 | #define MAX77843_MUIC_DXOVP BIT(3) | ||
| 294 | #define MAX77843_MUIC_VBVOLT BIT(4) | ||
| 295 | |||
| 296 | #define MAX77843_MUIC_VBADC BIT(0) | ||
| 297 | #define MAX77843_MUIC_VDNMON BIT(1) | ||
| 298 | #define MAX77843_MUIC_DNRES BIT(2) | ||
| 299 | #define MAX77843_MUIC_MPNACK BIT(3) | ||
| 300 | #define MAX77843_MUIC_MRXBUFOW BIT(4) | ||
| 301 | #define MAX77843_MUIC_MRXTRF BIT(5) | ||
| 302 | #define MAX77843_MUIC_MRXPERR BIT(6) | ||
| 303 | #define MAX77843_MUIC_MRXRDY BIT(7) | ||
| 304 | |||
| 305 | /* MAX77843 INTSRCMASK register */ | ||
| 306 | #define MAX77843_INTSRCMASK_CHGR 0 | ||
| 307 | #define MAX77843_INTSRCMASK_SYS 1 | ||
| 308 | #define MAX77843_INTSRCMASK_FG 2 | ||
| 309 | #define MAX77843_INTSRCMASK_MUIC 3 | ||
| 310 | |||
| 311 | #define MAX77843_INTSRCMASK_CHGR_MASK BIT(MAX77843_INTSRCMASK_CHGR) | ||
| 312 | #define MAX77843_INTSRCMASK_SYS_MASK BIT(MAX77843_INTSRCMASK_SYS) | ||
| 313 | #define MAX77843_INTSRCMASK_FG_MASK BIT(MAX77843_INTSRCMASK_FG) | ||
| 314 | #define MAX77843_INTSRCMASK_MUIC_MASK BIT(MAX77843_INTSRCMASK_MUIC) | ||
| 315 | |||
| 316 | #define MAX77843_INTSRC_MASK_MASK \ | ||
| 317 | (MAX77843_INTSRCMASK_MUIC_MASK | MAX77843_INTSRCMASK_FG_MASK | \ | ||
| 318 | MAX77843_INTSRCMASK_SYS_MASK | MAX77843_INTSRCMASK_CHGR_MASK) | ||
| 319 | |||
| 320 | /* MAX77843 STATUS register*/ | ||
| 321 | #define STATUS1_ADC_SHIFT 0 | ||
| 322 | #define STATUS1_ADCERROR_SHIFT 6 | ||
| 323 | #define STATUS1_ADC1K_SHIFT 7 | ||
| 324 | #define STATUS2_CHGTYP_SHIFT 0 | ||
| 325 | #define STATUS2_CHGDETRUN_SHIFT 3 | ||
| 326 | #define STATUS2_DCDTMR_SHIFT 4 | ||
| 327 | #define STATUS2_DXOVP_SHIFT 5 | ||
| 328 | #define STATUS2_VBVOLT_SHIFT 6 | ||
| 329 | #define STATUS3_VBADC_SHIFT 0 | ||
| 330 | #define STATUS3_VDNMON_SHIFT 4 | ||
| 331 | #define STATUS3_DNRES_SHIFT 5 | ||
| 332 | #define STATUS3_MPNACK_SHIFT 6 | ||
| 333 | |||
| 334 | #define MAX77843_MUIC_STATUS1_ADC_MASK (0x1f << STATUS1_ADC_SHIFT) | ||
| 335 | #define MAX77843_MUIC_STATUS1_ADCERROR_MASK BIT(STATUS1_ADCERROR_SHIFT) | ||
| 336 | #define MAX77843_MUIC_STATUS1_ADC1K_MASK BIT(STATUS1_ADC1K_SHIFT) | ||
| 337 | #define MAX77843_MUIC_STATUS2_CHGTYP_MASK (0x7 << STATUS2_CHGTYP_SHIFT) | ||
| 338 | #define MAX77843_MUIC_STATUS2_CHGDETRUN_MASK BIT(STATUS2_CHGDETRUN_SHIFT) | ||
| 339 | #define MAX77843_MUIC_STATUS2_DCDTMR_MASK BIT(STATUS2_DCDTMR_SHIFT) | ||
| 340 | #define MAX77843_MUIC_STATUS2_DXOVP_MASK BIT(STATUS2_DXOVP_SHIFT) | ||
| 341 | #define MAX77843_MUIC_STATUS2_VBVOLT_MASK BIT(STATUS2_VBVOLT_SHIFT) | ||
| 342 | #define MAX77843_MUIC_STATUS3_VBADC_MASK (0xf << STATUS3_VBADC_SHIFT) | ||
| 343 | #define MAX77843_MUIC_STATUS3_VDNMON_MASK BIT(STATUS3_VDNMON_SHIFT) | ||
| 344 | #define MAX77843_MUIC_STATUS3_DNRES_MASK BIT(STATUS3_DNRES_SHIFT) | ||
| 345 | #define MAX77843_MUIC_STATUS3_MPNACK_MASK BIT(STATUS3_MPNACK_SHIFT) | ||
| 346 | |||
| 347 | /* MAX77843 CONTROL register */ | ||
| 348 | #define CONTROL1_COMP1SW_SHIFT 0 | ||
| 349 | #define CONTROL1_COMP2SW_SHIFT 3 | ||
| 350 | #define CONTROL1_IDBEN_SHIFT 7 | ||
| 351 | #define CONTROL2_LOWPWR_SHIFT 0 | ||
| 352 | #define CONTROL2_ADCEN_SHIFT 1 | ||
| 353 | #define CONTROL2_CPEN_SHIFT 2 | ||
| 354 | #define CONTROL2_ACC_DET_SHIFT 5 | ||
| 355 | #define CONTROL2_USBCPINT_SHIFT 6 | ||
| 356 | #define CONTROL2_RCPS_SHIFT 7 | ||
| 357 | #define CONTROL3_JIGSET_SHIFT 0 | ||
| 358 | #define CONTROL4_ADCDBSET_SHIFT 0 | ||
| 359 | #define CONTROL4_USBAUTO_SHIFT 4 | ||
| 360 | #define CONTROL4_FCTAUTO_SHIFT 5 | ||
| 361 | #define CONTROL4_ADCMODE_SHIFT 6 | ||
| 362 | |||
| 363 | #define MAX77843_MUIC_CONTROL1_COMP1SW_MASK (0x7 << CONTROL1_COMP1SW_SHIFT) | ||
| 364 | #define MAX77843_MUIC_CONTROL1_COMP2SW_MASK (0x7 << CONTROL1_COMP2SW_SHIFT) | ||
| 365 | #define MAX77843_MUIC_CONTROL1_IDBEN_MASK BIT(CONTROL1_IDBEN_SHIFT) | ||
| 366 | #define MAX77843_MUIC_CONTROL2_LOWPWR_MASK BIT(CONTROL2_LOWPWR_SHIFT) | ||
| 367 | #define MAX77843_MUIC_CONTROL2_ADCEN_MASK BIT(CONTROL2_ADCEN_SHIFT) | ||
| 368 | #define MAX77843_MUIC_CONTROL2_CPEN_MASK BIT(CONTROL2_CPEN_SHIFT) | ||
| 369 | #define MAX77843_MUIC_CONTROL2_ACC_DET_MASK BIT(CONTROL2_ACC_DET_SHIFT) | ||
| 370 | #define MAX77843_MUIC_CONTROL2_USBCPINT_MASK BIT(CONTROL2_USBCPINT_SHIFT) | ||
| 371 | #define MAX77843_MUIC_CONTROL2_RCPS_MASK BIT(CONTROL2_RCPS_SHIFT) | ||
| 372 | #define MAX77843_MUIC_CONTROL3_JIGSET_MASK (0x3 << CONTROL3_JIGSET_SHIFT) | ||
| 373 | #define MAX77843_MUIC_CONTROL4_ADCDBSET_MASK (0x3 << CONTROL4_ADCDBSET_SHIFT) | ||
| 374 | #define MAX77843_MUIC_CONTROL4_USBAUTO_MASK BIT(CONTROL4_USBAUTO_SHIFT) | ||
| 375 | #define MAX77843_MUIC_CONTROL4_FCTAUTO_MASK BIT(CONTROL4_FCTAUTO_SHIFT) | ||
| 376 | #define MAX77843_MUIC_CONTROL4_ADCMODE_MASK (0x3 << CONTROL4_ADCMODE_SHIFT) | ||
| 377 | |||
| 378 | /* MAX77843 switch port */ | ||
| 379 | #define COM_OPEN 0 | ||
| 380 | #define COM_USB 1 | ||
| 381 | #define COM_AUDIO 2 | ||
| 382 | #define COM_UART 3 | ||
| 383 | #define COM_AUX_USB 4 | ||
| 384 | #define COM_AUX_UART 5 | ||
| 385 | |||
| 386 | #define CONTROL1_COM_SW \ | ||
| 387 | ((MAX77843_MUIC_CONTROL1_COMP1SW_MASK | \ | ||
| 388 | MAX77843_MUIC_CONTROL1_COMP2SW_MASK)) | ||
| 389 | |||
| 390 | #define CONTROL1_SW_OPEN \ | ||
| 391 | ((COM_OPEN << CONTROL1_COMP1SW_SHIFT | \ | ||
| 392 | COM_OPEN << CONTROL1_COMP2SW_SHIFT)) | ||
| 393 | #define CONTROL1_SW_USB \ | ||
| 394 | ((COM_USB << CONTROL1_COMP1SW_SHIFT | \ | ||
| 395 | COM_USB << CONTROL1_COMP2SW_SHIFT)) | ||
| 396 | #define CONTROL1_SW_AUDIO \ | ||
| 397 | ((COM_AUDIO << CONTROL1_COMP1SW_SHIFT | \ | ||
| 398 | COM_AUDIO << CONTROL1_COMP2SW_SHIFT)) | ||
| 399 | #define CONTROL1_SW_UART \ | ||
| 400 | ((COM_UART << CONTROL1_COMP1SW_SHIFT | \ | ||
| 401 | COM_UART << CONTROL1_COMP2SW_SHIFT)) | ||
| 402 | #define CONTROL1_SW_AUX_USB \ | ||
| 403 | ((COM_AUX_USB << CONTROL1_COMP1SW_SHIFT | \ | ||
| 404 | COM_AUX_USB << CONTROL1_COMP2SW_SHIFT)) | ||
| 405 | #define CONTROL1_SW_AUX_UART \ | ||
| 406 | ((COM_AUX_UART << CONTROL1_COMP1SW_SHIFT | \ | ||
| 407 | COM_AUX_UART << CONTROL1_COMP2SW_SHIFT)) | ||
| 408 | |||
| 409 | #define MAX77843_DISABLE 0 | ||
| 410 | #define MAX77843_ENABLE 1 | ||
| 411 | |||
| 412 | #define CONTROL4_AUTO_DISABLE \ | ||
| 413 | ((MAX77843_DISABLE << CONTROL4_USBAUTO_SHIFT) | \ | ||
| 414 | (MAX77843_DISABLE << CONTROL4_FCTAUTO_SHIFT)) | ||
| 415 | #define CONTROL4_AUTO_ENABLE \ | ||
| 416 | ((MAX77843_ENABLE << CONTROL4_USBAUTO_SHIFT) | \ | ||
| 417 | (MAX77843_ENABLE << CONTROL4_FCTAUTO_SHIFT)) | ||
| 418 | |||
| 419 | /* MAX77843 SAFEOUT LDO Control register */ | ||
| 420 | #define SAFEOUTCTRL_SAFEOUT1_SHIFT 0 | ||
| 421 | #define SAFEOUTCTRL_SAFEOUT2_SHIFT 2 | ||
| 422 | #define SAFEOUTCTRL_ENSAFEOUT1_SHIFT 6 | ||
| 423 | #define SAFEOUTCTRL_ENSAFEOUT2_SHIFT 7 | ||
| 424 | |||
| 425 | #define MAX77843_REG_SAFEOUTCTRL_ENSAFEOUT1 \ | ||
| 426 | BIT(SAFEOUTCTRL_ENSAFEOUT1_SHIFT) | ||
| 427 | #define MAX77843_REG_SAFEOUTCTRL_ENSAFEOUT2 \ | ||
| 428 | BIT(SAFEOUTCTRL_ENSAFEOUT2_SHIFT) | ||
| 429 | #define MAX77843_REG_SAFEOUTCTRL_SAFEOUT1_MASK \ | ||
| 430 | (0x3 << SAFEOUTCTRL_SAFEOUT1_SHIFT) | ||
| 431 | #define MAX77843_REG_SAFEOUTCTRL_SAFEOUT2_MASK \ | ||
| 432 | (0x3 << SAFEOUTCTRL_SAFEOUT2_SHIFT) | ||
| 433 | |||
| 434 | struct max77843 { | ||
| 435 | struct device *dev; | ||
| 436 | |||
| 437 | struct i2c_client *i2c; | ||
| 438 | struct i2c_client *i2c_chg; | ||
| 439 | struct i2c_client *i2c_fuel; | ||
| 440 | struct i2c_client *i2c_muic; | ||
| 441 | |||
| 442 | struct regmap *regmap; | ||
| 443 | struct regmap *regmap_chg; | ||
| 444 | struct regmap *regmap_fuel; | ||
| 445 | struct regmap *regmap_muic; | ||
| 446 | |||
| 447 | struct regmap_irq_chip_data *irq_data; | ||
| 448 | struct regmap_irq_chip_data *irq_data_chg; | ||
| 449 | struct regmap_irq_chip_data *irq_data_fuel; | ||
| 450 | struct regmap_irq_chip_data *irq_data_muic; | ||
| 451 | |||
| 452 | int irq; | ||
| 453 | }; | ||
| 454 | #endif /* __MAX77843_H__ */ | ||
diff --git a/include/linux/mfd/menelaus.h b/include/linux/mfd/menelaus.h index f097e89134cb..9e85ac06da89 100644 --- a/include/linux/mfd/menelaus.h +++ b/include/linux/mfd/menelaus.h | |||
| @@ -24,7 +24,6 @@ extern int menelaus_set_vaux(unsigned int mV); | |||
| 24 | extern int menelaus_set_vdcdc(int dcdc, unsigned int mV); | 24 | extern int menelaus_set_vdcdc(int dcdc, unsigned int mV); |
| 25 | extern int menelaus_set_slot_sel(int enable); | 25 | extern int menelaus_set_slot_sel(int enable); |
| 26 | extern int menelaus_get_slot_pin_states(void); | 26 | extern int menelaus_get_slot_pin_states(void); |
| 27 | extern int menelaus_set_vcore_sw(unsigned int mV); | ||
| 28 | extern int menelaus_set_vcore_hw(unsigned int roof_mV, unsigned int floor_mV); | 27 | extern int menelaus_set_vcore_hw(unsigned int roof_mV, unsigned int floor_mV); |
| 29 | 28 | ||
| 30 | #define EN_VPLL_SLEEP (1 << 7) | 29 | #define EN_VPLL_SLEEP (1 << 7) |
| @@ -38,10 +37,4 @@ extern int menelaus_set_vcore_hw(unsigned int roof_mV, unsigned int floor_mV); | |||
| 38 | 37 | ||
| 39 | extern int menelaus_set_regulator_sleep(int enable, u32 val); | 38 | extern int menelaus_set_regulator_sleep(int enable, u32 val); |
| 40 | 39 | ||
| 41 | #if defined(CONFIG_ARCH_OMAP2) && defined(CONFIG_MENELAUS) | ||
| 42 | #define omap_has_menelaus() 1 | ||
| 43 | #else | ||
| 44 | #define omap_has_menelaus() 0 | ||
| 45 | #endif | ||
| 46 | |||
| 47 | #endif | 40 | #endif |
diff --git a/include/linux/mfd/mt6397/core.h b/include/linux/mfd/mt6397/core.h new file mode 100644 index 000000000000..cf5265b0d1c1 --- /dev/null +++ b/include/linux/mfd/mt6397/core.h | |||
| @@ -0,0 +1,64 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2014 MediaTek Inc. | ||
| 3 | * Author: Flora Fu, MediaTek | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_MT6397_CORE_H__ | ||
| 16 | #define __MFD_MT6397_CORE_H__ | ||
| 17 | |||
| 18 | enum mt6397_irq_numbers { | ||
| 19 | MT6397_IRQ_SPKL_AB = 0, | ||
| 20 | MT6397_IRQ_SPKR_AB, | ||
| 21 | MT6397_IRQ_SPKL, | ||
| 22 | MT6397_IRQ_SPKR, | ||
| 23 | MT6397_IRQ_BAT_L, | ||
| 24 | MT6397_IRQ_BAT_H, | ||
| 25 | MT6397_IRQ_FG_BAT_L, | ||
| 26 | MT6397_IRQ_FG_BAT_H, | ||
| 27 | MT6397_IRQ_WATCHDOG, | ||
| 28 | MT6397_IRQ_PWRKEY, | ||
| 29 | MT6397_IRQ_THR_L, | ||
| 30 | MT6397_IRQ_THR_H, | ||
| 31 | MT6397_IRQ_VBATON_UNDET, | ||
| 32 | MT6397_IRQ_BVALID_DET, | ||
| 33 | MT6397_IRQ_CHRDET, | ||
| 34 | MT6397_IRQ_OV, | ||
| 35 | MT6397_IRQ_LDO, | ||
| 36 | MT6397_IRQ_HOMEKEY, | ||
| 37 | MT6397_IRQ_ACCDET, | ||
| 38 | MT6397_IRQ_AUDIO, | ||
| 39 | MT6397_IRQ_RTC, | ||
| 40 | MT6397_IRQ_PWRKEY_RSTB, | ||
| 41 | MT6397_IRQ_HDMI_SIFM, | ||
| 42 | MT6397_IRQ_HDMI_CEC, | ||
| 43 | MT6397_IRQ_VCA15, | ||
| 44 | MT6397_IRQ_VSRMCA15, | ||
| 45 | MT6397_IRQ_VCORE, | ||
| 46 | MT6397_IRQ_VGPU, | ||
| 47 | MT6397_IRQ_VIO18, | ||
| 48 | MT6397_IRQ_VPCA7, | ||
| 49 | MT6397_IRQ_VSRMCA7, | ||
| 50 | MT6397_IRQ_VDRM, | ||
| 51 | MT6397_IRQ_NR, | ||
| 52 | }; | ||
| 53 | |||
| 54 | struct mt6397_chip { | ||
| 55 | struct device *dev; | ||
| 56 | struct regmap *regmap; | ||
| 57 | int irq; | ||
| 58 | struct irq_domain *irq_domain; | ||
| 59 | struct mutex irqlock; | ||
| 60 | u16 irq_masks_cur[2]; | ||
| 61 | u16 irq_masks_cache[2]; | ||
| 62 | }; | ||
| 63 | |||
| 64 | #endif /* __MFD_MT6397_CORE_H__ */ | ||
diff --git a/include/linux/mfd/mt6397/registers.h b/include/linux/mfd/mt6397/registers.h new file mode 100644 index 000000000000..f23a0a60a877 --- /dev/null +++ b/include/linux/mfd/mt6397/registers.h | |||
| @@ -0,0 +1,362 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2014 MediaTek Inc. | ||
| 3 | * Author: Flora Fu, MediaTek | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License version 2 as | ||
| 7 | * published by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __MFD_MT6397_REGISTERS_H__ | ||
| 16 | #define __MFD_MT6397_REGISTERS_H__ | ||
| 17 | |||
| 18 | /* PMIC Registers */ | ||
| 19 | #define MT6397_CID 0x0100 | ||
| 20 | #define MT6397_TOP_CKPDN 0x0102 | ||
| 21 | #define MT6397_TOP_CKPDN_SET 0x0104 | ||
| 22 | #define MT6397_TOP_CKPDN_CLR 0x0106 | ||
| 23 | #define MT6397_TOP_CKPDN2 0x0108 | ||
| 24 | #define MT6397_TOP_CKPDN2_SET 0x010A | ||
| 25 | #define MT6397_TOP_CKPDN2_CLR 0x010C | ||
| 26 | #define MT6397_TOP_GPIO_CKPDN 0x010E | ||
| 27 | #define MT6397_TOP_RST_CON 0x0114 | ||
| 28 | #define MT6397_WRP_CKPDN 0x011A | ||
| 29 | #define MT6397_WRP_RST_CON 0x0120 | ||
| 30 | #define MT6397_TOP_RST_MISC 0x0126 | ||
| 31 | #define MT6397_TOP_CKCON1 0x0128 | ||
| 32 | #define MT6397_TOP_CKCON2 0x012A | ||
| 33 | #define MT6397_TOP_CKTST1 0x012C | ||
| 34 | #define MT6397_TOP_CKTST2 0x012E | ||
| 35 | #define MT6397_OC_DEG_EN 0x0130 | ||
| 36 | #define MT6397_OC_CTL0 0x0132 | ||
| 37 | #define MT6397_OC_CTL1 0x0134 | ||
| 38 | #define MT6397_OC_CTL2 0x0136 | ||
| 39 | #define MT6397_INT_RSV 0x0138 | ||
| 40 | #define MT6397_TEST_CON0 0x013A | ||
| 41 | #define MT6397_TEST_CON1 0x013C | ||
| 42 | #define MT6397_STATUS0 0x013E | ||
| 43 | #define MT6397_STATUS1 0x0140 | ||
| 44 | #define MT6397_PGSTATUS 0x0142 | ||
| 45 | #define MT6397_CHRSTATUS 0x0144 | ||
| 46 | #define MT6397_OCSTATUS0 0x0146 | ||
| 47 | #define MT6397_OCSTATUS1 0x0148 | ||
| 48 | #define MT6397_OCSTATUS2 0x014A | ||
| 49 | #define MT6397_HDMI_PAD_IE 0x014C | ||
| 50 | #define MT6397_TEST_OUT_L 0x014E | ||
| 51 | #define MT6397_TEST_OUT_H 0x0150 | ||
| 52 | #define MT6397_TDSEL_CON 0x0152 | ||
| 53 | #define MT6397_RDSEL_CON 0x0154 | ||
| 54 | #define MT6397_GPIO_SMT_CON0 0x0156 | ||
| 55 | #define MT6397_GPIO_SMT_CON1 0x0158 | ||
| 56 | #define MT6397_GPIO_SMT_CON2 0x015A | ||
| 57 | #define MT6397_GPIO_SMT_CON3 0x015C | ||
| 58 | #define MT6397_DRV_CON0 0x015E | ||
| 59 | #define MT6397_DRV_CON1 0x0160 | ||
| 60 | #define MT6397_DRV_CON2 0x0162 | ||
| 61 | #define MT6397_DRV_CON3 0x0164 | ||
| 62 | #define MT6397_DRV_CON4 0x0166 | ||
| 63 | #define MT6397_DRV_CON5 0x0168 | ||
| 64 | #define MT6397_DRV_CON6 0x016A | ||
| 65 | #define MT6397_DRV_CON7 0x016C | ||
| 66 | #define MT6397_DRV_CON8 0x016E | ||
| 67 | #define MT6397_DRV_CON9 0x0170 | ||
| 68 | #define MT6397_DRV_CON10 0x0172 | ||
| 69 | #define MT6397_DRV_CON11 0x0174 | ||
| 70 | #define MT6397_DRV_CON12 0x0176 | ||
| 71 | #define MT6397_INT_CON0 0x0178 | ||
| 72 | #define MT6397_INT_CON1 0x017E | ||
| 73 | #define MT6397_INT_STATUS0 0x0184 | ||
| 74 | #define MT6397_INT_STATUS1 0x0186 | ||
| 75 | #define MT6397_FQMTR_CON0 0x0188 | ||
| 76 | #define MT6397_FQMTR_CON1 0x018A | ||
| 77 | #define MT6397_FQMTR_CON2 0x018C | ||
| 78 | #define MT6397_EFUSE_DOUT_0_15 0x01C4 | ||
| 79 | #define MT6397_EFUSE_DOUT_16_31 0x01C6 | ||
| 80 | #define MT6397_EFUSE_DOUT_32_47 0x01C8 | ||
| 81 | #define MT6397_EFUSE_DOUT_48_63 0x01CA | ||
| 82 | #define MT6397_SPI_CON 0x01CC | ||
| 83 | #define MT6397_TOP_CKPDN3 0x01CE | ||
| 84 | #define MT6397_TOP_CKCON3 0x01D4 | ||
| 85 | #define MT6397_EFUSE_DOUT_64_79 0x01D6 | ||
| 86 | #define MT6397_EFUSE_DOUT_80_95 0x01D8 | ||
| 87 | #define MT6397_EFUSE_DOUT_96_111 0x01DA | ||
| 88 | #define MT6397_EFUSE_DOUT_112_127 0x01DC | ||
| 89 | #define MT6397_EFUSE_DOUT_128_143 0x01DE | ||
| 90 | #define MT6397_EFUSE_DOUT_144_159 0x01E0 | ||
| 91 | #define MT6397_EFUSE_DOUT_160_175 0x01E2 | ||
| 92 | #define MT6397_EFUSE_DOUT_176_191 0x01E4 | ||
| 93 | #define MT6397_EFUSE_DOUT_192_207 0x01E6 | ||
| 94 | #define MT6397_EFUSE_DOUT_208_223 0x01E8 | ||
| 95 | #define MT6397_EFUSE_DOUT_224_239 0x01EA | ||
| 96 | #define MT6397_EFUSE_DOUT_240_255 0x01EC | ||
| 97 | #define MT6397_EFUSE_DOUT_256_271 0x01EE | ||
| 98 | #define MT6397_EFUSE_DOUT_272_287 0x01F0 | ||
| 99 | #define MT6397_EFUSE_DOUT_288_300 0x01F2 | ||
| 100 | #define MT6397_EFUSE_DOUT_304_319 0x01F4 | ||
| 101 | #define MT6397_BUCK_CON0 0x0200 | ||
| 102 | #define MT6397_BUCK_CON1 0x0202 | ||
| 103 | #define MT6397_BUCK_CON2 0x0204 | ||
| 104 | #define MT6397_BUCK_CON3 0x0206 | ||
| 105 | #define MT6397_BUCK_CON4 0x0208 | ||
| 106 | #define MT6397_BUCK_CON5 0x020A | ||
| 107 | #define MT6397_BUCK_CON6 0x020C | ||
| 108 | #define MT6397_BUCK_CON7 0x020E | ||
| 109 | #define MT6397_BUCK_CON8 0x0210 | ||
| 110 | #define MT6397_BUCK_CON9 0x0212 | ||
| 111 | #define MT6397_VCA15_CON0 0x0214 | ||
| 112 | #define MT6397_VCA15_CON1 0x0216 | ||
| 113 | #define MT6397_VCA15_CON2 0x0218 | ||
| 114 | #define MT6397_VCA15_CON3 0x021A | ||
| 115 | #define MT6397_VCA15_CON4 0x021C | ||
| 116 | #define MT6397_VCA15_CON5 0x021E | ||
| 117 | #define MT6397_VCA15_CON6 0x0220 | ||
| 118 | #define MT6397_VCA15_CON7 0x0222 | ||
| 119 | #define MT6397_VCA15_CON8 0x0224 | ||
| 120 | #define MT6397_VCA15_CON9 0x0226 | ||
| 121 | #define MT6397_VCA15_CON10 0x0228 | ||
| 122 | #define MT6397_VCA15_CON11 0x022A | ||
| 123 | #define MT6397_VCA15_CON12 0x022C | ||
| 124 | #define MT6397_VCA15_CON13 0x022E | ||
| 125 | #define MT6397_VCA15_CON14 0x0230 | ||
| 126 | #define MT6397_VCA15_CON15 0x0232 | ||
| 127 | #define MT6397_VCA15_CON16 0x0234 | ||
| 128 | #define MT6397_VCA15_CON17 0x0236 | ||
| 129 | #define MT6397_VCA15_CON18 0x0238 | ||
| 130 | #define MT6397_VSRMCA15_CON0 0x023A | ||
| 131 | #define MT6397_VSRMCA15_CON1 0x023C | ||
| 132 | #define MT6397_VSRMCA15_CON2 0x023E | ||
| 133 | #define MT6397_VSRMCA15_CON3 0x0240 | ||
| 134 | #define MT6397_VSRMCA15_CON4 0x0242 | ||
| 135 | #define MT6397_VSRMCA15_CON5 0x0244 | ||
| 136 | #define MT6397_VSRMCA15_CON6 0x0246 | ||
| 137 | #define MT6397_VSRMCA15_CON7 0x0248 | ||
| 138 | #define MT6397_VSRMCA15_CON8 0x024A | ||
| 139 | #define MT6397_VSRMCA15_CON9 0x024C | ||
| 140 | #define MT6397_VSRMCA15_CON10 0x024E | ||
| 141 | #define MT6397_VSRMCA15_CON11 0x0250 | ||
| 142 | #define MT6397_VSRMCA15_CON12 0x0252 | ||
| 143 | #define MT6397_VSRMCA15_CON13 0x0254 | ||
| 144 | #define MT6397_VSRMCA15_CON14 0x0256 | ||
| 145 | #define MT6397_VSRMCA15_CON15 0x0258 | ||
| 146 | #define MT6397_VSRMCA15_CON16 0x025A | ||
| 147 | #define MT6397_VSRMCA15_CON17 0x025C | ||
| 148 | #define MT6397_VSRMCA15_CON18 0x025E | ||
| 149 | #define MT6397_VSRMCA15_CON19 0x0260 | ||
| 150 | #define MT6397_VSRMCA15_CON20 0x0262 | ||
| 151 | #define MT6397_VSRMCA15_CON21 0x0264 | ||
| 152 | #define MT6397_VCORE_CON0 0x0266 | ||
| 153 | #define MT6397_VCORE_CON1 0x0268 | ||
| 154 | #define MT6397_VCORE_CON2 0x026A | ||
| 155 | #define MT6397_VCORE_CON3 0x026C | ||
| 156 | #define MT6397_VCORE_CON4 0x026E | ||
| 157 | #define MT6397_VCORE_CON5 0x0270 | ||
| 158 | #define MT6397_VCORE_CON6 0x0272 | ||
| 159 | #define MT6397_VCORE_CON7 0x0274 | ||
| 160 | #define MT6397_VCORE_CON8 0x0276 | ||
| 161 | #define MT6397_VCORE_CON9 0x0278 | ||
| 162 | #define MT6397_VCORE_CON10 0x027A | ||
| 163 | #define MT6397_VCORE_CON11 0x027C | ||
| 164 | #define MT6397_VCORE_CON12 0x027E | ||
| 165 | #define MT6397_VCORE_CON13 0x0280 | ||
| 166 | #define MT6397_VCORE_CON14 0x0282 | ||
| 167 | #define MT6397_VCORE_CON15 0x0284 | ||
| 168 | #define MT6397_VCORE_CON16 0x0286 | ||
| 169 | #define MT6397_VCORE_CON17 0x0288 | ||
| 170 | #define MT6397_VCORE_CON18 0x028A | ||
| 171 | #define MT6397_VGPU_CON0 0x028C | ||
| 172 | #define MT6397_VGPU_CON1 0x028E | ||
| 173 | #define MT6397_VGPU_CON2 0x0290 | ||
| 174 | #define MT6397_VGPU_CON3 0x0292 | ||
| 175 | #define MT6397_VGPU_CON4 0x0294 | ||
| 176 | #define MT6397_VGPU_CON5 0x0296 | ||
| 177 | #define MT6397_VGPU_CON6 0x0298 | ||
| 178 | #define MT6397_VGPU_CON7 0x029A | ||
| 179 | #define MT6397_VGPU_CON8 0x029C | ||
| 180 | #define MT6397_VGPU_CON9 0x029E | ||
| 181 | #define MT6397_VGPU_CON10 0x02A0 | ||
| 182 | #define MT6397_VGPU_CON11 0x02A2 | ||
| 183 | #define MT6397_VGPU_CON12 0x02A4 | ||
| 184 | #define MT6397_VGPU_CON13 0x02A6 | ||
| 185 | #define MT6397_VGPU_CON14 0x02A8 | ||
| 186 | #define MT6397_VGPU_CON15 0x02AA | ||
| 187 | #define MT6397_VGPU_CON16 0x02AC | ||
| 188 | #define MT6397_VGPU_CON17 0x02AE | ||
| 189 | #define MT6397_VGPU_CON18 0x02B0 | ||
| 190 | #define MT6397_VIO18_CON0 0x0300 | ||
| 191 | #define MT6397_VIO18_CON1 0x0302 | ||
| 192 | #define MT6397_VIO18_CON2 0x0304 | ||
| 193 | #define MT6397_VIO18_CON3 0x0306 | ||
| 194 | #define MT6397_VIO18_CON4 0x0308 | ||
| 195 | #define MT6397_VIO18_CON5 0x030A | ||
| 196 | #define MT6397_VIO18_CON6 0x030C | ||
| 197 | #define MT6397_VIO18_CON7 0x030E | ||
| 198 | #define MT6397_VIO18_CON8 0x0310 | ||
| 199 | #define MT6397_VIO18_CON9 0x0312 | ||
| 200 | #define MT6397_VIO18_CON10 0x0314 | ||
| 201 | #define MT6397_VIO18_CON11 0x0316 | ||
| 202 | #define MT6397_VIO18_CON12 0x0318 | ||
| 203 | #define MT6397_VIO18_CON13 0x031A | ||
| 204 | #define MT6397_VIO18_CON14 0x031C | ||
| 205 | #define MT6397_VIO18_CON15 0x031E | ||
| 206 | #define MT6397_VIO18_CON16 0x0320 | ||
| 207 | #define MT6397_VIO18_CON17 0x0322 | ||
| 208 | #define MT6397_VIO18_CON18 0x0324 | ||
| 209 | #define MT6397_VPCA7_CON0 0x0326 | ||
| 210 | #define MT6397_VPCA7_CON1 0x0328 | ||
| 211 | #define MT6397_VPCA7_CON2 0x032A | ||
| 212 | #define MT6397_VPCA7_CON3 0x032C | ||
| 213 | #define MT6397_VPCA7_CON4 0x032E | ||
| 214 | #define MT6397_VPCA7_CON5 0x0330 | ||
| 215 | #define MT6397_VPCA7_CON6 0x0332 | ||
| 216 | #define MT6397_VPCA7_CON7 0x0334 | ||
| 217 | #define MT6397_VPCA7_CON8 0x0336 | ||
| 218 | #define MT6397_VPCA7_CON9 0x0338 | ||
| 219 | #define MT6397_VPCA7_CON10 0x033A | ||
| 220 | #define MT6397_VPCA7_CON11 0x033C | ||
| 221 | #define MT6397_VPCA7_CON12 0x033E | ||
| 222 | #define MT6397_VPCA7_CON13 0x0340 | ||
| 223 | #define MT6397_VPCA7_CON14 0x0342 | ||
| 224 | #define MT6397_VPCA7_CON15 0x0344 | ||
| 225 | #define MT6397_VPCA7_CON16 0x0346 | ||
| 226 | #define MT6397_VPCA7_CON17 0x0348 | ||
| 227 | #define MT6397_VPCA7_CON18 0x034A | ||
| 228 | #define MT6397_VSRMCA7_CON0 0x034C | ||
| 229 | #define MT6397_VSRMCA7_CON1 0x034E | ||
| 230 | #define MT6397_VSRMCA7_CON2 0x0350 | ||
| 231 | #define MT6397_VSRMCA7_CON3 0x0352 | ||
| 232 | #define MT6397_VSRMCA7_CON4 0x0354 | ||
| 233 | #define MT6397_VSRMCA7_CON5 0x0356 | ||
| 234 | #define MT6397_VSRMCA7_CON6 0x0358 | ||
| 235 | #define MT6397_VSRMCA7_CON7 0x035A | ||
| 236 | #define MT6397_VSRMCA7_CON8 0x035C | ||
| 237 | #define MT6397_VSRMCA7_CON9 0x035E | ||
| 238 | #define MT6397_VSRMCA7_CON10 0x0360 | ||
| 239 | #define MT6397_VSRMCA7_CON11 0x0362 | ||
| 240 | #define MT6397_VSRMCA7_CON12 0x0364 | ||
| 241 | #define MT6397_VSRMCA7_CON13 0x0366 | ||
| 242 | #define MT6397_VSRMCA7_CON14 0x0368 | ||
| 243 | #define MT6397_VSRMCA7_CON15 0x036A | ||
| 244 | #define MT6397_VSRMCA7_CON16 0x036C | ||
| 245 | #define MT6397_VSRMCA7_CON17 0x036E | ||
| 246 | #define MT6397_VSRMCA7_CON18 0x0370 | ||
| 247 | #define MT6397_VSRMCA7_CON19 0x0372 | ||
| 248 | #define MT6397_VSRMCA7_CON20 0x0374 | ||
| 249 | #define MT6397_VSRMCA7_CON21 0x0376 | ||
| 250 | #define MT6397_VDRM_CON0 0x0378 | ||
| 251 | #define MT6397_VDRM_CON1 0x037A | ||
| 252 | #define MT6397_VDRM_CON2 0x037C | ||
| 253 | #define MT6397_VDRM_CON3 0x037E | ||
| 254 | #define MT6397_VDRM_CON4 0x0380 | ||
| 255 | #define MT6397_VDRM_CON5 0x0382 | ||
| 256 | #define MT6397_VDRM_CON6 0x0384 | ||
| 257 | #define MT6397_VDRM_CON7 0x0386 | ||
| 258 | #define MT6397_VDRM_CON8 0x0388 | ||
| 259 | #define MT6397_VDRM_CON9 0x038A | ||
| 260 | #define MT6397_VDRM_CON10 0x038C | ||
| 261 | #define MT6397_VDRM_CON11 0x038E | ||
| 262 | #define MT6397_VDRM_CON12 0x0390 | ||
| 263 | #define MT6397_VDRM_CON13 0x0392 | ||
| 264 | #define MT6397_VDRM_CON14 0x0394 | ||
| 265 | #define MT6397_VDRM_CON15 0x0396 | ||
| 266 | #define MT6397_VDRM_CON16 0x0398 | ||
| 267 | #define MT6397_VDRM_CON17 0x039A | ||
| 268 | #define MT6397_VDRM_CON18 0x039C | ||
| 269 | #define MT6397_BUCK_K_CON0 0x039E | ||
| 270 | #define MT6397_BUCK_K_CON1 0x03A0 | ||
| 271 | #define MT6397_ANALDO_CON0 0x0400 | ||
| 272 | #define MT6397_ANALDO_CON1 0x0402 | ||
| 273 | #define MT6397_ANALDO_CON2 0x0404 | ||
| 274 | #define MT6397_ANALDO_CON3 0x0406 | ||
| 275 | #define MT6397_ANALDO_CON4 0x0408 | ||
| 276 | #define MT6397_ANALDO_CON5 0x040A | ||
| 277 | #define MT6397_ANALDO_CON6 0x040C | ||
| 278 | #define MT6397_ANALDO_CON7 0x040E | ||
| 279 | #define MT6397_DIGLDO_CON0 0x0410 | ||
| 280 | #define MT6397_DIGLDO_CON1 0x0412 | ||
| 281 | #define MT6397_DIGLDO_CON2 0x0414 | ||
| 282 | #define MT6397_DIGLDO_CON3 0x0416 | ||
| 283 | #define MT6397_DIGLDO_CON4 0x0418 | ||
| 284 | #define MT6397_DIGLDO_CON5 0x041A | ||
| 285 | #define MT6397_DIGLDO_CON6 0x041C | ||
| 286 | #define MT6397_DIGLDO_CON7 0x041E | ||
| 287 | #define MT6397_DIGLDO_CON8 0x0420 | ||
| 288 | #define MT6397_DIGLDO_CON9 0x0422 | ||
| 289 | #define MT6397_DIGLDO_CON10 0x0424 | ||
| 290 | #define MT6397_DIGLDO_CON11 0x0426 | ||
| 291 | #define MT6397_DIGLDO_CON12 0x0428 | ||
| 292 | #define MT6397_DIGLDO_CON13 0x042A | ||
| 293 | #define MT6397_DIGLDO_CON14 0x042C | ||
| 294 | #define MT6397_DIGLDO_CON15 0x042E | ||
| 295 | #define MT6397_DIGLDO_CON16 0x0430 | ||
| 296 | #define MT6397_DIGLDO_CON17 0x0432 | ||
| 297 | #define MT6397_DIGLDO_CON18 0x0434 | ||
| 298 | #define MT6397_DIGLDO_CON19 0x0436 | ||
| 299 | #define MT6397_DIGLDO_CON20 0x0438 | ||
| 300 | #define MT6397_DIGLDO_CON21 0x043A | ||
| 301 | #define MT6397_DIGLDO_CON22 0x043C | ||
| 302 | #define MT6397_DIGLDO_CON23 0x043E | ||
| 303 | #define MT6397_DIGLDO_CON24 0x0440 | ||
| 304 | #define MT6397_DIGLDO_CON25 0x0442 | ||
| 305 | #define MT6397_DIGLDO_CON26 0x0444 | ||
| 306 | #define MT6397_DIGLDO_CON27 0x0446 | ||
| 307 | #define MT6397_DIGLDO_CON28 0x0448 | ||
| 308 | #define MT6397_DIGLDO_CON29 0x044A | ||
| 309 | #define MT6397_DIGLDO_CON30 0x044C | ||
| 310 | #define MT6397_DIGLDO_CON31 0x044E | ||
| 311 | #define MT6397_DIGLDO_CON32 0x0450 | ||
| 312 | #define MT6397_DIGLDO_CON33 0x045A | ||
| 313 | #define MT6397_SPK_CON0 0x0600 | ||
| 314 | #define MT6397_SPK_CON1 0x0602 | ||
| 315 | #define MT6397_SPK_CON2 0x0604 | ||
| 316 | #define MT6397_SPK_CON3 0x0606 | ||
| 317 | #define MT6397_SPK_CON4 0x0608 | ||
| 318 | #define MT6397_SPK_CON5 0x060A | ||
| 319 | #define MT6397_SPK_CON6 0x060C | ||
| 320 | #define MT6397_SPK_CON7 0x060E | ||
| 321 | #define MT6397_SPK_CON8 0x0610 | ||
| 322 | #define MT6397_SPK_CON9 0x0612 | ||
| 323 | #define MT6397_SPK_CON10 0x0614 | ||
| 324 | #define MT6397_SPK_CON11 0x0616 | ||
| 325 | #define MT6397_AUDDAC_CON0 0x0700 | ||
| 326 | #define MT6397_AUDBUF_CFG0 0x0702 | ||
| 327 | #define MT6397_AUDBUF_CFG1 0x0704 | ||
| 328 | #define MT6397_AUDBUF_CFG2 0x0706 | ||
| 329 | #define MT6397_AUDBUF_CFG3 0x0708 | ||
| 330 | #define MT6397_AUDBUF_CFG4 0x070A | ||
| 331 | #define MT6397_IBIASDIST_CFG0 0x070C | ||
| 332 | #define MT6397_AUDACCDEPOP_CFG0 0x070E | ||
| 333 | #define MT6397_AUD_IV_CFG0 0x0710 | ||
| 334 | #define MT6397_AUDCLKGEN_CFG0 0x0712 | ||
| 335 | #define MT6397_AUDLDO_CFG0 0x0714 | ||
| 336 | #define MT6397_AUDLDO_CFG1 0x0716 | ||
| 337 | #define MT6397_AUDNVREGGLB_CFG0 0x0718 | ||
| 338 | #define MT6397_AUD_NCP0 0x071A | ||
| 339 | #define MT6397_AUDPREAMP_CON0 0x071C | ||
| 340 | #define MT6397_AUDADC_CON0 0x071E | ||
| 341 | #define MT6397_AUDADC_CON1 0x0720 | ||
| 342 | #define MT6397_AUDADC_CON2 0x0722 | ||
| 343 | #define MT6397_AUDADC_CON3 0x0724 | ||
| 344 | #define MT6397_AUDADC_CON4 0x0726 | ||
| 345 | #define MT6397_AUDADC_CON5 0x0728 | ||
| 346 | #define MT6397_AUDADC_CON6 0x072A | ||
| 347 | #define MT6397_AUDDIGMI_CON0 0x072C | ||
| 348 | #define MT6397_AUDLSBUF_CON0 0x072E | ||
| 349 | #define MT6397_AUDLSBUF_CON1 0x0730 | ||
| 350 | #define MT6397_AUDENCSPARE_CON0 0x0732 | ||
| 351 | #define MT6397_AUDENCCLKSQ_CON0 0x0734 | ||
| 352 | #define MT6397_AUDPREAMPGAIN_CON0 0x0736 | ||
| 353 | #define MT6397_ZCD_CON0 0x0738 | ||
| 354 | #define MT6397_ZCD_CON1 0x073A | ||
| 355 | #define MT6397_ZCD_CON2 0x073C | ||
| 356 | #define MT6397_ZCD_CON3 0x073E | ||
| 357 | #define MT6397_ZCD_CON4 0x0740 | ||
| 358 | #define MT6397_ZCD_CON5 0x0742 | ||
| 359 | #define MT6397_NCP_CLKDIV_CON0 0x0744 | ||
| 360 | #define MT6397_NCP_CLKDIV_CON1 0x0746 | ||
| 361 | |||
| 362 | #endif /* __MFD_MT6397_REGISTERS_H__ */ | ||
diff --git a/include/linux/mfd/palmas.h b/include/linux/mfd/palmas.h index ee7b1ce7a6f8..bb270bd03eed 100644 --- a/include/linux/mfd/palmas.h +++ b/include/linux/mfd/palmas.h | |||
| @@ -117,6 +117,7 @@ struct palmas_pmic_driver_data { | |||
| 117 | int ldo_begin; | 117 | int ldo_begin; |
| 118 | int ldo_end; | 118 | int ldo_end; |
| 119 | int max_reg; | 119 | int max_reg; |
| 120 | bool has_regen3; | ||
| 120 | struct palmas_regs_info *palmas_regs_info; | 121 | struct palmas_regs_info *palmas_regs_info; |
| 121 | struct of_regulator_match *palmas_matches; | 122 | struct of_regulator_match *palmas_matches; |
| 122 | struct palmas_sleep_requestor_info *sleep_req_info; | 123 | struct palmas_sleep_requestor_info *sleep_req_info; |
diff --git a/include/linux/mfd/rk808.h b/include/linux/mfd/rk808.h index fb09312d854b..441b6ee72691 100644 --- a/include/linux/mfd/rk808.h +++ b/include/linux/mfd/rk808.h | |||
| @@ -156,6 +156,9 @@ enum rk808_reg { | |||
| 156 | #define BUCK2_RATE_MASK (3 << 3) | 156 | #define BUCK2_RATE_MASK (3 << 3) |
| 157 | #define MASK_ALL 0xff | 157 | #define MASK_ALL 0xff |
| 158 | 158 | ||
| 159 | #define BUCK_UV_ACT_MASK 0x0f | ||
| 160 | #define BUCK_UV_ACT_DISABLE 0 | ||
| 161 | |||
| 159 | #define SWITCH2_EN BIT(6) | 162 | #define SWITCH2_EN BIT(6) |
| 160 | #define SWITCH1_EN BIT(5) | 163 | #define SWITCH1_EN BIT(5) |
| 161 | #define DEV_OFF_RST BIT(3) | 164 | #define DEV_OFF_RST BIT(3) |
diff --git a/include/linux/mfd/rt5033.h b/include/linux/mfd/rt5033.h index 010cff49a98e..6cff5cf458d2 100644 --- a/include/linux/mfd/rt5033.h +++ b/include/linux/mfd/rt5033.h | |||
| @@ -39,7 +39,7 @@ struct rt5033_battery { | |||
| 39 | struct i2c_client *client; | 39 | struct i2c_client *client; |
| 40 | struct rt5033_dev *rt5033; | 40 | struct rt5033_dev *rt5033; |
| 41 | struct regmap *regmap; | 41 | struct regmap *regmap; |
| 42 | struct power_supply psy; | 42 | struct power_supply *psy; |
| 43 | }; | 43 | }; |
| 44 | 44 | ||
| 45 | /* RT5033 charger platform data */ | 45 | /* RT5033 charger platform data */ |
diff --git a/include/linux/mfd/rtsx_pci.h b/include/linux/mfd/rtsx_pci.h index 0c12628e91c6..ff843e7ca23d 100644 --- a/include/linux/mfd/rtsx_pci.h +++ b/include/linux/mfd/rtsx_pci.h | |||
| @@ -28,74 +28,72 @@ | |||
| 28 | 28 | ||
| 29 | #define MAX_RW_REG_CNT 1024 | 29 | #define MAX_RW_REG_CNT 1024 |
| 30 | 30 | ||
| 31 | /* PCI Operation Register Address */ | ||
| 32 | #define RTSX_HCBAR 0x00 | 31 | #define RTSX_HCBAR 0x00 |
| 33 | #define RTSX_HCBCTLR 0x04 | 32 | #define RTSX_HCBCTLR 0x04 |
| 33 | #define STOP_CMD (0x01 << 28) | ||
| 34 | #define READ_REG_CMD 0 | ||
| 35 | #define WRITE_REG_CMD 1 | ||
| 36 | #define CHECK_REG_CMD 2 | ||
| 37 | |||
| 34 | #define RTSX_HDBAR 0x08 | 38 | #define RTSX_HDBAR 0x08 |
| 39 | #define SG_INT 0x04 | ||
| 40 | #define SG_END 0x02 | ||
| 41 | #define SG_VALID 0x01 | ||
| 42 | #define SG_NO_OP 0x00 | ||
| 43 | #define SG_TRANS_DATA (0x02 << 4) | ||
| 44 | #define SG_LINK_DESC (0x03 << 4) | ||
| 35 | #define RTSX_HDBCTLR 0x0C | 45 | #define RTSX_HDBCTLR 0x0C |
| 46 | #define SDMA_MODE 0x00 | ||
| 47 | #define ADMA_MODE (0x02 << 26) | ||
| 48 | #define STOP_DMA (0x01 << 28) | ||
| 49 | #define TRIG_DMA (0x01 << 31) | ||
| 50 | |||
| 36 | #define RTSX_HAIMR 0x10 | 51 | #define RTSX_HAIMR 0x10 |
| 37 | #define RTSX_BIPR 0x14 | 52 | #define HAIMR_TRANS_START (0x01 << 31) |
| 38 | #define RTSX_BIER 0x18 | 53 | #define HAIMR_READ 0x00 |
| 54 | #define HAIMR_WRITE (0x01 << 30) | ||
| 55 | #define HAIMR_READ_START (HAIMR_TRANS_START | HAIMR_READ) | ||
| 56 | #define HAIMR_WRITE_START (HAIMR_TRANS_START | HAIMR_WRITE) | ||
| 57 | #define HAIMR_TRANS_END (HAIMR_TRANS_START) | ||
| 39 | 58 | ||
| 40 | /* Host command buffer control register */ | 59 | #define RTSX_BIPR 0x14 |
| 41 | #define STOP_CMD (0x01 << 28) | 60 | #define CMD_DONE_INT (1 << 31) |
| 42 | 61 | #define DATA_DONE_INT (1 << 30) | |
| 43 | /* Host data buffer control register */ | 62 | #define TRANS_OK_INT (1 << 29) |
| 44 | #define SDMA_MODE 0x00 | 63 | #define TRANS_FAIL_INT (1 << 28) |
| 45 | #define ADMA_MODE (0x02 << 26) | 64 | #define XD_INT (1 << 27) |
| 46 | #define STOP_DMA (0x01 << 28) | 65 | #define MS_INT (1 << 26) |
| 47 | #define TRIG_DMA (0x01 << 31) | 66 | #define SD_INT (1 << 25) |
| 48 | 67 | #define GPIO0_INT (1 << 24) | |
| 49 | /* Host access internal memory register */ | 68 | #define OC_INT (1 << 23) |
| 50 | #define HAIMR_TRANS_START (0x01 << 31) | 69 | #define SD_WRITE_PROTECT (1 << 19) |
| 51 | #define HAIMR_READ 0x00 | 70 | #define XD_EXIST (1 << 18) |
| 52 | #define HAIMR_WRITE (0x01 << 30) | 71 | #define MS_EXIST (1 << 17) |
| 53 | #define HAIMR_READ_START (HAIMR_TRANS_START | HAIMR_READ) | 72 | #define SD_EXIST (1 << 16) |
| 54 | #define HAIMR_WRITE_START (HAIMR_TRANS_START | HAIMR_WRITE) | 73 | #define DELINK_INT GPIO0_INT |
| 55 | #define HAIMR_TRANS_END (HAIMR_TRANS_START) | 74 | #define MS_OC_INT (1 << 23) |
| 56 | 75 | #define SD_OC_INT (1 << 22) | |
| 57 | /* Bus interrupt pending register */ | ||
| 58 | #define CMD_DONE_INT (1 << 31) | ||
| 59 | #define DATA_DONE_INT (1 << 30) | ||
| 60 | #define TRANS_OK_INT (1 << 29) | ||
| 61 | #define TRANS_FAIL_INT (1 << 28) | ||
| 62 | #define XD_INT (1 << 27) | ||
| 63 | #define MS_INT (1 << 26) | ||
| 64 | #define SD_INT (1 << 25) | ||
| 65 | #define GPIO0_INT (1 << 24) | ||
| 66 | #define OC_INT (1 << 23) | ||
| 67 | #define SD_WRITE_PROTECT (1 << 19) | ||
| 68 | #define XD_EXIST (1 << 18) | ||
| 69 | #define MS_EXIST (1 << 17) | ||
| 70 | #define SD_EXIST (1 << 16) | ||
| 71 | #define DELINK_INT GPIO0_INT | ||
| 72 | #define MS_OC_INT (1 << 23) | ||
| 73 | #define SD_OC_INT (1 << 22) | ||
| 74 | 76 | ||
| 75 | #define CARD_INT (XD_INT | MS_INT | SD_INT) | 77 | #define CARD_INT (XD_INT | MS_INT | SD_INT) |
| 76 | #define NEED_COMPLETE_INT (DATA_DONE_INT | TRANS_OK_INT | TRANS_FAIL_INT) | 78 | #define NEED_COMPLETE_INT (DATA_DONE_INT | TRANS_OK_INT | TRANS_FAIL_INT) |
| 77 | #define RTSX_INT (CMD_DONE_INT | NEED_COMPLETE_INT | \ | 79 | #define RTSX_INT (CMD_DONE_INT | NEED_COMPLETE_INT | \ |
| 78 | CARD_INT | GPIO0_INT | OC_INT) | 80 | CARD_INT | GPIO0_INT | OC_INT) |
| 79 | |||
| 80 | #define CARD_EXIST (XD_EXIST | MS_EXIST | SD_EXIST) | 81 | #define CARD_EXIST (XD_EXIST | MS_EXIST | SD_EXIST) |
| 81 | 82 | ||
| 82 | /* Bus interrupt enable register */ | 83 | #define RTSX_BIER 0x18 |
| 83 | #define CMD_DONE_INT_EN (1 << 31) | 84 | #define CMD_DONE_INT_EN (1 << 31) |
| 84 | #define DATA_DONE_INT_EN (1 << 30) | 85 | #define DATA_DONE_INT_EN (1 << 30) |
| 85 | #define TRANS_OK_INT_EN (1 << 29) | 86 | #define TRANS_OK_INT_EN (1 << 29) |
| 86 | #define TRANS_FAIL_INT_EN (1 << 28) | 87 | #define TRANS_FAIL_INT_EN (1 << 28) |
| 87 | #define XD_INT_EN (1 << 27) | 88 | #define XD_INT_EN (1 << 27) |
| 88 | #define MS_INT_EN (1 << 26) | 89 | #define MS_INT_EN (1 << 26) |
| 89 | #define SD_INT_EN (1 << 25) | 90 | #define SD_INT_EN (1 << 25) |
| 90 | #define GPIO0_INT_EN (1 << 24) | 91 | #define GPIO0_INT_EN (1 << 24) |
| 91 | #define OC_INT_EN (1 << 23) | 92 | #define OC_INT_EN (1 << 23) |
| 92 | #define DELINK_INT_EN GPIO0_INT_EN | 93 | #define DELINK_INT_EN GPIO0_INT_EN |
| 93 | #define MS_OC_INT_EN (1 << 23) | 94 | #define MS_OC_INT_EN (1 << 23) |
| 94 | #define SD_OC_INT_EN (1 << 22) | 95 | #define SD_OC_INT_EN (1 << 22) |
| 95 | 96 | ||
| 96 | #define READ_REG_CMD 0 | ||
| 97 | #define WRITE_REG_CMD 1 | ||
| 98 | #define CHECK_REG_CMD 2 | ||
| 99 | 97 | ||
| 100 | /* | 98 | /* |
| 101 | * macros for easy use | 99 | * macros for easy use |
| @@ -125,423 +123,68 @@ | |||
| 125 | #define rtsx_pci_write_config_dword(pcr, where, val) \ | 123 | #define rtsx_pci_write_config_dword(pcr, where, val) \ |
| 126 | pci_write_config_dword((pcr)->pci, where, val) | 124 | pci_write_config_dword((pcr)->pci, where, val) |
| 127 | 125 | ||
| 128 | #define STATE_TRANS_NONE 0 | 126 | #define STATE_TRANS_NONE 0 |
| 129 | #define STATE_TRANS_CMD 1 | 127 | #define STATE_TRANS_CMD 1 |
| 130 | #define STATE_TRANS_BUF 2 | 128 | #define STATE_TRANS_BUF 2 |
| 131 | #define STATE_TRANS_SG 3 | 129 | #define STATE_TRANS_SG 3 |
| 132 | |||
| 133 | #define TRANS_NOT_READY 0 | ||
| 134 | #define TRANS_RESULT_OK 1 | ||
| 135 | #define TRANS_RESULT_FAIL 2 | ||
| 136 | #define TRANS_NO_DEVICE 3 | ||
| 137 | |||
| 138 | #define RTSX_RESV_BUF_LEN 4096 | ||
| 139 | #define HOST_CMDS_BUF_LEN 1024 | ||
| 140 | #define HOST_SG_TBL_BUF_LEN (RTSX_RESV_BUF_LEN - HOST_CMDS_BUF_LEN) | ||
| 141 | #define HOST_SG_TBL_ITEMS (HOST_SG_TBL_BUF_LEN / 8) | ||
| 142 | #define MAX_SG_ITEM_LEN 0x80000 | ||
| 143 | |||
| 144 | #define HOST_TO_DEVICE 0 | ||
| 145 | #define DEVICE_TO_HOST 1 | ||
| 146 | |||
| 147 | #define RTSX_PHASE_MAX 32 | ||
| 148 | #define RX_TUNING_CNT 3 | ||
| 149 | |||
| 150 | /* SG descriptor */ | ||
| 151 | #define SG_INT 0x04 | ||
| 152 | #define SG_END 0x02 | ||
| 153 | #define SG_VALID 0x01 | ||
| 154 | |||
| 155 | #define SG_NO_OP 0x00 | ||
| 156 | #define SG_TRANS_DATA (0x02 << 4) | ||
| 157 | #define SG_LINK_DESC (0x03 << 4) | ||
| 158 | |||
| 159 | /* Output voltage */ | ||
| 160 | #define OUTPUT_3V3 0 | ||
| 161 | #define OUTPUT_1V8 1 | ||
| 162 | |||
| 163 | /* Card Clock Enable Register */ | ||
| 164 | #define SD_CLK_EN 0x04 | ||
| 165 | #define MS_CLK_EN 0x08 | ||
| 166 | |||
| 167 | /* Card Select Register */ | ||
| 168 | #define SD_MOD_SEL 2 | ||
| 169 | #define MS_MOD_SEL 3 | ||
| 170 | |||
| 171 | /* Card Output Enable Register */ | ||
| 172 | #define SD_OUTPUT_EN 0x04 | ||
| 173 | #define MS_OUTPUT_EN 0x08 | ||
| 174 | |||
| 175 | /* CARD_SHARE_MODE */ | ||
| 176 | #define CARD_SHARE_MASK 0x0F | ||
| 177 | #define CARD_SHARE_MULTI_LUN 0x00 | ||
| 178 | #define CARD_SHARE_NORMAL 0x00 | ||
| 179 | #define CARD_SHARE_48_SD 0x04 | ||
| 180 | #define CARD_SHARE_48_MS 0x08 | ||
| 181 | /* CARD_SHARE_MODE for barossa */ | ||
| 182 | #define CARD_SHARE_BAROSSA_SD 0x01 | ||
| 183 | #define CARD_SHARE_BAROSSA_MS 0x02 | ||
| 184 | |||
| 185 | /* CARD_DRIVE_SEL */ | ||
| 186 | #define MS_DRIVE_8mA (0x01 << 6) | ||
| 187 | #define MMC_DRIVE_8mA (0x01 << 4) | ||
| 188 | #define XD_DRIVE_8mA (0x01 << 2) | ||
| 189 | #define GPIO_DRIVE_8mA 0x01 | ||
| 190 | #define RTS5209_CARD_DRIVE_DEFAULT (MS_DRIVE_8mA | MMC_DRIVE_8mA |\ | ||
| 191 | XD_DRIVE_8mA | GPIO_DRIVE_8mA) | ||
| 192 | #define RTL8411_CARD_DRIVE_DEFAULT (MS_DRIVE_8mA | MMC_DRIVE_8mA |\ | ||
| 193 | XD_DRIVE_8mA) | ||
| 194 | #define RTSX_CARD_DRIVE_DEFAULT (MS_DRIVE_8mA | GPIO_DRIVE_8mA) | ||
| 195 | 130 | ||
| 196 | /* SD30_DRIVE_SEL */ | 131 | #define TRANS_NOT_READY 0 |
| 197 | #define DRIVER_TYPE_A 0x05 | 132 | #define TRANS_RESULT_OK 1 |
| 198 | #define DRIVER_TYPE_B 0x03 | 133 | #define TRANS_RESULT_FAIL 2 |
| 199 | #define DRIVER_TYPE_C 0x02 | 134 | #define TRANS_NO_DEVICE 3 |
| 200 | #define DRIVER_TYPE_D 0x01 | ||
| 201 | #define CFG_DRIVER_TYPE_A 0x02 | ||
| 202 | #define CFG_DRIVER_TYPE_B 0x03 | ||
| 203 | #define CFG_DRIVER_TYPE_C 0x01 | ||
| 204 | #define CFG_DRIVER_TYPE_D 0x00 | ||
| 205 | |||
| 206 | /* FPDCTL */ | ||
| 207 | #define SSC_POWER_DOWN 0x01 | ||
| 208 | #define SD_OC_POWER_DOWN 0x02 | ||
| 209 | #define ALL_POWER_DOWN 0x07 | ||
| 210 | #define OC_POWER_DOWN 0x06 | ||
| 211 | |||
| 212 | /* CLK_CTL */ | ||
| 213 | #define CHANGE_CLK 0x01 | ||
| 214 | |||
| 215 | /* LDO_CTL */ | ||
| 216 | #define BPP_ASIC_1V7 0x00 | ||
| 217 | #define BPP_ASIC_1V8 0x01 | ||
| 218 | #define BPP_ASIC_1V9 0x02 | ||
| 219 | #define BPP_ASIC_2V0 0x03 | ||
| 220 | #define BPP_ASIC_2V7 0x04 | ||
| 221 | #define BPP_ASIC_2V8 0x05 | ||
| 222 | #define BPP_ASIC_3V2 0x06 | ||
| 223 | #define BPP_ASIC_3V3 0x07 | ||
| 224 | #define BPP_REG_TUNED18 0x07 | ||
| 225 | #define BPP_TUNED18_SHIFT_8402 5 | ||
| 226 | #define BPP_TUNED18_SHIFT_8411 4 | ||
| 227 | #define BPP_PAD_MASK 0x04 | ||
| 228 | #define BPP_PAD_3V3 0x04 | ||
| 229 | #define BPP_PAD_1V8 0x00 | ||
| 230 | #define BPP_LDO_POWB 0x03 | ||
| 231 | #define BPP_LDO_ON 0x00 | ||
| 232 | #define BPP_LDO_SUSPEND 0x02 | ||
| 233 | #define BPP_LDO_OFF 0x03 | ||
| 234 | |||
| 235 | /* CD_PAD_CTL */ | ||
| 236 | #define CD_DISABLE_MASK 0x07 | ||
| 237 | #define MS_CD_DISABLE 0x04 | ||
| 238 | #define SD_CD_DISABLE 0x02 | ||
| 239 | #define XD_CD_DISABLE 0x01 | ||
| 240 | #define CD_DISABLE 0x07 | ||
| 241 | #define CD_ENABLE 0x00 | ||
| 242 | #define MS_CD_EN_ONLY 0x03 | ||
| 243 | #define SD_CD_EN_ONLY 0x05 | ||
| 244 | #define XD_CD_EN_ONLY 0x06 | ||
| 245 | #define FORCE_CD_LOW_MASK 0x38 | ||
| 246 | #define FORCE_CD_XD_LOW 0x08 | ||
| 247 | #define FORCE_CD_SD_LOW 0x10 | ||
| 248 | #define FORCE_CD_MS_LOW 0x20 | ||
| 249 | #define CD_AUTO_DISABLE 0x40 | ||
| 250 | |||
| 251 | /* SD_STAT1 */ | ||
| 252 | #define SD_CRC7_ERR 0x80 | ||
| 253 | #define SD_CRC16_ERR 0x40 | ||
| 254 | #define SD_CRC_WRITE_ERR 0x20 | ||
| 255 | #define SD_CRC_WRITE_ERR_MASK 0x1C | ||
| 256 | #define GET_CRC_TIME_OUT 0x02 | ||
| 257 | #define SD_TUNING_COMPARE_ERR 0x01 | ||
| 258 | |||
| 259 | /* SD_STAT2 */ | ||
| 260 | #define SD_RSP_80CLK_TIMEOUT 0x01 | ||
| 261 | |||
| 262 | /* SD_BUS_STAT */ | ||
| 263 | #define SD_CLK_TOGGLE_EN 0x80 | ||
| 264 | #define SD_CLK_FORCE_STOP 0x40 | ||
| 265 | #define SD_DAT3_STATUS 0x10 | ||
| 266 | #define SD_DAT2_STATUS 0x08 | ||
| 267 | #define SD_DAT1_STATUS 0x04 | ||
| 268 | #define SD_DAT0_STATUS 0x02 | ||
| 269 | #define SD_CMD_STATUS 0x01 | ||
| 270 | |||
| 271 | /* SD_PAD_CTL */ | ||
| 272 | #define SD_IO_USING_1V8 0x80 | ||
| 273 | #define SD_IO_USING_3V3 0x7F | ||
| 274 | #define TYPE_A_DRIVING 0x00 | ||
| 275 | #define TYPE_B_DRIVING 0x01 | ||
| 276 | #define TYPE_C_DRIVING 0x02 | ||
| 277 | #define TYPE_D_DRIVING 0x03 | ||
| 278 | |||
| 279 | /* SD_SAMPLE_POINT_CTL */ | ||
| 280 | #define DDR_FIX_RX_DAT 0x00 | ||
| 281 | #define DDR_VAR_RX_DAT 0x80 | ||
| 282 | #define DDR_FIX_RX_DAT_EDGE 0x00 | ||
| 283 | #define DDR_FIX_RX_DAT_14_DELAY 0x40 | ||
| 284 | #define DDR_FIX_RX_CMD 0x00 | ||
| 285 | #define DDR_VAR_RX_CMD 0x20 | ||
| 286 | #define DDR_FIX_RX_CMD_POS_EDGE 0x00 | ||
| 287 | #define DDR_FIX_RX_CMD_14_DELAY 0x10 | ||
| 288 | #define SD20_RX_POS_EDGE 0x00 | ||
| 289 | #define SD20_RX_14_DELAY 0x08 | ||
| 290 | #define SD20_RX_SEL_MASK 0x08 | ||
| 291 | 135 | ||
| 292 | /* SD_PUSH_POINT_CTL */ | 136 | #define RTSX_RESV_BUF_LEN 4096 |
| 293 | #define DDR_FIX_TX_CMD_DAT 0x00 | 137 | #define HOST_CMDS_BUF_LEN 1024 |
| 294 | #define DDR_VAR_TX_CMD_DAT 0x80 | 138 | #define HOST_SG_TBL_BUF_LEN (RTSX_RESV_BUF_LEN - HOST_CMDS_BUF_LEN) |
| 295 | #define DDR_FIX_TX_DAT_14_TSU 0x00 | 139 | #define HOST_SG_TBL_ITEMS (HOST_SG_TBL_BUF_LEN / 8) |
| 296 | #define DDR_FIX_TX_DAT_12_TSU 0x40 | 140 | #define MAX_SG_ITEM_LEN 0x80000 |
| 297 | #define DDR_FIX_TX_CMD_NEG_EDGE 0x00 | 141 | #define HOST_TO_DEVICE 0 |
| 298 | #define DDR_FIX_TX_CMD_14_AHEAD 0x20 | 142 | #define DEVICE_TO_HOST 1 |
| 299 | #define SD20_TX_NEG_EDGE 0x00 | ||
| 300 | #define SD20_TX_14_AHEAD 0x10 | ||
| 301 | #define SD20_TX_SEL_MASK 0x10 | ||
| 302 | #define DDR_VAR_SDCLK_POL_SWAP 0x01 | ||
| 303 | |||
| 304 | /* SD_TRANSFER */ | ||
| 305 | #define SD_TRANSFER_START 0x80 | ||
| 306 | #define SD_TRANSFER_END 0x40 | ||
| 307 | #define SD_STAT_IDLE 0x20 | ||
| 308 | #define SD_TRANSFER_ERR 0x10 | ||
| 309 | /* SD Transfer Mode definition */ | ||
| 310 | #define SD_TM_NORMAL_WRITE 0x00 | ||
| 311 | #define SD_TM_AUTO_WRITE_3 0x01 | ||
| 312 | #define SD_TM_AUTO_WRITE_4 0x02 | ||
| 313 | #define SD_TM_AUTO_READ_3 0x05 | ||
| 314 | #define SD_TM_AUTO_READ_4 0x06 | ||
| 315 | #define SD_TM_CMD_RSP 0x08 | ||
| 316 | #define SD_TM_AUTO_WRITE_1 0x09 | ||
| 317 | #define SD_TM_AUTO_WRITE_2 0x0A | ||
| 318 | #define SD_TM_NORMAL_READ 0x0C | ||
| 319 | #define SD_TM_AUTO_READ_1 0x0D | ||
| 320 | #define SD_TM_AUTO_READ_2 0x0E | ||
| 321 | #define SD_TM_AUTO_TUNING 0x0F | ||
| 322 | |||
| 323 | /* SD_VPTX_CTL / SD_VPRX_CTL */ | ||
| 324 | #define PHASE_CHANGE 0x80 | ||
| 325 | #define PHASE_NOT_RESET 0x40 | ||
| 326 | |||
| 327 | /* SD_DCMPS_TX_CTL / SD_DCMPS_RX_CTL */ | ||
| 328 | #define DCMPS_CHANGE 0x80 | ||
| 329 | #define DCMPS_CHANGE_DONE 0x40 | ||
| 330 | #define DCMPS_ERROR 0x20 | ||
| 331 | #define DCMPS_CURRENT_PHASE 0x1F | ||
| 332 | |||
| 333 | /* SD Configure 1 Register */ | ||
| 334 | #define SD_CLK_DIVIDE_0 0x00 | ||
| 335 | #define SD_CLK_DIVIDE_256 0xC0 | ||
| 336 | #define SD_CLK_DIVIDE_128 0x80 | ||
| 337 | #define SD_BUS_WIDTH_1BIT 0x00 | ||
| 338 | #define SD_BUS_WIDTH_4BIT 0x01 | ||
| 339 | #define SD_BUS_WIDTH_8BIT 0x02 | ||
| 340 | #define SD_ASYNC_FIFO_NOT_RST 0x10 | ||
| 341 | #define SD_20_MODE 0x00 | ||
| 342 | #define SD_DDR_MODE 0x04 | ||
| 343 | #define SD_30_MODE 0x08 | ||
| 344 | |||
| 345 | #define SD_CLK_DIVIDE_MASK 0xC0 | ||
| 346 | |||
| 347 | /* SD_CMD_STATE */ | ||
| 348 | #define SD_CMD_IDLE 0x80 | ||
| 349 | |||
| 350 | /* SD_DATA_STATE */ | ||
| 351 | #define SD_DATA_IDLE 0x80 | ||
| 352 | |||
| 353 | /* DCM_DRP_CTL */ | ||
| 354 | #define DCM_RESET 0x08 | ||
| 355 | #define DCM_LOCKED 0x04 | ||
| 356 | #define DCM_208M 0x00 | ||
| 357 | #define DCM_TX 0x01 | ||
| 358 | #define DCM_RX 0x02 | ||
| 359 | |||
| 360 | /* DCM_DRP_TRIG */ | ||
| 361 | #define DRP_START 0x80 | ||
| 362 | #define DRP_DONE 0x40 | ||
| 363 | |||
| 364 | /* DCM_DRP_CFG */ | ||
| 365 | #define DRP_WRITE 0x80 | ||
| 366 | #define DRP_READ 0x00 | ||
| 367 | #define DCM_WRITE_ADDRESS_50 0x50 | ||
| 368 | #define DCM_WRITE_ADDRESS_51 0x51 | ||
| 369 | #define DCM_READ_ADDRESS_00 0x00 | ||
| 370 | #define DCM_READ_ADDRESS_51 0x51 | ||
| 371 | |||
| 372 | /* IRQSTAT0 */ | ||
| 373 | #define DMA_DONE_INT 0x80 | ||
| 374 | #define SUSPEND_INT 0x40 | ||
| 375 | #define LINK_RDY_INT 0x20 | ||
| 376 | #define LINK_DOWN_INT 0x10 | ||
| 377 | |||
| 378 | /* DMACTL */ | ||
| 379 | #define DMA_RST 0x80 | ||
| 380 | #define DMA_BUSY 0x04 | ||
| 381 | #define DMA_DIR_TO_CARD 0x00 | ||
| 382 | #define DMA_DIR_FROM_CARD 0x02 | ||
| 383 | #define DMA_EN 0x01 | ||
| 384 | #define DMA_128 (0 << 4) | ||
| 385 | #define DMA_256 (1 << 4) | ||
| 386 | #define DMA_512 (2 << 4) | ||
| 387 | #define DMA_1024 (3 << 4) | ||
| 388 | #define DMA_PACK_SIZE_MASK 0x30 | ||
| 389 | |||
| 390 | /* SSC_CTL1 */ | ||
| 391 | #define SSC_RSTB 0x80 | ||
| 392 | #define SSC_8X_EN 0x40 | ||
| 393 | #define SSC_FIX_FRAC 0x20 | ||
| 394 | #define SSC_SEL_1M 0x00 | ||
| 395 | #define SSC_SEL_2M 0x08 | ||
| 396 | #define SSC_SEL_4M 0x10 | ||
| 397 | #define SSC_SEL_8M 0x18 | ||
| 398 | |||
| 399 | /* SSC_CTL2 */ | ||
| 400 | #define SSC_DEPTH_MASK 0x07 | ||
| 401 | #define SSC_DEPTH_DISALBE 0x00 | ||
| 402 | #define SSC_DEPTH_4M 0x01 | ||
| 403 | #define SSC_DEPTH_2M 0x02 | ||
| 404 | #define SSC_DEPTH_1M 0x03 | ||
| 405 | #define SSC_DEPTH_500K 0x04 | ||
| 406 | #define SSC_DEPTH_250K 0x05 | ||
| 407 | |||
| 408 | /* System Clock Control Register */ | ||
| 409 | #define CLK_LOW_FREQ 0x01 | ||
| 410 | |||
| 411 | /* System Clock Divider Register */ | ||
| 412 | #define CLK_DIV_1 0x01 | ||
| 413 | #define CLK_DIV_2 0x02 | ||
| 414 | #define CLK_DIV_4 0x03 | ||
| 415 | #define CLK_DIV_8 0x04 | ||
| 416 | |||
| 417 | /* MS_CFG */ | ||
| 418 | #define SAMPLE_TIME_RISING 0x00 | ||
| 419 | #define SAMPLE_TIME_FALLING 0x80 | ||
| 420 | #define PUSH_TIME_DEFAULT 0x00 | ||
| 421 | #define PUSH_TIME_ODD 0x40 | ||
| 422 | #define NO_EXTEND_TOGGLE 0x00 | ||
| 423 | #define EXTEND_TOGGLE_CHK 0x20 | ||
| 424 | #define MS_BUS_WIDTH_1 0x00 | ||
| 425 | #define MS_BUS_WIDTH_4 0x10 | ||
| 426 | #define MS_BUS_WIDTH_8 0x18 | ||
| 427 | #define MS_2K_SECTOR_MODE 0x04 | ||
| 428 | #define MS_512_SECTOR_MODE 0x00 | ||
| 429 | #define MS_TOGGLE_TIMEOUT_EN 0x00 | ||
| 430 | #define MS_TOGGLE_TIMEOUT_DISEN 0x01 | ||
| 431 | #define MS_NO_CHECK_INT 0x02 | ||
| 432 | 143 | ||
| 433 | /* MS_TRANS_CFG */ | 144 | #define OUTPUT_3V3 0 |
| 434 | #define WAIT_INT 0x80 | 145 | #define OUTPUT_1V8 1 |
| 435 | #define NO_WAIT_INT 0x00 | 146 | |
| 436 | #define NO_AUTO_READ_INT_REG 0x00 | 147 | #define RTSX_PHASE_MAX 32 |
| 437 | #define AUTO_READ_INT_REG 0x40 | 148 | #define RX_TUNING_CNT 3 |
| 438 | #define MS_CRC16_ERR 0x20 | ||
| 439 | #define MS_RDY_TIMEOUT 0x10 | ||
| 440 | #define MS_INT_CMDNK 0x08 | ||
| 441 | #define MS_INT_BREQ 0x04 | ||
| 442 | #define MS_INT_ERR 0x02 | ||
| 443 | #define MS_INT_CED 0x01 | ||
| 444 | |||
| 445 | /* MS_TRANSFER */ | ||
| 446 | #define MS_TRANSFER_START 0x80 | ||
| 447 | #define MS_TRANSFER_END 0x40 | ||
| 448 | #define MS_TRANSFER_ERR 0x20 | ||
| 449 | #define MS_BS_STATE 0x10 | ||
| 450 | #define MS_TM_READ_BYTES 0x00 | ||
| 451 | #define MS_TM_NORMAL_READ 0x01 | ||
| 452 | #define MS_TM_WRITE_BYTES 0x04 | ||
| 453 | #define MS_TM_NORMAL_WRITE 0x05 | ||
| 454 | #define MS_TM_AUTO_READ 0x08 | ||
| 455 | #define MS_TM_AUTO_WRITE 0x0C | ||
| 456 | |||
| 457 | /* SD Configure 2 Register */ | ||
| 458 | #define SD_CALCULATE_CRC7 0x00 | ||
| 459 | #define SD_NO_CALCULATE_CRC7 0x80 | ||
| 460 | #define SD_CHECK_CRC16 0x00 | ||
| 461 | #define SD_NO_CHECK_CRC16 0x40 | ||
| 462 | #define SD_NO_CHECK_WAIT_CRC_TO 0x20 | ||
| 463 | #define SD_WAIT_BUSY_END 0x08 | ||
| 464 | #define SD_NO_WAIT_BUSY_END 0x00 | ||
| 465 | #define SD_CHECK_CRC7 0x00 | ||
| 466 | #define SD_NO_CHECK_CRC7 0x04 | ||
| 467 | #define SD_RSP_LEN_0 0x00 | ||
| 468 | #define SD_RSP_LEN_6 0x01 | ||
| 469 | #define SD_RSP_LEN_17 0x02 | ||
| 470 | /* SD/MMC Response Type Definition */ | ||
| 471 | #define SD_RSP_TYPE_R0 0x04 | ||
| 472 | #define SD_RSP_TYPE_R1 0x01 | ||
| 473 | #define SD_RSP_TYPE_R1b 0x09 | ||
| 474 | #define SD_RSP_TYPE_R2 0x02 | ||
| 475 | #define SD_RSP_TYPE_R3 0x05 | ||
| 476 | #define SD_RSP_TYPE_R4 0x05 | ||
| 477 | #define SD_RSP_TYPE_R5 0x01 | ||
| 478 | #define SD_RSP_TYPE_R6 0x01 | ||
| 479 | #define SD_RSP_TYPE_R7 0x01 | ||
| 480 | |||
| 481 | /* SD_CONFIGURE3 */ | ||
| 482 | #define SD_RSP_80CLK_TIMEOUT_EN 0x01 | ||
| 483 | |||
| 484 | /* Card Transfer Reset Register */ | ||
| 485 | #define SPI_STOP 0x01 | ||
| 486 | #define XD_STOP 0x02 | ||
| 487 | #define SD_STOP 0x04 | ||
| 488 | #define MS_STOP 0x08 | ||
| 489 | #define SPI_CLR_ERR 0x10 | ||
| 490 | #define XD_CLR_ERR 0x20 | ||
| 491 | #define SD_CLR_ERR 0x40 | ||
| 492 | #define MS_CLR_ERR 0x80 | ||
| 493 | |||
| 494 | /* Card Data Source Register */ | ||
| 495 | #define PINGPONG_BUFFER 0x01 | ||
| 496 | #define RING_BUFFER 0x00 | ||
| 497 | |||
| 498 | /* Card Power Control Register */ | ||
| 499 | #define PMOS_STRG_MASK 0x10 | ||
| 500 | #define PMOS_STRG_800mA 0x10 | ||
| 501 | #define PMOS_STRG_400mA 0x00 | ||
| 502 | #define SD_POWER_OFF 0x03 | ||
| 503 | #define SD_PARTIAL_POWER_ON 0x01 | ||
| 504 | #define SD_POWER_ON 0x00 | ||
| 505 | #define SD_POWER_MASK 0x03 | ||
| 506 | #define MS_POWER_OFF 0x0C | ||
| 507 | #define MS_PARTIAL_POWER_ON 0x04 | ||
| 508 | #define MS_POWER_ON 0x00 | ||
| 509 | #define MS_POWER_MASK 0x0C | ||
| 510 | #define BPP_POWER_OFF 0x0F | ||
| 511 | #define BPP_POWER_5_PERCENT_ON 0x0E | ||
| 512 | #define BPP_POWER_10_PERCENT_ON 0x0C | ||
| 513 | #define BPP_POWER_15_PERCENT_ON 0x08 | ||
| 514 | #define BPP_POWER_ON 0x00 | ||
| 515 | #define BPP_POWER_MASK 0x0F | ||
| 516 | #define SD_VCC_PARTIAL_POWER_ON 0x02 | ||
| 517 | #define SD_VCC_POWER_ON 0x00 | ||
| 518 | |||
| 519 | /* PWR_GATE_CTRL */ | ||
| 520 | #define PWR_GATE_EN 0x01 | ||
| 521 | #define LDO3318_PWR_MASK 0x06 | ||
| 522 | #define LDO_ON 0x00 | ||
| 523 | #define LDO_SUSPEND 0x04 | ||
| 524 | #define LDO_OFF 0x06 | ||
| 525 | |||
| 526 | /* CARD_CLK_SOURCE */ | ||
| 527 | #define CRC_FIX_CLK (0x00 << 0) | ||
| 528 | #define CRC_VAR_CLK0 (0x01 << 0) | ||
| 529 | #define CRC_VAR_CLK1 (0x02 << 0) | ||
| 530 | #define SD30_FIX_CLK (0x00 << 2) | ||
| 531 | #define SD30_VAR_CLK0 (0x01 << 2) | ||
| 532 | #define SD30_VAR_CLK1 (0x02 << 2) | ||
| 533 | #define SAMPLE_FIX_CLK (0x00 << 4) | ||
| 534 | #define SAMPLE_VAR_CLK0 (0x01 << 4) | ||
| 535 | #define SAMPLE_VAR_CLK1 (0x02 << 4) | ||
| 536 | |||
| 537 | /* HOST_SLEEP_STATE */ | ||
| 538 | #define HOST_ENTER_S1 1 | ||
| 539 | #define HOST_ENTER_S3 2 | ||
| 540 | 149 | ||
| 541 | #define MS_CFG 0xFD40 | 150 | #define MS_CFG 0xFD40 |
| 151 | #define SAMPLE_TIME_RISING 0x00 | ||
| 152 | #define SAMPLE_TIME_FALLING 0x80 | ||
| 153 | #define PUSH_TIME_DEFAULT 0x00 | ||
| 154 | #define PUSH_TIME_ODD 0x40 | ||
| 155 | #define NO_EXTEND_TOGGLE 0x00 | ||
| 156 | #define EXTEND_TOGGLE_CHK 0x20 | ||
| 157 | #define MS_BUS_WIDTH_1 0x00 | ||
| 158 | #define MS_BUS_WIDTH_4 0x10 | ||
| 159 | #define MS_BUS_WIDTH_8 0x18 | ||
| 160 | #define MS_2K_SECTOR_MODE 0x04 | ||
| 161 | #define MS_512_SECTOR_MODE 0x00 | ||
| 162 | #define MS_TOGGLE_TIMEOUT_EN 0x00 | ||
| 163 | #define MS_TOGGLE_TIMEOUT_DISEN 0x01 | ||
| 164 | #define MS_NO_CHECK_INT 0x02 | ||
| 542 | #define MS_TPC 0xFD41 | 165 | #define MS_TPC 0xFD41 |
| 543 | #define MS_TRANS_CFG 0xFD42 | 166 | #define MS_TRANS_CFG 0xFD42 |
| 167 | #define WAIT_INT 0x80 | ||
| 168 | #define NO_WAIT_INT 0x00 | ||
| 169 | #define NO_AUTO_READ_INT_REG 0x00 | ||
| 170 | #define AUTO_READ_INT_REG 0x40 | ||
| 171 | #define MS_CRC16_ERR 0x20 | ||
| 172 | #define MS_RDY_TIMEOUT 0x10 | ||
| 173 | #define MS_INT_CMDNK 0x08 | ||
| 174 | #define MS_INT_BREQ 0x04 | ||
| 175 | #define MS_INT_ERR 0x02 | ||
| 176 | #define MS_INT_CED 0x01 | ||
| 544 | #define MS_TRANSFER 0xFD43 | 177 | #define MS_TRANSFER 0xFD43 |
| 178 | #define MS_TRANSFER_START 0x80 | ||
| 179 | #define MS_TRANSFER_END 0x40 | ||
| 180 | #define MS_TRANSFER_ERR 0x20 | ||
| 181 | #define MS_BS_STATE 0x10 | ||
| 182 | #define MS_TM_READ_BYTES 0x00 | ||
| 183 | #define MS_TM_NORMAL_READ 0x01 | ||
| 184 | #define MS_TM_WRITE_BYTES 0x04 | ||
| 185 | #define MS_TM_NORMAL_WRITE 0x05 | ||
| 186 | #define MS_TM_AUTO_READ 0x08 | ||
| 187 | #define MS_TM_AUTO_WRITE 0x0C | ||
| 545 | #define MS_INT_REG 0xFD44 | 188 | #define MS_INT_REG 0xFD44 |
| 546 | #define MS_BYTE_CNT 0xFD45 | 189 | #define MS_BYTE_CNT 0xFD45 |
| 547 | #define MS_SECTOR_CNT_L 0xFD46 | 190 | #define MS_SECTOR_CNT_L 0xFD46 |
| @@ -549,14 +192,90 @@ | |||
| 549 | #define MS_DBUS_H 0xFD48 | 192 | #define MS_DBUS_H 0xFD48 |
| 550 | 193 | ||
| 551 | #define SD_CFG1 0xFDA0 | 194 | #define SD_CFG1 0xFDA0 |
| 195 | #define SD_CLK_DIVIDE_0 0x00 | ||
| 196 | #define SD_CLK_DIVIDE_256 0xC0 | ||
| 197 | #define SD_CLK_DIVIDE_128 0x80 | ||
| 198 | #define SD_BUS_WIDTH_1BIT 0x00 | ||
| 199 | #define SD_BUS_WIDTH_4BIT 0x01 | ||
| 200 | #define SD_BUS_WIDTH_8BIT 0x02 | ||
| 201 | #define SD_ASYNC_FIFO_NOT_RST 0x10 | ||
| 202 | #define SD_20_MODE 0x00 | ||
| 203 | #define SD_DDR_MODE 0x04 | ||
| 204 | #define SD_30_MODE 0x08 | ||
| 205 | #define SD_CLK_DIVIDE_MASK 0xC0 | ||
| 552 | #define SD_CFG2 0xFDA1 | 206 | #define SD_CFG2 0xFDA1 |
| 207 | #define SD_CALCULATE_CRC7 0x00 | ||
| 208 | #define SD_NO_CALCULATE_CRC7 0x80 | ||
| 209 | #define SD_CHECK_CRC16 0x00 | ||
| 210 | #define SD_NO_CHECK_CRC16 0x40 | ||
| 211 | #define SD_NO_CHECK_WAIT_CRC_TO 0x20 | ||
| 212 | #define SD_WAIT_BUSY_END 0x08 | ||
| 213 | #define SD_NO_WAIT_BUSY_END 0x00 | ||
| 214 | #define SD_CHECK_CRC7 0x00 | ||
| 215 | #define SD_NO_CHECK_CRC7 0x04 | ||
| 216 | #define SD_RSP_LEN_0 0x00 | ||
| 217 | #define SD_RSP_LEN_6 0x01 | ||
| 218 | #define SD_RSP_LEN_17 0x02 | ||
| 219 | #define SD_RSP_TYPE_R0 0x04 | ||
| 220 | #define SD_RSP_TYPE_R1 0x01 | ||
| 221 | #define SD_RSP_TYPE_R1b 0x09 | ||
| 222 | #define SD_RSP_TYPE_R2 0x02 | ||
| 223 | #define SD_RSP_TYPE_R3 0x05 | ||
| 224 | #define SD_RSP_TYPE_R4 0x05 | ||
| 225 | #define SD_RSP_TYPE_R5 0x01 | ||
| 226 | #define SD_RSP_TYPE_R6 0x01 | ||
| 227 | #define SD_RSP_TYPE_R7 0x01 | ||
| 553 | #define SD_CFG3 0xFDA2 | 228 | #define SD_CFG3 0xFDA2 |
| 229 | #define SD_RSP_80CLK_TIMEOUT_EN 0x01 | ||
| 230 | |||
| 554 | #define SD_STAT1 0xFDA3 | 231 | #define SD_STAT1 0xFDA3 |
| 232 | #define SD_CRC7_ERR 0x80 | ||
| 233 | #define SD_CRC16_ERR 0x40 | ||
| 234 | #define SD_CRC_WRITE_ERR 0x20 | ||
| 235 | #define SD_CRC_WRITE_ERR_MASK 0x1C | ||
| 236 | #define GET_CRC_TIME_OUT 0x02 | ||
| 237 | #define SD_TUNING_COMPARE_ERR 0x01 | ||
| 555 | #define SD_STAT2 0xFDA4 | 238 | #define SD_STAT2 0xFDA4 |
| 239 | #define SD_RSP_80CLK_TIMEOUT 0x01 | ||
| 240 | |||
| 556 | #define SD_BUS_STAT 0xFDA5 | 241 | #define SD_BUS_STAT 0xFDA5 |
| 242 | #define SD_CLK_TOGGLE_EN 0x80 | ||
| 243 | #define SD_CLK_FORCE_STOP 0x40 | ||
| 244 | #define SD_DAT3_STATUS 0x10 | ||
| 245 | #define SD_DAT2_STATUS 0x08 | ||
| 246 | #define SD_DAT1_STATUS 0x04 | ||
| 247 | #define SD_DAT0_STATUS 0x02 | ||
| 248 | #define SD_CMD_STATUS 0x01 | ||
| 557 | #define SD_PAD_CTL 0xFDA6 | 249 | #define SD_PAD_CTL 0xFDA6 |
| 250 | #define SD_IO_USING_1V8 0x80 | ||
| 251 | #define SD_IO_USING_3V3 0x7F | ||
| 252 | #define TYPE_A_DRIVING 0x00 | ||
| 253 | #define TYPE_B_DRIVING 0x01 | ||
| 254 | #define TYPE_C_DRIVING 0x02 | ||
| 255 | #define TYPE_D_DRIVING 0x03 | ||
| 558 | #define SD_SAMPLE_POINT_CTL 0xFDA7 | 256 | #define SD_SAMPLE_POINT_CTL 0xFDA7 |
| 257 | #define DDR_FIX_RX_DAT 0x00 | ||
| 258 | #define DDR_VAR_RX_DAT 0x80 | ||
| 259 | #define DDR_FIX_RX_DAT_EDGE 0x00 | ||
| 260 | #define DDR_FIX_RX_DAT_14_DELAY 0x40 | ||
| 261 | #define DDR_FIX_RX_CMD 0x00 | ||
| 262 | #define DDR_VAR_RX_CMD 0x20 | ||
| 263 | #define DDR_FIX_RX_CMD_POS_EDGE 0x00 | ||
| 264 | #define DDR_FIX_RX_CMD_14_DELAY 0x10 | ||
| 265 | #define SD20_RX_POS_EDGE 0x00 | ||
| 266 | #define SD20_RX_14_DELAY 0x08 | ||
| 267 | #define SD20_RX_SEL_MASK 0x08 | ||
| 559 | #define SD_PUSH_POINT_CTL 0xFDA8 | 268 | #define SD_PUSH_POINT_CTL 0xFDA8 |
| 269 | #define DDR_FIX_TX_CMD_DAT 0x00 | ||
| 270 | #define DDR_VAR_TX_CMD_DAT 0x80 | ||
| 271 | #define DDR_FIX_TX_DAT_14_TSU 0x00 | ||
| 272 | #define DDR_FIX_TX_DAT_12_TSU 0x40 | ||
| 273 | #define DDR_FIX_TX_CMD_NEG_EDGE 0x00 | ||
| 274 | #define DDR_FIX_TX_CMD_14_AHEAD 0x20 | ||
| 275 | #define SD20_TX_NEG_EDGE 0x00 | ||
| 276 | #define SD20_TX_14_AHEAD 0x10 | ||
| 277 | #define SD20_TX_SEL_MASK 0x10 | ||
| 278 | #define DDR_VAR_SDCLK_POL_SWAP 0x01 | ||
| 560 | #define SD_CMD0 0xFDA9 | 279 | #define SD_CMD0 0xFDA9 |
| 561 | #define SD_CMD_START 0x40 | 280 | #define SD_CMD_START 0x40 |
| 562 | #define SD_CMD1 0xFDAA | 281 | #define SD_CMD1 0xFDAA |
| @@ -569,60 +288,203 @@ | |||
| 569 | #define SD_BLOCK_CNT_L 0xFDB1 | 288 | #define SD_BLOCK_CNT_L 0xFDB1 |
| 570 | #define SD_BLOCK_CNT_H 0xFDB2 | 289 | #define SD_BLOCK_CNT_H 0xFDB2 |
| 571 | #define SD_TRANSFER 0xFDB3 | 290 | #define SD_TRANSFER 0xFDB3 |
| 291 | #define SD_TRANSFER_START 0x80 | ||
| 292 | #define SD_TRANSFER_END 0x40 | ||
| 293 | #define SD_STAT_IDLE 0x20 | ||
| 294 | #define SD_TRANSFER_ERR 0x10 | ||
| 295 | #define SD_TM_NORMAL_WRITE 0x00 | ||
| 296 | #define SD_TM_AUTO_WRITE_3 0x01 | ||
| 297 | #define SD_TM_AUTO_WRITE_4 0x02 | ||
| 298 | #define SD_TM_AUTO_READ_3 0x05 | ||
| 299 | #define SD_TM_AUTO_READ_4 0x06 | ||
| 300 | #define SD_TM_CMD_RSP 0x08 | ||
| 301 | #define SD_TM_AUTO_WRITE_1 0x09 | ||
| 302 | #define SD_TM_AUTO_WRITE_2 0x0A | ||
| 303 | #define SD_TM_NORMAL_READ 0x0C | ||
| 304 | #define SD_TM_AUTO_READ_1 0x0D | ||
| 305 | #define SD_TM_AUTO_READ_2 0x0E | ||
| 306 | #define SD_TM_AUTO_TUNING 0x0F | ||
| 572 | #define SD_CMD_STATE 0xFDB5 | 307 | #define SD_CMD_STATE 0xFDB5 |
| 308 | #define SD_CMD_IDLE 0x80 | ||
| 309 | |||
| 573 | #define SD_DATA_STATE 0xFDB6 | 310 | #define SD_DATA_STATE 0xFDB6 |
| 311 | #define SD_DATA_IDLE 0x80 | ||
| 574 | 312 | ||
| 575 | #define SRCTL 0xFC13 | 313 | #define SRCTL 0xFC13 |
| 576 | 314 | ||
| 577 | #define DCM_DRP_CTL 0xFC23 | 315 | #define DCM_DRP_CTL 0xFC23 |
| 578 | #define DCM_DRP_TRIG 0xFC24 | 316 | #define DCM_RESET 0x08 |
| 579 | #define DCM_DRP_CFG 0xFC25 | 317 | #define DCM_LOCKED 0x04 |
| 580 | #define DCM_DRP_WR_DATA_L 0xFC26 | 318 | #define DCM_208M 0x00 |
| 581 | #define DCM_DRP_WR_DATA_H 0xFC27 | 319 | #define DCM_TX 0x01 |
| 582 | #define DCM_DRP_RD_DATA_L 0xFC28 | 320 | #define DCM_RX 0x02 |
| 583 | #define DCM_DRP_RD_DATA_H 0xFC29 | 321 | #define DCM_DRP_TRIG 0xFC24 |
| 322 | #define DRP_START 0x80 | ||
| 323 | #define DRP_DONE 0x40 | ||
| 324 | #define DCM_DRP_CFG 0xFC25 | ||
| 325 | #define DRP_WRITE 0x80 | ||
| 326 | #define DRP_READ 0x00 | ||
| 327 | #define DCM_WRITE_ADDRESS_50 0x50 | ||
| 328 | #define DCM_WRITE_ADDRESS_51 0x51 | ||
| 329 | #define DCM_READ_ADDRESS_00 0x00 | ||
| 330 | #define DCM_READ_ADDRESS_51 0x51 | ||
| 331 | #define DCM_DRP_WR_DATA_L 0xFC26 | ||
| 332 | #define DCM_DRP_WR_DATA_H 0xFC27 | ||
| 333 | #define DCM_DRP_RD_DATA_L 0xFC28 | ||
| 334 | #define DCM_DRP_RD_DATA_H 0xFC29 | ||
| 584 | #define SD_VPCLK0_CTL 0xFC2A | 335 | #define SD_VPCLK0_CTL 0xFC2A |
| 585 | #define SD_VPCLK1_CTL 0xFC2B | 336 | #define SD_VPCLK1_CTL 0xFC2B |
| 586 | #define SD_DCMPS0_CTL 0xFC2C | 337 | #define SD_DCMPS0_CTL 0xFC2C |
| 587 | #define SD_DCMPS1_CTL 0xFC2D | 338 | #define SD_DCMPS1_CTL 0xFC2D |
| 588 | #define SD_VPTX_CTL SD_VPCLK0_CTL | 339 | #define SD_VPTX_CTL SD_VPCLK0_CTL |
| 589 | #define SD_VPRX_CTL SD_VPCLK1_CTL | 340 | #define SD_VPRX_CTL SD_VPCLK1_CTL |
| 341 | #define PHASE_CHANGE 0x80 | ||
| 342 | #define PHASE_NOT_RESET 0x40 | ||
| 590 | #define SD_DCMPS_TX_CTL SD_DCMPS0_CTL | 343 | #define SD_DCMPS_TX_CTL SD_DCMPS0_CTL |
| 591 | #define SD_DCMPS_RX_CTL SD_DCMPS1_CTL | 344 | #define SD_DCMPS_RX_CTL SD_DCMPS1_CTL |
| 345 | #define DCMPS_CHANGE 0x80 | ||
| 346 | #define DCMPS_CHANGE_DONE 0x40 | ||
| 347 | #define DCMPS_ERROR 0x20 | ||
| 348 | #define DCMPS_CURRENT_PHASE 0x1F | ||
| 592 | #define CARD_CLK_SOURCE 0xFC2E | 349 | #define CARD_CLK_SOURCE 0xFC2E |
| 593 | 350 | #define CRC_FIX_CLK (0x00 << 0) | |
| 351 | #define CRC_VAR_CLK0 (0x01 << 0) | ||
| 352 | #define CRC_VAR_CLK1 (0x02 << 0) | ||
| 353 | #define SD30_FIX_CLK (0x00 << 2) | ||
| 354 | #define SD30_VAR_CLK0 (0x01 << 2) | ||
| 355 | #define SD30_VAR_CLK1 (0x02 << 2) | ||
| 356 | #define SAMPLE_FIX_CLK (0x00 << 4) | ||
| 357 | #define SAMPLE_VAR_CLK0 (0x01 << 4) | ||
| 358 | #define SAMPLE_VAR_CLK1 (0x02 << 4) | ||
| 594 | #define CARD_PWR_CTL 0xFD50 | 359 | #define CARD_PWR_CTL 0xFD50 |
| 360 | #define PMOS_STRG_MASK 0x10 | ||
| 361 | #define PMOS_STRG_800mA 0x10 | ||
| 362 | #define PMOS_STRG_400mA 0x00 | ||
| 363 | #define SD_POWER_OFF 0x03 | ||
| 364 | #define SD_PARTIAL_POWER_ON 0x01 | ||
| 365 | #define SD_POWER_ON 0x00 | ||
| 366 | #define SD_POWER_MASK 0x03 | ||
| 367 | #define MS_POWER_OFF 0x0C | ||
| 368 | #define MS_PARTIAL_POWER_ON 0x04 | ||
| 369 | #define MS_POWER_ON 0x00 | ||
| 370 | #define MS_POWER_MASK 0x0C | ||
| 371 | #define BPP_POWER_OFF 0x0F | ||
| 372 | #define BPP_POWER_5_PERCENT_ON 0x0E | ||
| 373 | #define BPP_POWER_10_PERCENT_ON 0x0C | ||
| 374 | #define BPP_POWER_15_PERCENT_ON 0x08 | ||
| 375 | #define BPP_POWER_ON 0x00 | ||
| 376 | #define BPP_POWER_MASK 0x0F | ||
| 377 | #define SD_VCC_PARTIAL_POWER_ON 0x02 | ||
| 378 | #define SD_VCC_POWER_ON 0x00 | ||
| 595 | #define CARD_CLK_SWITCH 0xFD51 | 379 | #define CARD_CLK_SWITCH 0xFD51 |
| 596 | #define RTL8411B_PACKAGE_MODE 0xFD51 | 380 | #define RTL8411B_PACKAGE_MODE 0xFD51 |
| 597 | #define CARD_SHARE_MODE 0xFD52 | 381 | #define CARD_SHARE_MODE 0xFD52 |
| 382 | #define CARD_SHARE_MASK 0x0F | ||
| 383 | #define CARD_SHARE_MULTI_LUN 0x00 | ||
| 384 | #define CARD_SHARE_NORMAL 0x00 | ||
| 385 | #define CARD_SHARE_48_SD 0x04 | ||
| 386 | #define CARD_SHARE_48_MS 0x08 | ||
| 387 | #define CARD_SHARE_BAROSSA_SD 0x01 | ||
| 388 | #define CARD_SHARE_BAROSSA_MS 0x02 | ||
| 598 | #define CARD_DRIVE_SEL 0xFD53 | 389 | #define CARD_DRIVE_SEL 0xFD53 |
| 390 | #define MS_DRIVE_8mA (0x01 << 6) | ||
| 391 | #define MMC_DRIVE_8mA (0x01 << 4) | ||
| 392 | #define XD_DRIVE_8mA (0x01 << 2) | ||
| 393 | #define GPIO_DRIVE_8mA 0x01 | ||
| 394 | #define RTS5209_CARD_DRIVE_DEFAULT (MS_DRIVE_8mA | MMC_DRIVE_8mA |\ | ||
| 395 | XD_DRIVE_8mA | GPIO_DRIVE_8mA) | ||
| 396 | #define RTL8411_CARD_DRIVE_DEFAULT (MS_DRIVE_8mA | MMC_DRIVE_8mA |\ | ||
| 397 | XD_DRIVE_8mA) | ||
| 398 | #define RTSX_CARD_DRIVE_DEFAULT (MS_DRIVE_8mA | GPIO_DRIVE_8mA) | ||
| 399 | |||
| 599 | #define CARD_STOP 0xFD54 | 400 | #define CARD_STOP 0xFD54 |
| 401 | #define SPI_STOP 0x01 | ||
| 402 | #define XD_STOP 0x02 | ||
| 403 | #define SD_STOP 0x04 | ||
| 404 | #define MS_STOP 0x08 | ||
| 405 | #define SPI_CLR_ERR 0x10 | ||
| 406 | #define XD_CLR_ERR 0x20 | ||
| 407 | #define SD_CLR_ERR 0x40 | ||
| 408 | #define MS_CLR_ERR 0x80 | ||
| 600 | #define CARD_OE 0xFD55 | 409 | #define CARD_OE 0xFD55 |
| 410 | #define SD_OUTPUT_EN 0x04 | ||
| 411 | #define MS_OUTPUT_EN 0x08 | ||
| 601 | #define CARD_AUTO_BLINK 0xFD56 | 412 | #define CARD_AUTO_BLINK 0xFD56 |
| 602 | #define CARD_GPIO_DIR 0xFD57 | 413 | #define CARD_GPIO_DIR 0xFD57 |
| 603 | #define CARD_GPIO 0xFD58 | 414 | #define CARD_GPIO 0xFD58 |
| 604 | #define CARD_DATA_SOURCE 0xFD5B | 415 | #define CARD_DATA_SOURCE 0xFD5B |
| 416 | #define PINGPONG_BUFFER 0x01 | ||
| 417 | #define RING_BUFFER 0x00 | ||
| 605 | #define SD30_CLK_DRIVE_SEL 0xFD5A | 418 | #define SD30_CLK_DRIVE_SEL 0xFD5A |
| 419 | #define DRIVER_TYPE_A 0x05 | ||
| 420 | #define DRIVER_TYPE_B 0x03 | ||
| 421 | #define DRIVER_TYPE_C 0x02 | ||
| 422 | #define DRIVER_TYPE_D 0x01 | ||
| 606 | #define CARD_SELECT 0xFD5C | 423 | #define CARD_SELECT 0xFD5C |
| 424 | #define SD_MOD_SEL 2 | ||
| 425 | #define MS_MOD_SEL 3 | ||
| 607 | #define SD30_DRIVE_SEL 0xFD5E | 426 | #define SD30_DRIVE_SEL 0xFD5E |
| 427 | #define CFG_DRIVER_TYPE_A 0x02 | ||
| 428 | #define CFG_DRIVER_TYPE_B 0x03 | ||
| 429 | #define CFG_DRIVER_TYPE_C 0x01 | ||
| 430 | #define CFG_DRIVER_TYPE_D 0x00 | ||
| 608 | #define SD30_CMD_DRIVE_SEL 0xFD5E | 431 | #define SD30_CMD_DRIVE_SEL 0xFD5E |
| 609 | #define SD30_DAT_DRIVE_SEL 0xFD5F | 432 | #define SD30_DAT_DRIVE_SEL 0xFD5F |
| 610 | #define CARD_CLK_EN 0xFD69 | 433 | #define CARD_CLK_EN 0xFD69 |
| 434 | #define SD_CLK_EN 0x04 | ||
| 435 | #define MS_CLK_EN 0x08 | ||
| 611 | #define SDIO_CTRL 0xFD6B | 436 | #define SDIO_CTRL 0xFD6B |
| 612 | #define CD_PAD_CTL 0xFD73 | 437 | #define CD_PAD_CTL 0xFD73 |
| 613 | 438 | #define CD_DISABLE_MASK 0x07 | |
| 439 | #define MS_CD_DISABLE 0x04 | ||
| 440 | #define SD_CD_DISABLE 0x02 | ||
| 441 | #define XD_CD_DISABLE 0x01 | ||
| 442 | #define CD_DISABLE 0x07 | ||
| 443 | #define CD_ENABLE 0x00 | ||
| 444 | #define MS_CD_EN_ONLY 0x03 | ||
| 445 | #define SD_CD_EN_ONLY 0x05 | ||
| 446 | #define XD_CD_EN_ONLY 0x06 | ||
| 447 | #define FORCE_CD_LOW_MASK 0x38 | ||
| 448 | #define FORCE_CD_XD_LOW 0x08 | ||
| 449 | #define FORCE_CD_SD_LOW 0x10 | ||
| 450 | #define FORCE_CD_MS_LOW 0x20 | ||
| 451 | #define CD_AUTO_DISABLE 0x40 | ||
| 614 | #define FPDCTL 0xFC00 | 452 | #define FPDCTL 0xFC00 |
| 453 | #define SSC_POWER_DOWN 0x01 | ||
| 454 | #define SD_OC_POWER_DOWN 0x02 | ||
| 455 | #define ALL_POWER_DOWN 0x07 | ||
| 456 | #define OC_POWER_DOWN 0x06 | ||
| 615 | #define PDINFO 0xFC01 | 457 | #define PDINFO 0xFC01 |
| 616 | 458 | ||
| 617 | #define CLK_CTL 0xFC02 | 459 | #define CLK_CTL 0xFC02 |
| 460 | #define CHANGE_CLK 0x01 | ||
| 461 | #define CLK_LOW_FREQ 0x01 | ||
| 462 | |||
| 618 | #define CLK_DIV 0xFC03 | 463 | #define CLK_DIV 0xFC03 |
| 464 | #define CLK_DIV_1 0x01 | ||
| 465 | #define CLK_DIV_2 0x02 | ||
| 466 | #define CLK_DIV_4 0x03 | ||
| 467 | #define CLK_DIV_8 0x04 | ||
| 619 | #define CLK_SEL 0xFC04 | 468 | #define CLK_SEL 0xFC04 |
| 620 | 469 | ||
| 621 | #define SSC_DIV_N_0 0xFC0F | 470 | #define SSC_DIV_N_0 0xFC0F |
| 622 | #define SSC_DIV_N_1 0xFC10 | 471 | #define SSC_DIV_N_1 0xFC10 |
| 623 | #define SSC_CTL1 0xFC11 | 472 | #define SSC_CTL1 0xFC11 |
| 473 | #define SSC_RSTB 0x80 | ||
| 474 | #define SSC_8X_EN 0x40 | ||
| 475 | #define SSC_FIX_FRAC 0x20 | ||
| 476 | #define SSC_SEL_1M 0x00 | ||
| 477 | #define SSC_SEL_2M 0x08 | ||
| 478 | #define SSC_SEL_4M 0x10 | ||
| 479 | #define SSC_SEL_8M 0x18 | ||
| 624 | #define SSC_CTL2 0xFC12 | 480 | #define SSC_CTL2 0xFC12 |
| 625 | 481 | #define SSC_DEPTH_MASK 0x07 | |
| 482 | #define SSC_DEPTH_DISALBE 0x00 | ||
| 483 | #define SSC_DEPTH_4M 0x01 | ||
| 484 | #define SSC_DEPTH_2M 0x02 | ||
| 485 | #define SSC_DEPTH_1M 0x03 | ||
| 486 | #define SSC_DEPTH_500K 0x04 | ||
| 487 | #define SSC_DEPTH_250K 0x05 | ||
| 626 | #define RCCTL 0xFC14 | 488 | #define RCCTL 0xFC14 |
| 627 | 489 | ||
| 628 | #define FPGA_PULL_CTL 0xFC1D | 490 | #define FPGA_PULL_CTL 0xFC1D |
| @@ -630,6 +492,24 @@ | |||
| 630 | #define GPIO_CTL 0xFC1F | 492 | #define GPIO_CTL 0xFC1F |
| 631 | 493 | ||
| 632 | #define LDO_CTL 0xFC1E | 494 | #define LDO_CTL 0xFC1E |
| 495 | #define BPP_ASIC_1V7 0x00 | ||
| 496 | #define BPP_ASIC_1V8 0x01 | ||
| 497 | #define BPP_ASIC_1V9 0x02 | ||
| 498 | #define BPP_ASIC_2V0 0x03 | ||
| 499 | #define BPP_ASIC_2V7 0x04 | ||
| 500 | #define BPP_ASIC_2V8 0x05 | ||
| 501 | #define BPP_ASIC_3V2 0x06 | ||
| 502 | #define BPP_ASIC_3V3 0x07 | ||
| 503 | #define BPP_REG_TUNED18 0x07 | ||
| 504 | #define BPP_TUNED18_SHIFT_8402 5 | ||
| 505 | #define BPP_TUNED18_SHIFT_8411 4 | ||
| 506 | #define BPP_PAD_MASK 0x04 | ||
| 507 | #define BPP_PAD_3V3 0x04 | ||
| 508 | #define BPP_PAD_1V8 0x00 | ||
| 509 | #define BPP_LDO_POWB 0x03 | ||
| 510 | #define BPP_LDO_ON 0x00 | ||
| 511 | #define BPP_LDO_SUSPEND 0x02 | ||
| 512 | #define BPP_LDO_OFF 0x03 | ||
| 633 | #define SYS_VER 0xFC32 | 513 | #define SYS_VER 0xFC32 |
| 634 | 514 | ||
| 635 | #define CARD_PULL_CTL1 0xFD60 | 515 | #define CARD_PULL_CTL1 0xFD60 |
| @@ -642,6 +522,10 @@ | |||
| 642 | /* PCI Express Related Registers */ | 522 | /* PCI Express Related Registers */ |
| 643 | #define IRQEN0 0xFE20 | 523 | #define IRQEN0 0xFE20 |
| 644 | #define IRQSTAT0 0xFE21 | 524 | #define IRQSTAT0 0xFE21 |
| 525 | #define DMA_DONE_INT 0x80 | ||
| 526 | #define SUSPEND_INT 0x40 | ||
| 527 | #define LINK_RDY_INT 0x20 | ||
| 528 | #define LINK_DOWN_INT 0x10 | ||
| 645 | #define IRQEN1 0xFE22 | 529 | #define IRQEN1 0xFE22 |
| 646 | #define IRQSTAT1 0xFE23 | 530 | #define IRQSTAT1 0xFE23 |
| 647 | #define TLPRIEN 0xFE24 | 531 | #define TLPRIEN 0xFE24 |
| @@ -653,6 +537,16 @@ | |||
| 653 | #define DMATC2 0xFE2A | 537 | #define DMATC2 0xFE2A |
| 654 | #define DMATC3 0xFE2B | 538 | #define DMATC3 0xFE2B |
| 655 | #define DMACTL 0xFE2C | 539 | #define DMACTL 0xFE2C |
| 540 | #define DMA_RST 0x80 | ||
| 541 | #define DMA_BUSY 0x04 | ||
| 542 | #define DMA_DIR_TO_CARD 0x00 | ||
| 543 | #define DMA_DIR_FROM_CARD 0x02 | ||
| 544 | #define DMA_EN 0x01 | ||
| 545 | #define DMA_128 (0 << 4) | ||
| 546 | #define DMA_256 (1 << 4) | ||
| 547 | #define DMA_512 (2 << 4) | ||
| 548 | #define DMA_1024 (3 << 4) | ||
| 549 | #define DMA_PACK_SIZE_MASK 0x30 | ||
| 656 | #define BCTL 0xFE2D | 550 | #define BCTL 0xFE2D |
| 657 | #define RBBC0 0xFE2E | 551 | #define RBBC0 0xFE2E |
| 658 | #define RBBC1 0xFE2F | 552 | #define RBBC1 0xFE2F |
| @@ -678,14 +572,21 @@ | |||
| 678 | #define MSGTXDATA2 0xFE46 | 572 | #define MSGTXDATA2 0xFE46 |
| 679 | #define MSGTXDATA3 0xFE47 | 573 | #define MSGTXDATA3 0xFE47 |
| 680 | #define MSGTXCTL 0xFE48 | 574 | #define MSGTXCTL 0xFE48 |
| 681 | #define PETXCFG 0xFE49 | ||
| 682 | #define LTR_CTL 0xFE4A | 575 | #define LTR_CTL 0xFE4A |
| 683 | #define OBFF_CFG 0xFE4C | 576 | #define OBFF_CFG 0xFE4C |
| 684 | 577 | ||
| 685 | #define CDRESUMECTL 0xFE52 | 578 | #define CDRESUMECTL 0xFE52 |
| 686 | #define WAKE_SEL_CTL 0xFE54 | 579 | #define WAKE_SEL_CTL 0xFE54 |
| 580 | #define PCLK_CTL 0xFE55 | ||
| 581 | #define PCLK_MODE_SEL 0x20 | ||
| 687 | #define PME_FORCE_CTL 0xFE56 | 582 | #define PME_FORCE_CTL 0xFE56 |
| 583 | |||
| 688 | #define ASPM_FORCE_CTL 0xFE57 | 584 | #define ASPM_FORCE_CTL 0xFE57 |
| 585 | #define FORCE_ASPM_CTL0 0x10 | ||
| 586 | #define FORCE_ASPM_VAL_MASK 0x03 | ||
| 587 | #define FORCE_ASPM_L1_EN 0x02 | ||
| 588 | #define FORCE_ASPM_L0_EN 0x01 | ||
| 589 | #define FORCE_ASPM_NO_ASPM 0x00 | ||
| 689 | #define PM_CLK_FORCE_CTL 0xFE58 | 590 | #define PM_CLK_FORCE_CTL 0xFE58 |
| 690 | #define FUNC_FORCE_CTL 0xFE59 | 591 | #define FUNC_FORCE_CTL 0xFE59 |
| 691 | #define PERST_GLITCH_WIDTH 0xFE5C | 592 | #define PERST_GLITCH_WIDTH 0xFE5C |
| @@ -693,19 +594,36 @@ | |||
| 693 | #define RESET_LOAD_REG 0xFE5E | 594 | #define RESET_LOAD_REG 0xFE5E |
| 694 | #define EFUSE_CONTENT 0xFE5F | 595 | #define EFUSE_CONTENT 0xFE5F |
| 695 | #define HOST_SLEEP_STATE 0xFE60 | 596 | #define HOST_SLEEP_STATE 0xFE60 |
| 696 | #define SDIO_CFG 0xFE70 | 597 | #define HOST_ENTER_S1 1 |
| 598 | #define HOST_ENTER_S3 2 | ||
| 697 | 599 | ||
| 600 | #define SDIO_CFG 0xFE70 | ||
| 601 | #define PM_EVENT_DEBUG 0xFE71 | ||
| 602 | #define PME_DEBUG_0 0x08 | ||
| 698 | #define NFTS_TX_CTRL 0xFE72 | 603 | #define NFTS_TX_CTRL 0xFE72 |
| 699 | 604 | ||
| 700 | #define PWR_GATE_CTRL 0xFE75 | 605 | #define PWR_GATE_CTRL 0xFE75 |
| 606 | #define PWR_GATE_EN 0x01 | ||
| 607 | #define LDO3318_PWR_MASK 0x06 | ||
| 608 | #define LDO_ON 0x00 | ||
| 609 | #define LDO_SUSPEND 0x04 | ||
| 610 | #define LDO_OFF 0x06 | ||
| 701 | #define PWD_SUSPEND_EN 0xFE76 | 611 | #define PWD_SUSPEND_EN 0xFE76 |
| 702 | #define LDO_PWR_SEL 0xFE78 | 612 | #define LDO_PWR_SEL 0xFE78 |
| 703 | 613 | ||
| 614 | #define L1SUB_CONFIG1 0xFE8D | ||
| 615 | #define L1SUB_CONFIG2 0xFE8E | ||
| 616 | #define L1SUB_AUTO_CFG 0x02 | ||
| 617 | #define L1SUB_CONFIG3 0xFE8F | ||
| 618 | |||
| 704 | #define DUMMY_REG_RESET_0 0xFE90 | 619 | #define DUMMY_REG_RESET_0 0xFE90 |
| 705 | 620 | ||
| 706 | #define AUTOLOAD_CFG_BASE 0xFF00 | 621 | #define AUTOLOAD_CFG_BASE 0xFF00 |
| 622 | #define PETXCFG 0xFF03 | ||
| 707 | 623 | ||
| 708 | #define PM_CTRL1 0xFF44 | 624 | #define PM_CTRL1 0xFF44 |
| 625 | #define CD_RESUME_EN_MASK 0xF0 | ||
| 626 | |||
| 709 | #define PM_CTRL2 0xFF45 | 627 | #define PM_CTRL2 0xFF45 |
| 710 | #define PM_CTRL3 0xFF46 | 628 | #define PM_CTRL3 0xFF46 |
| 711 | #define SDIO_SEND_PME_EN 0x80 | 629 | #define SDIO_SEND_PME_EN 0x80 |
| @@ -726,18 +644,125 @@ | |||
| 726 | #define IMAGE_FLAG_ADDR0 0xCE80 | 644 | #define IMAGE_FLAG_ADDR0 0xCE80 |
| 727 | #define IMAGE_FLAG_ADDR1 0xCE81 | 645 | #define IMAGE_FLAG_ADDR1 0xCE81 |
| 728 | 646 | ||
| 647 | #define RREF_CFG 0xFF6C | ||
| 648 | #define RREF_VBGSEL_MASK 0x38 | ||
| 649 | #define RREF_VBGSEL_1V25 0x28 | ||
| 650 | |||
| 651 | #define OOBS_CONFIG 0xFF6E | ||
| 652 | #define OOBS_AUTOK_DIS 0x80 | ||
| 653 | #define OOBS_VAL_MASK 0x1F | ||
| 654 | |||
| 655 | #define LDO_DV18_CFG 0xFF70 | ||
| 656 | #define LDO_DV18_SR_MASK 0xC0 | ||
| 657 | #define LDO_DV18_SR_DF 0x40 | ||
| 658 | |||
| 659 | #define LDO_CONFIG2 0xFF71 | ||
| 660 | #define LDO_D3318_MASK 0x07 | ||
| 661 | #define LDO_D3318_33V 0x07 | ||
| 662 | #define LDO_D3318_18V 0x02 | ||
| 663 | |||
| 664 | #define LDO_VCC_CFG0 0xFF72 | ||
| 665 | #define LDO_VCC_LMTVTH_MASK 0x30 | ||
| 666 | #define LDO_VCC_LMTVTH_2A 0x10 | ||
| 667 | |||
| 668 | #define LDO_VCC_CFG1 0xFF73 | ||
| 669 | #define LDO_VCC_REF_TUNE_MASK 0x30 | ||
| 670 | #define LDO_VCC_REF_1V2 0x20 | ||
| 671 | #define LDO_VCC_TUNE_MASK 0x07 | ||
| 672 | #define LDO_VCC_1V8 0x04 | ||
| 673 | #define LDO_VCC_3V3 0x07 | ||
| 674 | #define LDO_VCC_LMT_EN 0x08 | ||
| 675 | |||
| 676 | #define LDO_VIO_CFG 0xFF75 | ||
| 677 | #define LDO_VIO_SR_MASK 0xC0 | ||
| 678 | #define LDO_VIO_SR_DF 0x40 | ||
| 679 | #define LDO_VIO_REF_TUNE_MASK 0x30 | ||
| 680 | #define LDO_VIO_REF_1V2 0x20 | ||
| 681 | #define LDO_VIO_TUNE_MASK 0x07 | ||
| 682 | #define LDO_VIO_1V7 0x03 | ||
| 683 | #define LDO_VIO_1V8 0x04 | ||
| 684 | #define LDO_VIO_3V3 0x07 | ||
| 685 | |||
| 686 | #define LDO_DV12S_CFG 0xFF76 | ||
| 687 | #define LDO_REF12_TUNE_MASK 0x18 | ||
| 688 | #define LDO_REF12_TUNE_DF 0x10 | ||
| 689 | #define LDO_D12_TUNE_MASK 0x07 | ||
| 690 | #define LDO_D12_TUNE_DF 0x04 | ||
| 691 | |||
| 692 | #define LDO_AV12S_CFG 0xFF77 | ||
| 693 | #define LDO_AV12S_TUNE_MASK 0x07 | ||
| 694 | #define LDO_AV12S_TUNE_DF 0x04 | ||
| 695 | |||
| 696 | #define SD40_LDO_CTL1 0xFE7D | ||
| 697 | #define SD40_VIO_TUNE_MASK 0x70 | ||
| 698 | #define SD40_VIO_TUNE_1V7 0x30 | ||
| 699 | #define SD_VIO_LDO_1V8 0x40 | ||
| 700 | #define SD_VIO_LDO_3V3 0x70 | ||
| 701 | |||
| 729 | /* Phy register */ | 702 | /* Phy register */ |
| 730 | #define PHY_PCR 0x00 | 703 | #define PHY_PCR 0x00 |
| 704 | #define PHY_PCR_FORCE_CODE 0xB000 | ||
| 705 | #define PHY_PCR_OOBS_CALI_50 0x0800 | ||
| 706 | #define PHY_PCR_OOBS_VCM_08 0x0200 | ||
| 707 | #define PHY_PCR_OOBS_SEN_90 0x0040 | ||
| 708 | #define PHY_PCR_RSSI_EN 0x0002 | ||
| 709 | #define PHY_PCR_RX10K 0x0001 | ||
| 710 | |||
| 731 | #define PHY_RCR0 0x01 | 711 | #define PHY_RCR0 0x01 |
| 732 | #define PHY_RCR1 0x02 | 712 | #define PHY_RCR1 0x02 |
| 713 | #define PHY_RCR1_ADP_TIME_4 0x0400 | ||
| 714 | #define PHY_RCR1_VCO_COARSE 0x001F | ||
| 715 | #define PHY_SSCCR2 0x02 | ||
| 716 | #define PHY_SSCCR2_PLL_NCODE 0x0A00 | ||
| 717 | #define PHY_SSCCR2_TIME0 0x001C | ||
| 718 | #define PHY_SSCCR2_TIME2_WIDTH 0x0003 | ||
| 719 | |||
| 733 | #define PHY_RCR2 0x03 | 720 | #define PHY_RCR2 0x03 |
| 721 | #define PHY_RCR2_EMPHASE_EN 0x8000 | ||
| 722 | #define PHY_RCR2_NADJR 0x4000 | ||
| 723 | #define PHY_RCR2_CDR_SR_2 0x0100 | ||
| 724 | #define PHY_RCR2_FREQSEL_12 0x0040 | ||
| 725 | #define PHY_RCR2_CDR_SC_12P 0x0010 | ||
| 726 | #define PHY_RCR2_CALIB_LATE 0x0002 | ||
| 727 | #define PHY_SSCCR3 0x03 | ||
| 728 | #define PHY_SSCCR3_STEP_IN 0x2740 | ||
| 729 | #define PHY_SSCCR3_CHECK_DELAY 0x0008 | ||
| 730 | #define _PHY_ANA03 0x03 | ||
| 731 | #define _PHY_ANA03_TIMER_MAX 0x2700 | ||
| 732 | #define _PHY_ANA03_OOBS_DEB_EN 0x0040 | ||
| 733 | #define _PHY_CMU_DEBUG_EN 0x0008 | ||
| 734 | |||
| 734 | #define PHY_RTCR 0x04 | 735 | #define PHY_RTCR 0x04 |
| 735 | #define PHY_RDR 0x05 | 736 | #define PHY_RDR 0x05 |
| 737 | #define PHY_RDR_RXDSEL_1_9 0x4000 | ||
| 738 | #define PHY_SSC_AUTO_PWD 0x0600 | ||
| 736 | #define PHY_TCR0 0x06 | 739 | #define PHY_TCR0 0x06 |
| 737 | #define PHY_TCR1 0x07 | 740 | #define PHY_TCR1 0x07 |
| 738 | #define PHY_TUNE 0x08 | 741 | #define PHY_TUNE 0x08 |
| 742 | #define PHY_TUNE_TUNEREF_1_0 0x4000 | ||
| 743 | #define PHY_TUNE_VBGSEL_1252 0x0C00 | ||
| 744 | #define PHY_TUNE_SDBUS_33 0x0200 | ||
| 745 | #define PHY_TUNE_TUNED18 0x01C0 | ||
| 746 | #define PHY_TUNE_TUNED12 0X0020 | ||
| 747 | #define PHY_TUNE_TUNEA12 0x0004 | ||
| 748 | #define PHY_TUNE_VOLTAGE_MASK 0xFC3F | ||
| 749 | #define PHY_TUNE_VOLTAGE_3V3 0x03C0 | ||
| 750 | #define PHY_TUNE_D18_1V8 0x0100 | ||
| 751 | #define PHY_TUNE_D18_1V7 0x0080 | ||
| 752 | #define PHY_ANA08 0x08 | ||
| 753 | #define PHY_ANA08_RX_EQ_DCGAIN 0x5000 | ||
| 754 | #define PHY_ANA08_SEL_RX_EN 0x0400 | ||
| 755 | #define PHY_ANA08_RX_EQ_VAL 0x03C0 | ||
| 756 | #define PHY_ANA08_SCP 0x0020 | ||
| 757 | #define PHY_ANA08_SEL_IPI 0x0004 | ||
| 758 | |||
| 739 | #define PHY_IMR 0x09 | 759 | #define PHY_IMR 0x09 |
| 740 | #define PHY_BPCR 0x0A | 760 | #define PHY_BPCR 0x0A |
| 761 | #define PHY_BPCR_IBRXSEL 0x0400 | ||
| 762 | #define PHY_BPCR_IBTXSEL 0x0100 | ||
| 763 | #define PHY_BPCR_IB_FILTER 0x0080 | ||
| 764 | #define PHY_BPCR_CMIRROR_EN 0x0040 | ||
| 765 | |||
| 741 | #define PHY_BIST 0x0B | 766 | #define PHY_BIST 0x0B |
| 742 | #define PHY_RAW_L 0x0C | 767 | #define PHY_RAW_L 0x0C |
| 743 | #define PHY_RAW_H 0x0D | 768 | #define PHY_RAW_H 0x0D |
| @@ -745,6 +770,7 @@ | |||
| 745 | #define PHY_HOST_CLK_CTRL 0x0F | 770 | #define PHY_HOST_CLK_CTRL 0x0F |
| 746 | #define PHY_DMR 0x10 | 771 | #define PHY_DMR 0x10 |
| 747 | #define PHY_BACR 0x11 | 772 | #define PHY_BACR 0x11 |
| 773 | #define PHY_BACR_BASIC_MASK 0xFFF3 | ||
| 748 | #define PHY_IER 0x12 | 774 | #define PHY_IER 0x12 |
| 749 | #define PHY_BCSR 0x13 | 775 | #define PHY_BCSR 0x13 |
| 750 | #define PHY_BPR 0x14 | 776 | #define PHY_BPR 0x14 |
| @@ -752,80 +778,70 @@ | |||
| 752 | #define PHY_BPNR 0x16 | 778 | #define PHY_BPNR 0x16 |
| 753 | #define PHY_BRNR2 0x17 | 779 | #define PHY_BRNR2 0x17 |
| 754 | #define PHY_BENR 0x18 | 780 | #define PHY_BENR 0x18 |
| 755 | #define PHY_REG_REV 0x19 | 781 | #define PHY_REV 0x19 |
| 782 | #define PHY_REV_RESV 0xE000 | ||
| 783 | #define PHY_REV_RXIDLE_LATCHED 0x1000 | ||
| 784 | #define PHY_REV_P1_EN 0x0800 | ||
| 785 | #define PHY_REV_RXIDLE_EN 0x0400 | ||
| 786 | #define PHY_REV_CLKREQ_TX_EN 0x0200 | ||
| 787 | #define PHY_REV_CLKREQ_RX_EN 0x0100 | ||
| 788 | #define PHY_REV_CLKREQ_DT_1_0 0x0040 | ||
| 789 | #define PHY_REV_STOP_CLKRD 0x0020 | ||
| 790 | #define PHY_REV_RX_PWST 0x0008 | ||
| 791 | #define PHY_REV_STOP_CLKWR 0x0004 | ||
| 792 | #define _PHY_REV0 0x19 | ||
| 793 | #define _PHY_REV0_FILTER_OUT 0x3800 | ||
| 794 | #define _PHY_REV0_CDR_BYPASS_PFD 0x0100 | ||
| 795 | #define _PHY_REV0_CDR_RX_IDLE_BYPASS 0x0002 | ||
| 796 | |||
| 756 | #define PHY_FLD0 0x1A | 797 | #define PHY_FLD0 0x1A |
| 798 | #define PHY_ANA1A 0x1A | ||
| 799 | #define PHY_ANA1A_TXR_LOOPBACK 0x2000 | ||
| 800 | #define PHY_ANA1A_RXT_BIST 0x0500 | ||
| 801 | #define PHY_ANA1A_TXR_BIST 0x0040 | ||
| 802 | #define PHY_ANA1A_REV 0x0006 | ||
| 757 | #define PHY_FLD1 0x1B | 803 | #define PHY_FLD1 0x1B |
| 758 | #define PHY_FLD2 0x1C | 804 | #define PHY_FLD2 0x1C |
| 759 | #define PHY_FLD3 0x1D | 805 | #define PHY_FLD3 0x1D |
| 806 | #define PHY_FLD3_TIMER_4 0x0800 | ||
| 807 | #define PHY_FLD3_TIMER_6 0x0020 | ||
| 808 | #define PHY_FLD3_RXDELINK 0x0004 | ||
| 809 | #define PHY_ANA1D 0x1D | ||
| 810 | #define PHY_ANA1D_DEBUG_ADDR 0x0004 | ||
| 811 | #define _PHY_FLD0 0x1D | ||
| 812 | #define _PHY_FLD0_CLK_REQ_20C 0x8000 | ||
| 813 | #define _PHY_FLD0_RX_IDLE_EN 0x1000 | ||
| 814 | #define _PHY_FLD0_BIT_ERR_RSTN 0x0800 | ||
| 815 | #define _PHY_FLD0_BER_COUNT 0x01E0 | ||
| 816 | #define _PHY_FLD0_BER_TIMER 0x001E | ||
| 817 | #define _PHY_FLD0_CHECK_EN 0x0001 | ||
| 818 | |||
| 760 | #define PHY_FLD4 0x1E | 819 | #define PHY_FLD4 0x1E |
| 820 | #define PHY_FLD4_FLDEN_SEL 0x4000 | ||
| 821 | #define PHY_FLD4_REQ_REF 0x2000 | ||
| 822 | #define PHY_FLD4_RXAMP_OFF 0x1000 | ||
| 823 | #define PHY_FLD4_REQ_ADDA 0x0800 | ||
| 824 | #define PHY_FLD4_BER_COUNT 0x00E0 | ||
| 825 | #define PHY_FLD4_BER_TIMER 0x000A | ||
| 826 | #define PHY_FLD4_BER_CHK_EN 0x0001 | ||
| 827 | #define PHY_DIG1E 0x1E | ||
| 828 | #define PHY_DIG1E_REV 0x4000 | ||
| 829 | #define PHY_DIG1E_D0_X_D1 0x1000 | ||
| 830 | #define PHY_DIG1E_RX_ON_HOST 0x0800 | ||
| 831 | #define PHY_DIG1E_RCLK_REF_HOST 0x0400 | ||
| 832 | #define PHY_DIG1E_RCLK_TX_EN_KEEP 0x0040 | ||
| 833 | #define PHY_DIG1E_RCLK_TX_TERM_KEEP 0x0020 | ||
| 834 | #define PHY_DIG1E_RCLK_RX_EIDLE_ON 0x0010 | ||
| 835 | #define PHY_DIG1E_TX_TERM_KEEP 0x0008 | ||
| 836 | #define PHY_DIG1E_RX_TERM_KEEP 0x0004 | ||
| 837 | #define PHY_DIG1E_TX_EN_KEEP 0x0002 | ||
| 838 | #define PHY_DIG1E_RX_EN_KEEP 0x0001 | ||
| 761 | #define PHY_DUM_REG 0x1F | 839 | #define PHY_DUM_REG 0x1F |
| 762 | 840 | ||
| 763 | #define LCTLR 0x80 | ||
| 764 | #define LCTLR_EXT_SYNC 0x80 | ||
| 765 | #define LCTLR_COMMON_CLOCK_CFG 0x40 | ||
| 766 | #define LCTLR_RETRAIN_LINK 0x20 | ||
| 767 | #define LCTLR_LINK_DISABLE 0x10 | ||
| 768 | #define LCTLR_RCB 0x08 | ||
| 769 | #define LCTLR_RESERVED 0x04 | ||
| 770 | #define LCTLR_ASPM_CTL_MASK 0x03 | ||
| 771 | |||
| 772 | #define PCR_SETTING_REG1 0x724 | 841 | #define PCR_SETTING_REG1 0x724 |
| 773 | #define PCR_SETTING_REG2 0x814 | 842 | #define PCR_SETTING_REG2 0x814 |
| 774 | #define PCR_SETTING_REG3 0x747 | 843 | #define PCR_SETTING_REG3 0x747 |
| 775 | 844 | ||
| 776 | /* Phy bits */ | ||
| 777 | #define PHY_PCR_FORCE_CODE 0xB000 | ||
| 778 | #define PHY_PCR_OOBS_CALI_50 0x0800 | ||
| 779 | #define PHY_PCR_OOBS_VCM_08 0x0200 | ||
| 780 | #define PHY_PCR_OOBS_SEN_90 0x0040 | ||
| 781 | #define PHY_PCR_RSSI_EN 0x0002 | ||
| 782 | |||
| 783 | #define PHY_RCR1_ADP_TIME 0x0100 | ||
| 784 | #define PHY_RCR1_VCO_COARSE 0x001F | ||
| 785 | |||
| 786 | #define PHY_RCR2_EMPHASE_EN 0x8000 | ||
| 787 | #define PHY_RCR2_NADJR 0x4000 | ||
| 788 | #define PHY_RCR2_CDR_CP_10 0x0400 | ||
| 789 | #define PHY_RCR2_CDR_SR_2 0x0100 | ||
| 790 | #define PHY_RCR2_FREQSEL_12 0x0040 | ||
| 791 | #define PHY_RCR2_CPADJEN 0x0020 | ||
| 792 | #define PHY_RCR2_CDR_SC_8 0x0008 | ||
| 793 | #define PHY_RCR2_CALIB_LATE 0x0002 | ||
| 794 | |||
| 795 | #define PHY_RDR_RXDSEL_1_9 0x4000 | ||
| 796 | |||
| 797 | #define PHY_TUNE_TUNEREF_1_0 0x4000 | ||
| 798 | #define PHY_TUNE_VBGSEL_1252 0x0C00 | ||
| 799 | #define PHY_TUNE_SDBUS_33 0x0200 | ||
| 800 | #define PHY_TUNE_TUNED18 0x01C0 | ||
| 801 | #define PHY_TUNE_TUNED12 0X0020 | ||
| 802 | |||
| 803 | #define PHY_BPCR_IBRXSEL 0x0400 | ||
| 804 | #define PHY_BPCR_IBTXSEL 0x0100 | ||
| 805 | #define PHY_BPCR_IB_FILTER 0x0080 | ||
| 806 | #define PHY_BPCR_CMIRROR_EN 0x0040 | ||
| 807 | |||
| 808 | #define PHY_REG_REV_RESV 0xE000 | ||
| 809 | #define PHY_REG_REV_RXIDLE_LATCHED 0x1000 | ||
| 810 | #define PHY_REG_REV_P1_EN 0x0800 | ||
| 811 | #define PHY_REG_REV_RXIDLE_EN 0x0400 | ||
| 812 | #define PHY_REG_REV_CLKREQ_DLY_TIMER_1_0 0x0040 | ||
| 813 | #define PHY_REG_REV_STOP_CLKRD 0x0020 | ||
| 814 | #define PHY_REG_REV_RX_PWST 0x0008 | ||
| 815 | #define PHY_REG_REV_STOP_CLKWR 0x0004 | ||
| 816 | |||
| 817 | #define PHY_FLD3_TIMER_4 0x7800 | ||
| 818 | #define PHY_FLD3_TIMER_6 0x00E0 | ||
| 819 | #define PHY_FLD3_RXDELINK 0x0004 | ||
| 820 | |||
| 821 | #define PHY_FLD4_FLDEN_SEL 0x4000 | ||
| 822 | #define PHY_FLD4_REQ_REF 0x2000 | ||
| 823 | #define PHY_FLD4_RXAMP_OFF 0x1000 | ||
| 824 | #define PHY_FLD4_REQ_ADDA 0x0800 | ||
| 825 | #define PHY_FLD4_BER_COUNT 0x00E0 | ||
| 826 | #define PHY_FLD4_BER_TIMER 0x000A | ||
| 827 | #define PHY_FLD4_BER_CHK_EN 0x0001 | ||
| 828 | |||
| 829 | #define rtsx_pci_init_cmd(pcr) ((pcr)->ci = 0) | 845 | #define rtsx_pci_init_cmd(pcr) ((pcr)->ci = 0) |
| 830 | 846 | ||
| 831 | struct rtsx_pcr; | 847 | struct rtsx_pcr; |
| @@ -835,6 +851,8 @@ struct pcr_handle { | |||
| 835 | }; | 851 | }; |
| 836 | 852 | ||
| 837 | struct pcr_ops { | 853 | struct pcr_ops { |
| 854 | int (*write_phy)(struct rtsx_pcr *pcr, u8 addr, u16 val); | ||
| 855 | int (*read_phy)(struct rtsx_pcr *pcr, u8 addr, u16 *val); | ||
| 838 | int (*extra_init_hw)(struct rtsx_pcr *pcr); | 856 | int (*extra_init_hw)(struct rtsx_pcr *pcr); |
| 839 | int (*optimize_phy)(struct rtsx_pcr *pcr); | 857 | int (*optimize_phy)(struct rtsx_pcr *pcr); |
| 840 | int (*turn_on_led)(struct rtsx_pcr *pcr); | 858 | int (*turn_on_led)(struct rtsx_pcr *pcr); |
| @@ -856,6 +874,7 @@ enum PDEV_STAT {PDEV_STAT_IDLE, PDEV_STAT_RUN}; | |||
| 856 | struct rtsx_pcr { | 874 | struct rtsx_pcr { |
| 857 | struct pci_dev *pci; | 875 | struct pci_dev *pci; |
| 858 | unsigned int id; | 876 | unsigned int id; |
| 877 | int pcie_cap; | ||
| 859 | 878 | ||
| 860 | /* pci resources */ | 879 | /* pci resources */ |
| 861 | unsigned long addr; | 880 | unsigned long addr; |
| @@ -928,6 +947,8 @@ struct rtsx_pcr { | |||
| 928 | const struct pcr_ops *ops; | 947 | const struct pcr_ops *ops; |
| 929 | enum PDEV_STAT state; | 948 | enum PDEV_STAT state; |
| 930 | 949 | ||
| 950 | u16 reg_pm_ctrl3; | ||
| 951 | |||
| 931 | int num_slots; | 952 | int num_slots; |
| 932 | struct rtsx_slot *slots; | 953 | struct rtsx_slot *slots; |
| 933 | }; | 954 | }; |
| @@ -935,6 +956,10 @@ struct rtsx_pcr { | |||
| 935 | #define CHK_PCI_PID(pcr, pid) ((pcr)->pci->device == (pid)) | 956 | #define CHK_PCI_PID(pcr, pid) ((pcr)->pci->device == (pid)) |
| 936 | #define PCI_VID(pcr) ((pcr)->pci->vendor) | 957 | #define PCI_VID(pcr) ((pcr)->pci->vendor) |
| 937 | #define PCI_PID(pcr) ((pcr)->pci->device) | 958 | #define PCI_PID(pcr) ((pcr)->pci->device) |
| 959 | #define is_version(pcr, pid, ver) \ | ||
| 960 | (CHK_PCI_PID(pcr, pid) && (pcr)->ic_version == (ver)) | ||
| 961 | #define pcr_dbg(pcr, fmt, arg...) \ | ||
| 962 | dev_dbg(&(pcr)->pci->dev, fmt, ##arg) | ||
| 938 | 963 | ||
| 939 | #define SDR104_PHASE(val) ((val) & 0xFF) | 964 | #define SDR104_PHASE(val) ((val) & 0xFF) |
| 940 | #define SDR50_PHASE(val) (((val) >> 8) & 0xFF) | 965 | #define SDR50_PHASE(val) (((val) >> 8) & 0xFF) |
| @@ -1004,4 +1029,17 @@ static inline void rtsx_pci_write_be32(struct rtsx_pcr *pcr, u16 reg, u32 val) | |||
| 1004 | rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, reg + 3, 0xFF, val); | 1029 | rtsx_pci_add_cmd(pcr, WRITE_REG_CMD, reg + 3, 0xFF, val); |
| 1005 | } | 1030 | } |
| 1006 | 1031 | ||
| 1032 | static inline int rtsx_pci_update_phy(struct rtsx_pcr *pcr, u8 addr, | ||
| 1033 | u16 mask, u16 append) | ||
| 1034 | { | ||
| 1035 | int err; | ||
| 1036 | u16 val; | ||
| 1037 | |||
| 1038 | err = rtsx_pci_read_phy_register(pcr, addr, &val); | ||
| 1039 | if (err < 0) | ||
| 1040 | return err; | ||
| 1041 | |||
| 1042 | return rtsx_pci_write_phy_register(pcr, addr, (val & mask) | append); | ||
| 1043 | } | ||
| 1044 | |||
| 1007 | #endif | 1045 | #endif |
diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h index 3fdb7cfbffb3..75115384f3fc 100644 --- a/include/linux/mfd/samsung/core.h +++ b/include/linux/mfd/samsung/core.h | |||
| @@ -58,13 +58,7 @@ enum sec_device_type { | |||
| 58 | * @irq_base: Base IRQ number for device, required for IRQs | 58 | * @irq_base: Base IRQ number for device, required for IRQs |
| 59 | * @irq: Generic IRQ number for device | 59 | * @irq: Generic IRQ number for device |
| 60 | * @irq_data: Runtime data structure for IRQ controller | 60 | * @irq_data: Runtime data structure for IRQ controller |
| 61 | * @ono: Power onoff IRQ number for s5m87xx | ||
| 62 | * @wakeup: Whether or not this is a wakeup device | 61 | * @wakeup: Whether or not this is a wakeup device |
| 63 | * @wtsr_smpl: Whether or not to enable in RTC driver the Watchdog | ||
| 64 | * Timer Software Reset (registers set to default value | ||
| 65 | * after PWRHOLD falling) and Sudden Momentary Power Loss | ||
| 66 | * (PMIC will enter power on sequence after short drop in | ||
| 67 | * VBATT voltage). | ||
| 68 | */ | 62 | */ |
| 69 | struct sec_pmic_dev { | 63 | struct sec_pmic_dev { |
| 70 | struct device *dev; | 64 | struct device *dev; |
| @@ -77,9 +71,7 @@ struct sec_pmic_dev { | |||
| 77 | int irq; | 71 | int irq; |
| 78 | struct regmap_irq_chip_data *irq_data; | 72 | struct regmap_irq_chip_data *irq_data; |
| 79 | 73 | ||
| 80 | int ono; | ||
| 81 | bool wakeup; | 74 | bool wakeup; |
| 82 | bool wtsr_smpl; | ||
| 83 | }; | 75 | }; |
| 84 | 76 | ||
| 85 | int sec_irq_init(struct sec_pmic_dev *sec_pmic); | 77 | int sec_irq_init(struct sec_pmic_dev *sec_pmic); |
| @@ -95,7 +87,6 @@ struct sec_platform_data { | |||
| 95 | int irq_base; | 87 | int irq_base; |
| 96 | int (*cfg_pmic_irq)(void); | 88 | int (*cfg_pmic_irq)(void); |
| 97 | 89 | ||
| 98 | int ono; | ||
| 99 | bool wakeup; | 90 | bool wakeup; |
| 100 | bool buck_voltage_lock; | 91 | bool buck_voltage_lock; |
| 101 | 92 | ||
diff --git a/include/linux/mfd/samsung/irq.h b/include/linux/mfd/samsung/irq.h index f35af7361b60..667aa40486dd 100644 --- a/include/linux/mfd/samsung/irq.h +++ b/include/linux/mfd/samsung/irq.h | |||
| @@ -74,8 +74,8 @@ enum s2mps11_irq { | |||
| 74 | S2MPS11_IRQ_MRB, | 74 | S2MPS11_IRQ_MRB, |
| 75 | 75 | ||
| 76 | S2MPS11_IRQ_RTC60S, | 76 | S2MPS11_IRQ_RTC60S, |
| 77 | S2MPS11_IRQ_RTCA0, | ||
| 78 | S2MPS11_IRQ_RTCA1, | 77 | S2MPS11_IRQ_RTCA1, |
| 78 | S2MPS11_IRQ_RTCA0, | ||
| 79 | S2MPS11_IRQ_SMPL, | 79 | S2MPS11_IRQ_SMPL, |
| 80 | S2MPS11_IRQ_RTC1S, | 80 | S2MPS11_IRQ_RTC1S, |
| 81 | S2MPS11_IRQ_WTSR, | 81 | S2MPS11_IRQ_WTSR, |
diff --git a/include/linux/mfd/sky81452.h b/include/linux/mfd/sky81452.h new file mode 100644 index 000000000000..b0925fa3e9ef --- /dev/null +++ b/include/linux/mfd/sky81452.h | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | /* | ||
| 2 | * sky81452.h SKY81452 MFD driver | ||
| 3 | * | ||
| 4 | * Copyright 2014 Skyworks Solutions Inc. | ||
| 5 | * Author : Gyungoh Yoo <jack.yoo@skyworksinc.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License version 2 | ||
| 9 | * as published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, but | ||
| 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 14 | * General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License along | ||
| 17 | * with this program; if not, see <http://www.gnu.org/licenses/>. | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef _SKY81452_H | ||
| 21 | #define _SKY81452_H | ||
| 22 | |||
| 23 | #include <linux/platform_data/sky81452-backlight.h> | ||
| 24 | #include <linux/regulator/machine.h> | ||
| 25 | |||
| 26 | struct sky81452_platform_data { | ||
| 27 | struct sky81452_bl_platform_data *bl_pdata; | ||
| 28 | struct regulator_init_data *regulator_init_data; | ||
| 29 | }; | ||
| 30 | |||
| 31 | #endif | ||
diff --git a/include/linux/mfd/stw481x.h b/include/linux/mfd/stw481x.h index eda121556e5d..833074b766bd 100644 --- a/include/linux/mfd/stw481x.h +++ b/include/linux/mfd/stw481x.h | |||
| @@ -41,15 +41,11 @@ | |||
| 41 | 41 | ||
| 42 | /** | 42 | /** |
| 43 | * struct stw481x - state holder for the Stw481x drivers | 43 | * struct stw481x - state holder for the Stw481x drivers |
| 44 | * @mutex: mutex to serialize I2C accesses | ||
| 45 | * @i2c_client: corresponding I2C client | 44 | * @i2c_client: corresponding I2C client |
| 46 | * @regulator: regulator device for regulator children | ||
| 47 | * @map: regmap handle to access device registers | 45 | * @map: regmap handle to access device registers |
| 48 | */ | 46 | */ |
| 49 | struct stw481x { | 47 | struct stw481x { |
| 50 | struct mutex lock; | ||
| 51 | struct i2c_client *client; | 48 | struct i2c_client *client; |
| 52 | struct regulator_dev *vmmc_regulator; | ||
| 53 | struct regmap *map; | 49 | struct regmap *map; |
| 54 | }; | 50 | }; |
| 55 | 51 | ||
diff --git a/include/linux/mfd/syscon/exynos5-pmu.h b/include/linux/mfd/syscon/exynos5-pmu.h index 00ef24bf6ede..9352adc95de6 100644 --- a/include/linux/mfd/syscon/exynos5-pmu.h +++ b/include/linux/mfd/syscon/exynos5-pmu.h | |||
| @@ -36,6 +36,9 @@ | |||
| 36 | #define EXYNOS5420_MTCADC_PHY_CONTROL (0x724) | 36 | #define EXYNOS5420_MTCADC_PHY_CONTROL (0x724) |
| 37 | #define EXYNOS5420_DPTX_PHY_CONTROL (0x728) | 37 | #define EXYNOS5420_DPTX_PHY_CONTROL (0x728) |
| 38 | 38 | ||
| 39 | /* Exynos5433 specific register definitions */ | ||
| 40 | #define EXYNOS5433_USBHOST30_PHY_CONTROL (0x728) | ||
| 41 | |||
| 39 | #define EXYNOS5_PHY_ENABLE BIT(0) | 42 | #define EXYNOS5_PHY_ENABLE BIT(0) |
| 40 | 43 | ||
| 41 | #define EXYNOS5_MIPI_PHY_S_RESETN BIT(1) | 44 | #define EXYNOS5_MIPI_PHY_S_RESETN BIT(1) |
diff --git a/include/linux/mfd/tc3589x.h b/include/linux/mfd/tc3589x.h index c203c9c56776..468c31a27fcf 100644 --- a/include/linux/mfd/tc3589x.h +++ b/include/linux/mfd/tc3589x.h | |||
| @@ -140,36 +140,13 @@ extern int tc3589x_set_bits(struct tc3589x *tc3589x, u8 reg, u8 mask, u8 val); | |||
| 140 | #define TC_KPD_DEBOUNCE_PERIOD 0xA3 | 140 | #define TC_KPD_DEBOUNCE_PERIOD 0xA3 |
| 141 | #define TC_KPD_SETTLE_TIME 0xA3 | 141 | #define TC_KPD_SETTLE_TIME 0xA3 |
| 142 | 142 | ||
| 143 | /** | ||
| 144 | * struct tc35893_platform_data - data structure for platform specific data | ||
| 145 | * @keymap_data: matrix scan code table for keycodes | ||
| 146 | * @krow: mask for available rows, value is 0xFF | ||
| 147 | * @kcol: mask for available columns, value is 0xFF | ||
| 148 | * @debounce_period: platform specific debounce time | ||
| 149 | * @settle_time: platform specific settle down time | ||
| 150 | * @irqtype: type of interrupt, falling or rising edge | ||
| 151 | * @enable_wakeup: specifies if keypad event can wake up system from sleep | ||
| 152 | * @no_autorepeat: flag for auto repetition | ||
| 153 | */ | ||
| 154 | struct tc3589x_keypad_platform_data { | ||
| 155 | const struct matrix_keymap_data *keymap_data; | ||
| 156 | u8 krow; | ||
| 157 | u8 kcol; | ||
| 158 | u8 debounce_period; | ||
| 159 | u8 settle_time; | ||
| 160 | unsigned long irqtype; | ||
| 161 | bool enable_wakeup; | ||
| 162 | bool no_autorepeat; | ||
| 163 | }; | ||
| 164 | 143 | ||
| 165 | /** | 144 | /** |
| 166 | * struct tc3589x_platform_data - TC3589x platform data | 145 | * struct tc3589x_platform_data - TC3589x platform data |
| 167 | * @block: bitmask of blocks to enable (use TC3589x_BLOCK_*) | 146 | * @block: bitmask of blocks to enable (use TC3589x_BLOCK_*) |
| 168 | * @keypad: keypad-specific platform data | ||
| 169 | */ | 147 | */ |
| 170 | struct tc3589x_platform_data { | 148 | struct tc3589x_platform_data { |
| 171 | unsigned int block; | 149 | unsigned int block; |
| 172 | const struct tc3589x_keypad_platform_data *keypad; | ||
| 173 | }; | 150 | }; |
| 174 | 151 | ||
| 175 | #endif | 152 | #endif |
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h index 3f4e994ace2b..1fd50dcfe47c 100644 --- a/include/linux/mfd/ti_am335x_tscadc.h +++ b/include/linux/mfd/ti_am335x_tscadc.h | |||
| @@ -128,6 +128,7 @@ | |||
| 128 | 128 | ||
| 129 | /* Sequencer Status */ | 129 | /* Sequencer Status */ |
| 130 | #define SEQ_STATUS BIT(5) | 130 | #define SEQ_STATUS BIT(5) |
| 131 | #define CHARGE_STEP 0x11 | ||
| 131 | 132 | ||
| 132 | #define ADC_CLK 3000000 | 133 | #define ADC_CLK 3000000 |
| 133 | #define TOTAL_STEPS 16 | 134 | #define TOTAL_STEPS 16 |
diff --git a/include/linux/mfd/wm8350/supply.h b/include/linux/mfd/wm8350/supply.h index 2b9479310bbd..8dc93673e34a 100644 --- a/include/linux/mfd/wm8350/supply.h +++ b/include/linux/mfd/wm8350/supply.h | |||
| @@ -123,9 +123,9 @@ struct wm8350_charger_policy { | |||
| 123 | 123 | ||
| 124 | struct wm8350_power { | 124 | struct wm8350_power { |
| 125 | struct platform_device *pdev; | 125 | struct platform_device *pdev; |
| 126 | struct power_supply battery; | 126 | struct power_supply *battery; |
| 127 | struct power_supply usb; | 127 | struct power_supply *usb; |
| 128 | struct power_supply ac; | 128 | struct power_supply *ac; |
| 129 | struct wm8350_charger_policy *policy; | 129 | struct wm8350_charger_policy *policy; |
| 130 | 130 | ||
| 131 | int rev_g_coeff; | 131 | int rev_g_coeff; |
diff --git a/include/linux/migrate.h b/include/linux/migrate.h index 78baed5f2952..cac1c0904d5f 100644 --- a/include/linux/migrate.h +++ b/include/linux/migrate.h | |||
| @@ -69,7 +69,6 @@ static inline int migrate_huge_page_move_mapping(struct address_space *mapping, | |||
| 69 | extern bool pmd_trans_migrating(pmd_t pmd); | 69 | extern bool pmd_trans_migrating(pmd_t pmd); |
| 70 | extern int migrate_misplaced_page(struct page *page, | 70 | extern int migrate_misplaced_page(struct page *page, |
| 71 | struct vm_area_struct *vma, int node); | 71 | struct vm_area_struct *vma, int node); |
| 72 | extern bool migrate_ratelimited(int node); | ||
| 73 | #else | 72 | #else |
| 74 | static inline bool pmd_trans_migrating(pmd_t pmd) | 73 | static inline bool pmd_trans_migrating(pmd_t pmd) |
| 75 | { | 74 | { |
| @@ -80,10 +79,6 @@ static inline int migrate_misplaced_page(struct page *page, | |||
| 80 | { | 79 | { |
| 81 | return -EAGAIN; /* can't migrate now */ | 80 | return -EAGAIN; /* can't migrate now */ |
| 82 | } | 81 | } |
| 83 | static inline bool migrate_ratelimited(int node) | ||
| 84 | { | ||
| 85 | return false; | ||
| 86 | } | ||
| 87 | #endif /* CONFIG_NUMA_BALANCING */ | 82 | #endif /* CONFIG_NUMA_BALANCING */ |
| 88 | 83 | ||
| 89 | #if defined(CONFIG_NUMA_BALANCING) && defined(CONFIG_TRANSPARENT_HUGEPAGE) | 84 | #if defined(CONFIG_NUMA_BALANCING) && defined(CONFIG_TRANSPARENT_HUGEPAGE) |
diff --git a/include/linux/mm.h b/include/linux/mm.h index 47a93928b90f..6571dd78e984 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h | |||
| @@ -1294,9 +1294,11 @@ int __set_page_dirty_no_writeback(struct page *page); | |||
| 1294 | int redirty_page_for_writepage(struct writeback_control *wbc, | 1294 | int redirty_page_for_writepage(struct writeback_control *wbc, |
| 1295 | struct page *page); | 1295 | struct page *page); |
| 1296 | void account_page_dirtied(struct page *page, struct address_space *mapping); | 1296 | void account_page_dirtied(struct page *page, struct address_space *mapping); |
| 1297 | void account_page_cleaned(struct page *page, struct address_space *mapping); | ||
| 1297 | int set_page_dirty(struct page *page); | 1298 | int set_page_dirty(struct page *page); |
| 1298 | int set_page_dirty_lock(struct page *page); | 1299 | int set_page_dirty_lock(struct page *page); |
| 1299 | int clear_page_dirty_for_io(struct page *page); | 1300 | int clear_page_dirty_for_io(struct page *page); |
| 1301 | |||
| 1300 | int get_cmdline(struct task_struct *task, char *buffer, int buflen); | 1302 | int get_cmdline(struct task_struct *task, char *buffer, int buflen); |
| 1301 | 1303 | ||
| 1302 | /* Is the vma a continuation of the stack vma above it? */ | 1304 | /* Is the vma a continuation of the stack vma above it? */ |
| @@ -2109,7 +2111,7 @@ static inline struct page *follow_page(struct vm_area_struct *vma, | |||
| 2109 | #define FOLL_FORCE 0x10 /* get_user_pages read/write w/o permission */ | 2111 | #define FOLL_FORCE 0x10 /* get_user_pages read/write w/o permission */ |
| 2110 | #define FOLL_NOWAIT 0x20 /* if a disk transfer is needed, start the IO | 2112 | #define FOLL_NOWAIT 0x20 /* if a disk transfer is needed, start the IO |
| 2111 | * and return without waiting upon it */ | 2113 | * and return without waiting upon it */ |
| 2112 | #define FOLL_MLOCK 0x40 /* mark page as mlocked */ | 2114 | #define FOLL_POPULATE 0x40 /* fault in page */ |
| 2113 | #define FOLL_SPLIT 0x80 /* don't return transhuge pages, split them */ | 2115 | #define FOLL_SPLIT 0x80 /* don't return transhuge pages, split them */ |
| 2114 | #define FOLL_HWPOISON 0x100 /* check page is hwpoisoned */ | 2116 | #define FOLL_HWPOISON 0x100 /* check page is hwpoisoned */ |
| 2115 | #define FOLL_NUMA 0x200 /* force NUMA hinting page fault */ | 2117 | #define FOLL_NUMA 0x200 /* force NUMA hinting page fault */ |
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 199a03aab8dc..590630eb59ba 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h | |||
| @@ -364,7 +364,9 @@ struct mm_struct { | |||
| 364 | atomic_t mm_users; /* How many users with user space? */ | 364 | atomic_t mm_users; /* How many users with user space? */ |
| 365 | atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */ | 365 | atomic_t mm_count; /* How many references to "struct mm_struct" (users count as 1) */ |
| 366 | atomic_long_t nr_ptes; /* PTE page table pages */ | 366 | atomic_long_t nr_ptes; /* PTE page table pages */ |
| 367 | #if CONFIG_PGTABLE_LEVELS > 2 | ||
| 367 | atomic_long_t nr_pmds; /* PMD page table pages */ | 368 | atomic_long_t nr_pmds; /* PMD page table pages */ |
| 369 | #endif | ||
| 368 | int map_count; /* number of VMAs */ | 370 | int map_count; /* number of VMAs */ |
| 369 | 371 | ||
| 370 | spinlock_t page_table_lock; /* Protects page tables and some counters */ | 372 | spinlock_t page_table_lock; /* Protects page tables and some counters */ |
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index 160448f920ac..de722d4e9d61 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h | |||
| @@ -79,7 +79,7 @@ struct mmc_command { | |||
| 79 | #define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK) | 79 | #define mmc_cmd_type(cmd) ((cmd)->flags & MMC_CMD_MASK) |
| 80 | 80 | ||
| 81 | unsigned int retries; /* max number of retries */ | 81 | unsigned int retries; /* max number of retries */ |
| 82 | unsigned int error; /* command error */ | 82 | int error; /* command error */ |
| 83 | 83 | ||
| 84 | /* | 84 | /* |
| 85 | * Standard errno values are used for errors, but some have specific | 85 | * Standard errno values are used for errors, but some have specific |
| @@ -108,7 +108,7 @@ struct mmc_data { | |||
| 108 | unsigned int timeout_clks; /* data timeout (in clocks) */ | 108 | unsigned int timeout_clks; /* data timeout (in clocks) */ |
| 109 | unsigned int blksz; /* data block size */ | 109 | unsigned int blksz; /* data block size */ |
| 110 | unsigned int blocks; /* number of blocks */ | 110 | unsigned int blocks; /* number of blocks */ |
| 111 | unsigned int error; /* data error */ | 111 | int error; /* data error */ |
| 112 | unsigned int flags; | 112 | unsigned int flags; |
| 113 | 113 | ||
| 114 | #define MMC_DATA_WRITE (1 << 8) | 114 | #define MMC_DATA_WRITE (1 << 8) |
diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index 471fb3116dbe..12111993a317 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h | |||
| @@ -44,6 +44,7 @@ struct mmc_data; | |||
| 44 | * struct dw_mci - MMC controller state shared between all slots | 44 | * struct dw_mci - MMC controller state shared between all slots |
| 45 | * @lock: Spinlock protecting the queue and associated data. | 45 | * @lock: Spinlock protecting the queue and associated data. |
| 46 | * @regs: Pointer to MMIO registers. | 46 | * @regs: Pointer to MMIO registers. |
| 47 | * @fifo_reg: Pointer to MMIO registers for data FIFO | ||
| 47 | * @sg: Scatterlist entry currently being processed by PIO code, if any. | 48 | * @sg: Scatterlist entry currently being processed by PIO code, if any. |
| 48 | * @sg_miter: PIO mapping scatterlist iterator. | 49 | * @sg_miter: PIO mapping scatterlist iterator. |
| 49 | * @cur_slot: The slot which is currently using the controller. | 50 | * @cur_slot: The slot which is currently using the controller. |
| @@ -79,7 +80,6 @@ struct mmc_data; | |||
| 79 | * @current_speed: Configured rate of the controller. | 80 | * @current_speed: Configured rate of the controller. |
| 80 | * @num_slots: Number of slots available. | 81 | * @num_slots: Number of slots available. |
| 81 | * @verid: Denote Version ID. | 82 | * @verid: Denote Version ID. |
| 82 | * @data_offset: Set the offset of DATA register according to VERID. | ||
| 83 | * @dev: Device associated with the MMC controller. | 83 | * @dev: Device associated with the MMC controller. |
| 84 | * @pdata: Platform data associated with the MMC controller. | 84 | * @pdata: Platform data associated with the MMC controller. |
| 85 | * @drv_data: Driver specific data for identified variant of the controller | 85 | * @drv_data: Driver specific data for identified variant of the controller |
| @@ -132,6 +132,7 @@ struct dw_mci { | |||
| 132 | spinlock_t lock; | 132 | spinlock_t lock; |
| 133 | spinlock_t irq_lock; | 133 | spinlock_t irq_lock; |
| 134 | void __iomem *regs; | 134 | void __iomem *regs; |
| 135 | void __iomem *fifo_reg; | ||
| 135 | 136 | ||
| 136 | struct scatterlist *sg; | 137 | struct scatterlist *sg; |
| 137 | struct sg_mapping_iter sg_miter; | 138 | struct sg_mapping_iter sg_miter; |
| @@ -172,7 +173,6 @@ struct dw_mci { | |||
| 172 | u32 num_slots; | 173 | u32 num_slots; |
| 173 | u32 fifoth_val; | 174 | u32 fifoth_val; |
| 174 | u16 verid; | 175 | u16 verid; |
| 175 | u16 data_offset; | ||
| 176 | struct device *dev; | 176 | struct device *dev; |
| 177 | struct dw_mci_board *pdata; | 177 | struct dw_mci_board *pdata; |
| 178 | const struct dw_mci_drv_data *drv_data; | 178 | const struct dw_mci_drv_data *drv_data; |
| @@ -202,6 +202,8 @@ struct dw_mci { | |||
| 202 | int irq; | 202 | int irq; |
| 203 | 203 | ||
| 204 | int sdio_id0; | 204 | int sdio_id0; |
| 205 | |||
| 206 | struct timer_list cmd11_timer; | ||
| 205 | }; | 207 | }; |
| 206 | 208 | ||
| 207 | /* DMA ops for Internal/External DMAC interface */ | 209 | /* DMA ops for Internal/External DMAC interface */ |
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 0c8cbe5d1550..b5bedaec6223 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
| @@ -80,12 +80,6 @@ struct mmc_ios { | |||
| 80 | 80 | ||
| 81 | struct mmc_host_ops { | 81 | struct mmc_host_ops { |
| 82 | /* | 82 | /* |
| 83 | * 'enable' is called when the host is claimed and 'disable' is called | ||
| 84 | * when the host is released. 'enable' and 'disable' are deprecated. | ||
| 85 | */ | ||
| 86 | int (*enable)(struct mmc_host *host); | ||
| 87 | int (*disable)(struct mmc_host *host); | ||
| 88 | /* | ||
| 89 | * It is optional for the host to implement pre_req and post_req in | 83 | * It is optional for the host to implement pre_req and post_req in |
| 90 | * order to support double buffering of requests (prepare one | 84 | * order to support double buffering of requests (prepare one |
| 91 | * request while another request is active). | 85 | * request while another request is active). |
diff --git a/include/linux/mmc/sdhci-spear.h b/include/linux/mmc/sdhci-spear.h deleted file mode 100644 index 8cc095a76cf8..000000000000 --- a/include/linux/mmc/sdhci-spear.h +++ /dev/null | |||
| @@ -1,34 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/mmc/sdhci-spear.h | ||
| 3 | * | ||
| 4 | * SDHCI declarations specific to ST SPEAr platform | ||
| 5 | * | ||
| 6 | * Copyright (C) 2010 ST Microelectronics | ||
| 7 | * Viresh Kumar <viresh.linux@gmail.com> | ||
| 8 | * | ||
| 9 | * This file is licensed under the terms of the GNU General Public | ||
| 10 | * License version 2. This program is licensed "as is" without any | ||
| 11 | * warranty of any kind, whether express or implied. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef LINUX_MMC_SDHCI_SPEAR_H | ||
| 15 | #define LINUX_MMC_SDHCI_SPEAR_H | ||
| 16 | |||
| 17 | #include <linux/platform_device.h> | ||
| 18 | /* | ||
| 19 | * struct sdhci_plat_data: spear sdhci platform data structure | ||
| 20 | * | ||
| 21 | * card_int_gpio: gpio pin used for card detection | ||
| 22 | */ | ||
| 23 | struct sdhci_plat_data { | ||
| 24 | int card_int_gpio; | ||
| 25 | }; | ||
| 26 | |||
| 27 | /* This function is used to set platform_data field of pdev->dev */ | ||
| 28 | static inline void | ||
| 29 | sdhci_set_plat_data(struct platform_device *pdev, struct sdhci_plat_data *data) | ||
| 30 | { | ||
| 31 | pdev->dev.platform_data = data; | ||
| 32 | } | ||
| 33 | |||
| 34 | #endif /* LINUX_MMC_SDHCI_SPEAR_H */ | ||
diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h deleted file mode 100644 index c3e3db196738..000000000000 --- a/include/linux/mmc/sdhci.h +++ /dev/null | |||
| @@ -1,218 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * linux/include/linux/mmc/sdhci.h - Secure Digital Host Controller Interface | ||
| 3 | * | ||
| 4 | * Copyright (C) 2005-2008 Pierre Ossman, All Rights Reserved. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or (at | ||
| 9 | * your option) any later version. | ||
| 10 | */ | ||
| 11 | #ifndef LINUX_MMC_SDHCI_H | ||
| 12 | #define LINUX_MMC_SDHCI_H | ||
| 13 | |||
| 14 | #include <linux/scatterlist.h> | ||
| 15 | #include <linux/compiler.h> | ||
| 16 | #include <linux/types.h> | ||
| 17 | #include <linux/io.h> | ||
| 18 | #include <linux/mmc/host.h> | ||
| 19 | |||
| 20 | struct sdhci_host_next { | ||
| 21 | unsigned int sg_count; | ||
| 22 | s32 cookie; | ||
| 23 | }; | ||
| 24 | |||
| 25 | struct sdhci_host { | ||
| 26 | /* Data set by hardware interface driver */ | ||
| 27 | const char *hw_name; /* Hardware bus name */ | ||
| 28 | |||
| 29 | unsigned int quirks; /* Deviations from spec. */ | ||
| 30 | |||
| 31 | /* Controller doesn't honor resets unless we touch the clock register */ | ||
| 32 | #define SDHCI_QUIRK_CLOCK_BEFORE_RESET (1<<0) | ||
| 33 | /* Controller has bad caps bits, but really supports DMA */ | ||
| 34 | #define SDHCI_QUIRK_FORCE_DMA (1<<1) | ||
| 35 | /* Controller doesn't like to be reset when there is no card inserted. */ | ||
| 36 | #define SDHCI_QUIRK_NO_CARD_NO_RESET (1<<2) | ||
| 37 | /* Controller doesn't like clearing the power reg before a change */ | ||
| 38 | #define SDHCI_QUIRK_SINGLE_POWER_WRITE (1<<3) | ||
| 39 | /* Controller has flaky internal state so reset it on each ios change */ | ||
| 40 | #define SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS (1<<4) | ||
| 41 | /* Controller has an unusable DMA engine */ | ||
| 42 | #define SDHCI_QUIRK_BROKEN_DMA (1<<5) | ||
| 43 | /* Controller has an unusable ADMA engine */ | ||
| 44 | #define SDHCI_QUIRK_BROKEN_ADMA (1<<6) | ||
| 45 | /* Controller can only DMA from 32-bit aligned addresses */ | ||
| 46 | #define SDHCI_QUIRK_32BIT_DMA_ADDR (1<<7) | ||
| 47 | /* Controller can only DMA chunk sizes that are a multiple of 32 bits */ | ||
| 48 | #define SDHCI_QUIRK_32BIT_DMA_SIZE (1<<8) | ||
| 49 | /* Controller can only ADMA chunks that are a multiple of 32 bits */ | ||
| 50 | #define SDHCI_QUIRK_32BIT_ADMA_SIZE (1<<9) | ||
| 51 | /* Controller needs to be reset after each request to stay stable */ | ||
| 52 | #define SDHCI_QUIRK_RESET_AFTER_REQUEST (1<<10) | ||
| 53 | /* Controller needs voltage and power writes to happen separately */ | ||
| 54 | #define SDHCI_QUIRK_NO_SIMULT_VDD_AND_POWER (1<<11) | ||
| 55 | /* Controller provides an incorrect timeout value for transfers */ | ||
| 56 | #define SDHCI_QUIRK_BROKEN_TIMEOUT_VAL (1<<12) | ||
| 57 | /* Controller has an issue with buffer bits for small transfers */ | ||
| 58 | #define SDHCI_QUIRK_BROKEN_SMALL_PIO (1<<13) | ||
| 59 | /* Controller does not provide transfer-complete interrupt when not busy */ | ||
| 60 | #define SDHCI_QUIRK_NO_BUSY_IRQ (1<<14) | ||
| 61 | /* Controller has unreliable card detection */ | ||
| 62 | #define SDHCI_QUIRK_BROKEN_CARD_DETECTION (1<<15) | ||
| 63 | /* Controller reports inverted write-protect state */ | ||
| 64 | #define SDHCI_QUIRK_INVERTED_WRITE_PROTECT (1<<16) | ||
| 65 | /* Controller does not like fast PIO transfers */ | ||
| 66 | #define SDHCI_QUIRK_PIO_NEEDS_DELAY (1<<18) | ||
| 67 | /* Controller has to be forced to use block size of 2048 bytes */ | ||
| 68 | #define SDHCI_QUIRK_FORCE_BLK_SZ_2048 (1<<20) | ||
| 69 | /* Controller cannot do multi-block transfers */ | ||
| 70 | #define SDHCI_QUIRK_NO_MULTIBLOCK (1<<21) | ||
| 71 | /* Controller can only handle 1-bit data transfers */ | ||
| 72 | #define SDHCI_QUIRK_FORCE_1_BIT_DATA (1<<22) | ||
| 73 | /* Controller needs 10ms delay between applying power and clock */ | ||
| 74 | #define SDHCI_QUIRK_DELAY_AFTER_POWER (1<<23) | ||
| 75 | /* Controller uses SDCLK instead of TMCLK for data timeouts */ | ||
| 76 | #define SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK (1<<24) | ||
| 77 | /* Controller reports wrong base clock capability */ | ||
| 78 | #define SDHCI_QUIRK_CAP_CLOCK_BASE_BROKEN (1<<25) | ||
| 79 | /* Controller cannot support End Attribute in NOP ADMA descriptor */ | ||
| 80 | #define SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC (1<<26) | ||
| 81 | /* Controller is missing device caps. Use caps provided by host */ | ||
| 82 | #define SDHCI_QUIRK_MISSING_CAPS (1<<27) | ||
| 83 | /* Controller uses Auto CMD12 command to stop the transfer */ | ||
| 84 | #define SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 (1<<28) | ||
| 85 | /* Controller doesn't have HISPD bit field in HI-SPEED SD card */ | ||
| 86 | #define SDHCI_QUIRK_NO_HISPD_BIT (1<<29) | ||
| 87 | /* Controller treats ADMA descriptors with length 0000h incorrectly */ | ||
| 88 | #define SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC (1<<30) | ||
| 89 | /* The read-only detection via SDHCI_PRESENT_STATE register is unstable */ | ||
| 90 | #define SDHCI_QUIRK_UNSTABLE_RO_DETECT (1<<31) | ||
| 91 | |||
| 92 | unsigned int quirks2; /* More deviations from spec. */ | ||
| 93 | |||
| 94 | #define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0) | ||
| 95 | #define SDHCI_QUIRK2_HOST_NO_CMD23 (1<<1) | ||
| 96 | /* The system physically doesn't support 1.8v, even if the host does */ | ||
| 97 | #define SDHCI_QUIRK2_NO_1_8_V (1<<2) | ||
| 98 | #define SDHCI_QUIRK2_PRESET_VALUE_BROKEN (1<<3) | ||
| 99 | #define SDHCI_QUIRK2_CARD_ON_NEEDS_BUS_ON (1<<4) | ||
| 100 | /* Controller has a non-standard host control register */ | ||
| 101 | #define SDHCI_QUIRK2_BROKEN_HOST_CONTROL (1<<5) | ||
| 102 | /* Controller does not support HS200 */ | ||
| 103 | #define SDHCI_QUIRK2_BROKEN_HS200 (1<<6) | ||
| 104 | /* Controller does not support DDR50 */ | ||
| 105 | #define SDHCI_QUIRK2_BROKEN_DDR50 (1<<7) | ||
| 106 | /* Stop command (CMD12) can set Transfer Complete when not using MMC_RSP_BUSY */ | ||
| 107 | #define SDHCI_QUIRK2_STOP_WITH_TC (1<<8) | ||
| 108 | /* Controller does not support 64-bit DMA */ | ||
| 109 | #define SDHCI_QUIRK2_BROKEN_64_BIT_DMA (1<<9) | ||
| 110 | /* need clear transfer mode register before send cmd */ | ||
| 111 | #define SDHCI_QUIRK2_CLEAR_TRANSFERMODE_REG_BEFORE_CMD (1<<10) | ||
| 112 | /* Capability register bit-63 indicates HS400 support */ | ||
| 113 | #define SDHCI_QUIRK2_CAPS_BIT63_FOR_HS400 (1<<11) | ||
| 114 | /* forced tuned clock */ | ||
| 115 | #define SDHCI_QUIRK2_TUNING_WORK_AROUND (1<<12) | ||
| 116 | /* disable the block count for single block transactions */ | ||
| 117 | #define SDHCI_QUIRK2_SUPPORT_SINGLE (1<<13) | ||
| 118 | |||
| 119 | int irq; /* Device IRQ */ | ||
| 120 | void __iomem *ioaddr; /* Mapped address */ | ||
| 121 | |||
| 122 | const struct sdhci_ops *ops; /* Low level hw interface */ | ||
| 123 | |||
| 124 | /* Internal data */ | ||
| 125 | struct mmc_host *mmc; /* MMC structure */ | ||
| 126 | u64 dma_mask; /* custom DMA mask */ | ||
| 127 | |||
| 128 | #if defined(CONFIG_LEDS_CLASS) || defined(CONFIG_LEDS_CLASS_MODULE) | ||
| 129 | struct led_classdev led; /* LED control */ | ||
| 130 | char led_name[32]; | ||
| 131 | #endif | ||
| 132 | |||
| 133 | spinlock_t lock; /* Mutex */ | ||
| 134 | |||
| 135 | int flags; /* Host attributes */ | ||
| 136 | #define SDHCI_USE_SDMA (1<<0) /* Host is SDMA capable */ | ||
| 137 | #define SDHCI_USE_ADMA (1<<1) /* Host is ADMA capable */ | ||
| 138 | #define SDHCI_REQ_USE_DMA (1<<2) /* Use DMA for this req. */ | ||
| 139 | #define SDHCI_DEVICE_DEAD (1<<3) /* Device unresponsive */ | ||
| 140 | #define SDHCI_SDR50_NEEDS_TUNING (1<<4) /* SDR50 needs tuning */ | ||
| 141 | #define SDHCI_NEEDS_RETUNING (1<<5) /* Host needs retuning */ | ||
| 142 | #define SDHCI_AUTO_CMD12 (1<<6) /* Auto CMD12 support */ | ||
| 143 | #define SDHCI_AUTO_CMD23 (1<<7) /* Auto CMD23 support */ | ||
| 144 | #define SDHCI_PV_ENABLED (1<<8) /* Preset value enabled */ | ||
| 145 | #define SDHCI_SDIO_IRQ_ENABLED (1<<9) /* SDIO irq enabled */ | ||
| 146 | #define SDHCI_SDR104_NEEDS_TUNING (1<<10) /* SDR104/HS200 needs tuning */ | ||
| 147 | #define SDHCI_USING_RETUNING_TIMER (1<<11) /* Host is using a retuning timer for the card */ | ||
| 148 | #define SDHCI_USE_64_BIT_DMA (1<<12) /* Use 64-bit DMA */ | ||
| 149 | #define SDHCI_HS400_TUNING (1<<13) /* Tuning for HS400 */ | ||
| 150 | |||
| 151 | unsigned int version; /* SDHCI spec. version */ | ||
| 152 | |||
| 153 | unsigned int max_clk; /* Max possible freq (MHz) */ | ||
| 154 | unsigned int timeout_clk; /* Timeout freq (KHz) */ | ||
| 155 | unsigned int clk_mul; /* Clock Muliplier value */ | ||
| 156 | |||
| 157 | unsigned int clock; /* Current clock (MHz) */ | ||
| 158 | u8 pwr; /* Current voltage */ | ||
| 159 | |||
| 160 | bool runtime_suspended; /* Host is runtime suspended */ | ||
| 161 | bool bus_on; /* Bus power prevents runtime suspend */ | ||
| 162 | bool preset_enabled; /* Preset is enabled */ | ||
| 163 | |||
| 164 | struct mmc_request *mrq; /* Current request */ | ||
| 165 | struct mmc_command *cmd; /* Current command */ | ||
| 166 | struct mmc_data *data; /* Current data request */ | ||
| 167 | unsigned int data_early:1; /* Data finished before cmd */ | ||
| 168 | unsigned int busy_handle:1; /* Handling the order of Busy-end */ | ||
| 169 | |||
| 170 | struct sg_mapping_iter sg_miter; /* SG state for PIO */ | ||
| 171 | unsigned int blocks; /* remaining PIO blocks */ | ||
| 172 | |||
| 173 | int sg_count; /* Mapped sg entries */ | ||
| 174 | |||
| 175 | void *adma_table; /* ADMA descriptor table */ | ||
| 176 | void *align_buffer; /* Bounce buffer */ | ||
| 177 | |||
| 178 | size_t adma_table_sz; /* ADMA descriptor table size */ | ||
| 179 | size_t align_buffer_sz; /* Bounce buffer size */ | ||
| 180 | |||
| 181 | dma_addr_t adma_addr; /* Mapped ADMA descr. table */ | ||
| 182 | dma_addr_t align_addr; /* Mapped bounce buffer */ | ||
| 183 | |||
| 184 | unsigned int desc_sz; /* ADMA descriptor size */ | ||
| 185 | unsigned int align_sz; /* ADMA alignment */ | ||
| 186 | unsigned int align_mask; /* ADMA alignment mask */ | ||
| 187 | |||
| 188 | struct tasklet_struct finish_tasklet; /* Tasklet structures */ | ||
| 189 | |||
| 190 | struct timer_list timer; /* Timer for timeouts */ | ||
| 191 | |||
| 192 | u32 caps; /* Alternative CAPABILITY_0 */ | ||
| 193 | u32 caps1; /* Alternative CAPABILITY_1 */ | ||
| 194 | |||
| 195 | unsigned int ocr_avail_sdio; /* OCR bit masks */ | ||
| 196 | unsigned int ocr_avail_sd; | ||
| 197 | unsigned int ocr_avail_mmc; | ||
| 198 | u32 ocr_mask; /* available voltages */ | ||
| 199 | |||
| 200 | unsigned timing; /* Current timing */ | ||
| 201 | |||
| 202 | u32 thread_isr; | ||
| 203 | |||
| 204 | /* cached registers */ | ||
| 205 | u32 ier; | ||
| 206 | |||
| 207 | wait_queue_head_t buf_ready_int; /* Waitqueue for Buffer Read Ready interrupt */ | ||
| 208 | unsigned int tuning_done; /* Condition flag set when CMD19 succeeds */ | ||
| 209 | |||
| 210 | unsigned int tuning_count; /* Timer count for re-tuning */ | ||
| 211 | unsigned int tuning_mode; /* Re-tuning mode supported by host */ | ||
| 212 | #define SDHCI_TUNING_MODE_1 0 | ||
| 213 | struct timer_list tuning_timer; /* Timer for tuning */ | ||
| 214 | |||
| 215 | struct sdhci_host_next next_data; | ||
| 216 | unsigned long private[0] ____cacheline_aligned; | ||
| 217 | }; | ||
| 218 | #endif /* LINUX_MMC_SDHCI_H */ | ||
diff --git a/include/linux/module.h b/include/linux/module.h index b03485bcb82a..c883b86ea964 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
| @@ -338,6 +338,8 @@ struct module { | |||
| 338 | #ifdef CONFIG_EVENT_TRACING | 338 | #ifdef CONFIG_EVENT_TRACING |
| 339 | struct ftrace_event_call **trace_events; | 339 | struct ftrace_event_call **trace_events; |
| 340 | unsigned int num_trace_events; | 340 | unsigned int num_trace_events; |
| 341 | struct trace_enum_map **trace_enums; | ||
| 342 | unsigned int num_trace_enums; | ||
| 341 | #endif | 343 | #endif |
| 342 | #ifdef CONFIG_FTRACE_MCOUNT_RECORD | 344 | #ifdef CONFIG_FTRACE_MCOUNT_RECORD |
| 343 | unsigned int num_ftrace_callsites; | 345 | unsigned int num_ftrace_callsites; |
diff --git a/include/linux/nmi.h b/include/linux/nmi.h index 9b2022ab4d85..3d46fb4708e0 100644 --- a/include/linux/nmi.h +++ b/include/linux/nmi.h | |||
| @@ -25,16 +25,11 @@ static inline void touch_nmi_watchdog(void) | |||
| 25 | #endif | 25 | #endif |
| 26 | 26 | ||
| 27 | #if defined(CONFIG_HARDLOCKUP_DETECTOR) | 27 | #if defined(CONFIG_HARDLOCKUP_DETECTOR) |
| 28 | extern void watchdog_enable_hardlockup_detector(bool val); | 28 | extern void hardlockup_detector_disable(void); |
| 29 | extern bool watchdog_hardlockup_detector_is_enabled(void); | ||
| 30 | #else | 29 | #else |
| 31 | static inline void watchdog_enable_hardlockup_detector(bool val) | 30 | static inline void hardlockup_detector_disable(void) |
| 32 | { | 31 | { |
| 33 | } | 32 | } |
| 34 | static inline bool watchdog_hardlockup_detector_is_enabled(void) | ||
| 35 | { | ||
| 36 | return true; | ||
| 37 | } | ||
| 38 | #endif | 33 | #endif |
| 39 | 34 | ||
| 40 | /* | 35 | /* |
| @@ -68,12 +63,20 @@ static inline bool trigger_allbutself_cpu_backtrace(void) | |||
| 68 | #ifdef CONFIG_LOCKUP_DETECTOR | 63 | #ifdef CONFIG_LOCKUP_DETECTOR |
| 69 | int hw_nmi_is_cpu_stuck(struct pt_regs *); | 64 | int hw_nmi_is_cpu_stuck(struct pt_regs *); |
| 70 | u64 hw_nmi_get_sample_period(int watchdog_thresh); | 65 | u64 hw_nmi_get_sample_period(int watchdog_thresh); |
| 66 | extern int nmi_watchdog_enabled; | ||
| 67 | extern int soft_watchdog_enabled; | ||
| 71 | extern int watchdog_user_enabled; | 68 | extern int watchdog_user_enabled; |
| 72 | extern int watchdog_thresh; | 69 | extern int watchdog_thresh; |
| 73 | extern int sysctl_softlockup_all_cpu_backtrace; | 70 | extern int sysctl_softlockup_all_cpu_backtrace; |
| 74 | struct ctl_table; | 71 | struct ctl_table; |
| 75 | extern int proc_dowatchdog(struct ctl_table *, int , | 72 | extern int proc_watchdog(struct ctl_table *, int , |
| 76 | void __user *, size_t *, loff_t *); | 73 | void __user *, size_t *, loff_t *); |
| 74 | extern int proc_nmi_watchdog(struct ctl_table *, int , | ||
| 75 | void __user *, size_t *, loff_t *); | ||
| 76 | extern int proc_soft_watchdog(struct ctl_table *, int , | ||
| 77 | void __user *, size_t *, loff_t *); | ||
| 78 | extern int proc_watchdog_thresh(struct ctl_table *, int , | ||
| 79 | void __user *, size_t *, loff_t *); | ||
| 77 | #endif | 80 | #endif |
| 78 | 81 | ||
| 79 | #ifdef CONFIG_HAVE_ACPI_APEI_NMI | 82 | #ifdef CONFIG_HAVE_ACPI_APEI_NMI |
diff --git a/include/linux/of.h b/include/linux/of.h index dfde07e77a63..9bfcc18ceab3 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -332,6 +332,7 @@ extern int of_count_phandle_with_args(const struct device_node *np, | |||
| 332 | 332 | ||
| 333 | extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)); | 333 | extern void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align)); |
| 334 | extern int of_alias_get_id(struct device_node *np, const char *stem); | 334 | extern int of_alias_get_id(struct device_node *np, const char *stem); |
| 335 | extern int of_alias_get_highest_id(const char *stem); | ||
| 335 | 336 | ||
| 336 | extern int of_machine_is_compatible(const char *compat); | 337 | extern int of_machine_is_compatible(const char *compat); |
| 337 | 338 | ||
| @@ -594,6 +595,11 @@ static inline int of_alias_get_id(struct device_node *np, const char *stem) | |||
| 594 | return -ENOSYS; | 595 | return -ENOSYS; |
| 595 | } | 596 | } |
| 596 | 597 | ||
| 598 | static inline int of_alias_get_highest_id(const char *stem) | ||
| 599 | { | ||
| 600 | return -ENOSYS; | ||
| 601 | } | ||
| 602 | |||
| 597 | static inline int of_machine_is_compatible(const char *compat) | 603 | static inline int of_machine_is_compatible(const char *compat) |
| 598 | { | 604 | { |
| 599 | return 0; | 605 | return 0; |
diff --git a/include/linux/of_device.h b/include/linux/of_device.h index ef370210ffb2..22801b10cef5 100644 --- a/include/linux/of_device.h +++ b/include/linux/of_device.h | |||
| @@ -53,6 +53,7 @@ static inline struct device_node *of_cpu_device_node_get(int cpu) | |||
| 53 | return of_node_get(cpu_dev->of_node); | 53 | return of_node_get(cpu_dev->of_node); |
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | void of_dma_configure(struct device *dev, struct device_node *np); | ||
| 56 | #else /* CONFIG_OF */ | 57 | #else /* CONFIG_OF */ |
| 57 | 58 | ||
| 58 | static inline int of_driver_match_device(struct device *dev, | 59 | static inline int of_driver_match_device(struct device *dev, |
| @@ -90,6 +91,8 @@ static inline struct device_node *of_cpu_device_node_get(int cpu) | |||
| 90 | { | 91 | { |
| 91 | return NULL; | 92 | return NULL; |
| 92 | } | 93 | } |
| 94 | static inline void of_dma_configure(struct device *dev, struct device_node *np) | ||
| 95 | {} | ||
| 93 | #endif /* CONFIG_OF */ | 96 | #endif /* CONFIG_OF */ |
| 94 | 97 | ||
| 95 | #endif /* _LINUX_OF_DEVICE_H */ | 98 | #endif /* _LINUX_OF_DEVICE_H */ |
diff --git a/include/linux/of_iommu.h b/include/linux/of_iommu.h index 16c75547d725..ffbe4707d4aa 100644 --- a/include/linux/of_iommu.h +++ b/include/linux/of_iommu.h | |||
| @@ -12,7 +12,8 @@ extern int of_get_dma_window(struct device_node *dn, const char *prefix, | |||
| 12 | size_t *size); | 12 | size_t *size); |
| 13 | 13 | ||
| 14 | extern void of_iommu_init(void); | 14 | extern void of_iommu_init(void); |
| 15 | extern struct iommu_ops *of_iommu_configure(struct device *dev); | 15 | extern struct iommu_ops *of_iommu_configure(struct device *dev, |
| 16 | struct device_node *master_np); | ||
| 16 | 17 | ||
| 17 | #else | 18 | #else |
| 18 | 19 | ||
| @@ -24,7 +25,8 @@ static inline int of_get_dma_window(struct device_node *dn, const char *prefix, | |||
| 24 | } | 25 | } |
| 25 | 26 | ||
| 26 | static inline void of_iommu_init(void) { } | 27 | static inline void of_iommu_init(void) { } |
| 27 | static inline struct iommu_ops *of_iommu_configure(struct device *dev) | 28 | static inline struct iommu_ops *of_iommu_configure(struct device *dev, |
| 29 | struct device_node *master_np) | ||
| 28 | { | 30 | { |
| 29 | return NULL; | 31 | return NULL; |
| 30 | } | 32 | } |
diff --git a/include/linux/of_pci.h b/include/linux/of_pci.h index ce0e5abeb454..29fd3fe1c035 100644 --- a/include/linux/of_pci.h +++ b/include/linux/of_pci.h | |||
| @@ -16,6 +16,7 @@ int of_pci_get_devfn(struct device_node *np); | |||
| 16 | int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin); | 16 | int of_irq_parse_and_map_pci(const struct pci_dev *dev, u8 slot, u8 pin); |
| 17 | int of_pci_parse_bus_range(struct device_node *node, struct resource *res); | 17 | int of_pci_parse_bus_range(struct device_node *node, struct resource *res); |
| 18 | int of_get_pci_domain_nr(struct device_node *node); | 18 | int of_get_pci_domain_nr(struct device_node *node); |
| 19 | void of_pci_dma_configure(struct pci_dev *pci_dev); | ||
| 19 | #else | 20 | #else |
| 20 | static inline int of_irq_parse_pci(const struct pci_dev *pdev, struct of_phandle_args *out_irq) | 21 | static inline int of_irq_parse_pci(const struct pci_dev *pdev, struct of_phandle_args *out_irq) |
| 21 | { | 22 | { |
| @@ -50,6 +51,8 @@ of_get_pci_domain_nr(struct device_node *node) | |||
| 50 | { | 51 | { |
| 51 | return -1; | 52 | return -1; |
| 52 | } | 53 | } |
| 54 | |||
| 55 | static inline void of_pci_dma_configure(struct pci_dev *pci_dev) { } | ||
| 53 | #endif | 56 | #endif |
| 54 | 57 | ||
| 55 | #if defined(CONFIG_OF_ADDRESS) | 58 | #if defined(CONFIG_OF_ADDRESS) |
diff --git a/include/linux/oom.h b/include/linux/oom.h index d5771bed59c9..44b2f6f7bbd8 100644 --- a/include/linux/oom.h +++ b/include/linux/oom.h | |||
| @@ -66,7 +66,8 @@ extern bool oom_zonelist_trylock(struct zonelist *zonelist, gfp_t gfp_flags); | |||
| 66 | extern void oom_zonelist_unlock(struct zonelist *zonelist, gfp_t gfp_flags); | 66 | extern void oom_zonelist_unlock(struct zonelist *zonelist, gfp_t gfp_flags); |
| 67 | 67 | ||
| 68 | extern void check_panic_on_oom(enum oom_constraint constraint, gfp_t gfp_mask, | 68 | extern void check_panic_on_oom(enum oom_constraint constraint, gfp_t gfp_mask, |
| 69 | int order, const nodemask_t *nodemask); | 69 | int order, const nodemask_t *nodemask, |
| 70 | struct mem_cgroup *memcg); | ||
| 70 | 71 | ||
| 71 | extern enum oom_scan_t oom_scan_process_thread(struct task_struct *task, | 72 | extern enum oom_scan_t oom_scan_process_thread(struct task_struct *task, |
| 72 | unsigned long totalpages, const nodemask_t *nodemask, | 73 | unsigned long totalpages, const nodemask_t *nodemask, |
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 5ed7bdaf22d5..c851ff92d5b3 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h | |||
| @@ -328,8 +328,6 @@ static inline void SetPageUptodate(struct page *page) | |||
| 328 | 328 | ||
| 329 | CLEARPAGEFLAG(Uptodate, uptodate) | 329 | CLEARPAGEFLAG(Uptodate, uptodate) |
| 330 | 330 | ||
| 331 | extern void cancel_dirty_page(struct page *page, unsigned int account_size); | ||
| 332 | |||
| 333 | int test_clear_page_writeback(struct page *page); | 331 | int test_clear_page_writeback(struct page *page); |
| 334 | int __test_set_page_writeback(struct page *page, bool keep_write); | 332 | int __test_set_page_writeback(struct page *page, bool keep_write); |
| 335 | 333 | ||
diff --git a/include/linux/pci-acpi.h b/include/linux/pci-acpi.h index 24c7728ca681..a965efa52152 100644 --- a/include/linux/pci-acpi.h +++ b/include/linux/pci-acpi.h | |||
| @@ -77,6 +77,11 @@ static inline void acpiphp_remove_slots(struct pci_bus *bus) { } | |||
| 77 | static inline void acpiphp_check_host_bridge(struct acpi_device *adev) { } | 77 | static inline void acpiphp_check_host_bridge(struct acpi_device *adev) { } |
| 78 | #endif | 78 | #endif |
| 79 | 79 | ||
| 80 | extern const u8 pci_acpi_dsm_uuid[]; | ||
| 81 | #define DEVICE_LABEL_DSM 0x07 | ||
| 82 | #define RESET_DELAY_DSM 0x08 | ||
| 83 | #define FUNCTION_DELAY_DSM 0x09 | ||
| 84 | |||
| 80 | #else /* CONFIG_ACPI */ | 85 | #else /* CONFIG_ACPI */ |
| 81 | static inline void acpi_pci_add_bus(struct pci_bus *bus) { } | 86 | static inline void acpi_pci_add_bus(struct pci_bus *bus) { } |
| 82 | static inline void acpi_pci_remove_bus(struct pci_bus *bus) { } | 87 | static inline void acpi_pci_remove_bus(struct pci_bus *bus) { } |
diff --git a/include/linux/pci-aspm.h b/include/linux/pci-aspm.h index 8af4610c2e41..207c561fb40e 100644 --- a/include/linux/pci-aspm.h +++ b/include/linux/pci-aspm.h | |||
| @@ -29,7 +29,6 @@ void pcie_aspm_pm_state_change(struct pci_dev *pdev); | |||
| 29 | void pcie_aspm_powersave_config_link(struct pci_dev *pdev); | 29 | void pcie_aspm_powersave_config_link(struct pci_dev *pdev); |
| 30 | void pci_disable_link_state(struct pci_dev *pdev, int state); | 30 | void pci_disable_link_state(struct pci_dev *pdev, int state); |
| 31 | void pci_disable_link_state_locked(struct pci_dev *pdev, int state); | 31 | void pci_disable_link_state_locked(struct pci_dev *pdev, int state); |
| 32 | void pcie_clear_aspm(struct pci_bus *bus); | ||
| 33 | void pcie_no_aspm(void); | 32 | void pcie_no_aspm(void); |
| 34 | #else | 33 | #else |
| 35 | static inline void pcie_aspm_init_link_state(struct pci_dev *pdev) | 34 | static inline void pcie_aspm_init_link_state(struct pci_dev *pdev) |
| @@ -47,9 +46,6 @@ static inline void pcie_aspm_powersave_config_link(struct pci_dev *pdev) | |||
| 47 | static inline void pci_disable_link_state(struct pci_dev *pdev, int state) | 46 | static inline void pci_disable_link_state(struct pci_dev *pdev, int state) |
| 48 | { | 47 | { |
| 49 | } | 48 | } |
| 50 | static inline void pcie_clear_aspm(struct pci_bus *bus) | ||
| 51 | { | ||
| 52 | } | ||
| 53 | static inline void pcie_no_aspm(void) | 49 | static inline void pcie_no_aspm(void) |
| 54 | { | 50 | { |
| 55 | } | 51 | } |
diff --git a/include/linux/pci.h b/include/linux/pci.h index 211e9da8a7d7..e63112fb55be 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -406,6 +406,7 @@ struct pci_host_bridge { | |||
| 406 | struct list_head windows; /* resource_entry */ | 406 | struct list_head windows; /* resource_entry */ |
| 407 | void (*release_fn)(struct pci_host_bridge *); | 407 | void (*release_fn)(struct pci_host_bridge *); |
| 408 | void *release_data; | 408 | void *release_data; |
| 409 | unsigned int ignore_reset_delay:1; /* for entire hierarchy */ | ||
| 409 | }; | 410 | }; |
| 410 | 411 | ||
| 411 | #define to_pci_host_bridge(n) container_of(n, struct pci_host_bridge, dev) | 412 | #define to_pci_host_bridge(n) container_of(n, struct pci_host_bridge, dev) |
| @@ -510,6 +511,9 @@ static inline struct pci_dev *pci_upstream_bridge(struct pci_dev *dev) | |||
| 510 | return dev->bus->self; | 511 | return dev->bus->self; |
| 511 | } | 512 | } |
| 512 | 513 | ||
| 514 | struct device *pci_get_host_bridge_device(struct pci_dev *dev); | ||
| 515 | void pci_put_host_bridge_device(struct device *dev); | ||
| 516 | |||
| 513 | #ifdef CONFIG_PCI_MSI | 517 | #ifdef CONFIG_PCI_MSI |
| 514 | static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) | 518 | static inline bool pci_dev_msi_enabled(struct pci_dev *pci_dev) |
| 515 | { | 519 | { |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index e63c02a93f6b..38cff8f6716d 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2315,6 +2315,8 @@ | |||
| 2315 | #define PCI_VENDOR_ID_CENATEK 0x16CA | 2315 | #define PCI_VENDOR_ID_CENATEK 0x16CA |
| 2316 | #define PCI_DEVICE_ID_CENATEK_IDE 0x0001 | 2316 | #define PCI_DEVICE_ID_CENATEK_IDE 0x0001 |
| 2317 | 2317 | ||
| 2318 | #define PCI_VENDOR_ID_SYNOPSYS 0x16c3 | ||
| 2319 | |||
| 2318 | #define PCI_VENDOR_ID_VITESSE 0x1725 | 2320 | #define PCI_VENDOR_ID_VITESSE 0x1725 |
| 2319 | #define PCI_DEVICE_ID_VITESSE_VSC7174 0x7174 | 2321 | #define PCI_DEVICE_ID_VITESSE_VSC7174 0x7174 |
| 2320 | 2322 | ||
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 2b621982938d..61992cf2e977 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -53,6 +53,7 @@ struct perf_guest_info_callbacks { | |||
| 53 | #include <linux/sysfs.h> | 53 | #include <linux/sysfs.h> |
| 54 | #include <linux/perf_regs.h> | 54 | #include <linux/perf_regs.h> |
| 55 | #include <linux/workqueue.h> | 55 | #include <linux/workqueue.h> |
| 56 | #include <linux/cgroup.h> | ||
| 56 | #include <asm/local.h> | 57 | #include <asm/local.h> |
| 57 | 58 | ||
| 58 | struct perf_callchain_entry { | 59 | struct perf_callchain_entry { |
| @@ -118,10 +119,19 @@ struct hw_perf_event { | |||
| 118 | struct hrtimer hrtimer; | 119 | struct hrtimer hrtimer; |
| 119 | }; | 120 | }; |
| 120 | struct { /* tracepoint */ | 121 | struct { /* tracepoint */ |
| 121 | struct task_struct *tp_target; | ||
| 122 | /* for tp_event->class */ | 122 | /* for tp_event->class */ |
| 123 | struct list_head tp_list; | 123 | struct list_head tp_list; |
| 124 | }; | 124 | }; |
| 125 | struct { /* intel_cqm */ | ||
| 126 | int cqm_state; | ||
| 127 | int cqm_rmid; | ||
| 128 | struct list_head cqm_events_entry; | ||
| 129 | struct list_head cqm_groups_entry; | ||
| 130 | struct list_head cqm_group_entry; | ||
| 131 | }; | ||
| 132 | struct { /* itrace */ | ||
| 133 | int itrace_started; | ||
| 134 | }; | ||
| 125 | #ifdef CONFIG_HAVE_HW_BREAKPOINT | 135 | #ifdef CONFIG_HAVE_HW_BREAKPOINT |
| 126 | struct { /* breakpoint */ | 136 | struct { /* breakpoint */ |
| 127 | /* | 137 | /* |
| @@ -129,12 +139,12 @@ struct hw_perf_event { | |||
| 129 | * problem hw_breakpoint has with context | 139 | * problem hw_breakpoint has with context |
| 130 | * creation and event initalization. | 140 | * creation and event initalization. |
| 131 | */ | 141 | */ |
| 132 | struct task_struct *bp_target; | ||
| 133 | struct arch_hw_breakpoint info; | 142 | struct arch_hw_breakpoint info; |
| 134 | struct list_head bp_list; | 143 | struct list_head bp_list; |
| 135 | }; | 144 | }; |
| 136 | #endif | 145 | #endif |
| 137 | }; | 146 | }; |
| 147 | struct task_struct *target; | ||
| 138 | int state; | 148 | int state; |
| 139 | local64_t prev_count; | 149 | local64_t prev_count; |
| 140 | u64 sample_period; | 150 | u64 sample_period; |
| @@ -166,6 +176,11 @@ struct perf_event; | |||
| 166 | * pmu::capabilities flags | 176 | * pmu::capabilities flags |
| 167 | */ | 177 | */ |
| 168 | #define PERF_PMU_CAP_NO_INTERRUPT 0x01 | 178 | #define PERF_PMU_CAP_NO_INTERRUPT 0x01 |
| 179 | #define PERF_PMU_CAP_NO_NMI 0x02 | ||
| 180 | #define PERF_PMU_CAP_AUX_NO_SG 0x04 | ||
| 181 | #define PERF_PMU_CAP_AUX_SW_DOUBLEBUF 0x08 | ||
| 182 | #define PERF_PMU_CAP_EXCLUSIVE 0x10 | ||
| 183 | #define PERF_PMU_CAP_ITRACE 0x20 | ||
| 169 | 184 | ||
| 170 | /** | 185 | /** |
| 171 | * struct pmu - generic performance monitoring unit | 186 | * struct pmu - generic performance monitoring unit |
| @@ -186,6 +201,7 @@ struct pmu { | |||
| 186 | 201 | ||
| 187 | int * __percpu pmu_disable_count; | 202 | int * __percpu pmu_disable_count; |
| 188 | struct perf_cpu_context * __percpu pmu_cpu_context; | 203 | struct perf_cpu_context * __percpu pmu_cpu_context; |
| 204 | atomic_t exclusive_cnt; /* < 0: cpu; > 0: tsk */ | ||
| 189 | int task_ctx_nr; | 205 | int task_ctx_nr; |
| 190 | int hrtimer_interval_ms; | 206 | int hrtimer_interval_ms; |
| 191 | 207 | ||
| @@ -262,9 +278,32 @@ struct pmu { | |||
| 262 | int (*event_idx) (struct perf_event *event); /*optional */ | 278 | int (*event_idx) (struct perf_event *event); /*optional */ |
| 263 | 279 | ||
| 264 | /* | 280 | /* |
| 265 | * flush branch stack on context-switches (needed in cpu-wide mode) | 281 | * context-switches callback |
| 282 | */ | ||
| 283 | void (*sched_task) (struct perf_event_context *ctx, | ||
| 284 | bool sched_in); | ||
| 285 | /* | ||
| 286 | * PMU specific data size | ||
| 287 | */ | ||
| 288 | size_t task_ctx_size; | ||
| 289 | |||
| 290 | |||
| 291 | /* | ||
| 292 | * Return the count value for a counter. | ||
| 293 | */ | ||
| 294 | u64 (*count) (struct perf_event *event); /*optional*/ | ||
| 295 | |||
| 296 | /* | ||
| 297 | * Set up pmu-private data structures for an AUX area | ||
| 266 | */ | 298 | */ |
| 267 | void (*flush_branch_stack) (void); | 299 | void *(*setup_aux) (int cpu, void **pages, |
| 300 | int nr_pages, bool overwrite); | ||
| 301 | /* optional */ | ||
| 302 | |||
| 303 | /* | ||
| 304 | * Free pmu-private AUX data structures | ||
| 305 | */ | ||
| 306 | void (*free_aux) (void *aux); /* optional */ | ||
| 268 | }; | 307 | }; |
| 269 | 308 | ||
| 270 | /** | 309 | /** |
| @@ -300,6 +339,7 @@ struct swevent_hlist { | |||
| 300 | #define PERF_ATTACH_CONTEXT 0x01 | 339 | #define PERF_ATTACH_CONTEXT 0x01 |
| 301 | #define PERF_ATTACH_GROUP 0x02 | 340 | #define PERF_ATTACH_GROUP 0x02 |
| 302 | #define PERF_ATTACH_TASK 0x04 | 341 | #define PERF_ATTACH_TASK 0x04 |
| 342 | #define PERF_ATTACH_TASK_DATA 0x08 | ||
| 303 | 343 | ||
| 304 | struct perf_cgroup; | 344 | struct perf_cgroup; |
| 305 | struct ring_buffer; | 345 | struct ring_buffer; |
| @@ -438,6 +478,7 @@ struct perf_event { | |||
| 438 | struct pid_namespace *ns; | 478 | struct pid_namespace *ns; |
| 439 | u64 id; | 479 | u64 id; |
| 440 | 480 | ||
| 481 | u64 (*clock)(void); | ||
| 441 | perf_overflow_handler_t overflow_handler; | 482 | perf_overflow_handler_t overflow_handler; |
| 442 | void *overflow_handler_context; | 483 | void *overflow_handler_context; |
| 443 | 484 | ||
| @@ -504,7 +545,7 @@ struct perf_event_context { | |||
| 504 | u64 generation; | 545 | u64 generation; |
| 505 | int pin_count; | 546 | int pin_count; |
| 506 | int nr_cgroups; /* cgroup evts */ | 547 | int nr_cgroups; /* cgroup evts */ |
| 507 | int nr_branch_stack; /* branch_stack evt */ | 548 | void *task_ctx_data; /* pmu specific data */ |
| 508 | struct rcu_head rcu_head; | 549 | struct rcu_head rcu_head; |
| 509 | 550 | ||
| 510 | struct delayed_work orphans_remove; | 551 | struct delayed_work orphans_remove; |
| @@ -536,12 +577,52 @@ struct perf_output_handle { | |||
| 536 | struct ring_buffer *rb; | 577 | struct ring_buffer *rb; |
| 537 | unsigned long wakeup; | 578 | unsigned long wakeup; |
| 538 | unsigned long size; | 579 | unsigned long size; |
| 539 | void *addr; | 580 | union { |
| 581 | void *addr; | ||
| 582 | unsigned long head; | ||
| 583 | }; | ||
| 540 | int page; | 584 | int page; |
| 541 | }; | 585 | }; |
| 542 | 586 | ||
| 587 | #ifdef CONFIG_CGROUP_PERF | ||
| 588 | |||
| 589 | /* | ||
| 590 | * perf_cgroup_info keeps track of time_enabled for a cgroup. | ||
| 591 | * This is a per-cpu dynamically allocated data structure. | ||
| 592 | */ | ||
| 593 | struct perf_cgroup_info { | ||
| 594 | u64 time; | ||
| 595 | u64 timestamp; | ||
| 596 | }; | ||
| 597 | |||
| 598 | struct perf_cgroup { | ||
| 599 | struct cgroup_subsys_state css; | ||
| 600 | struct perf_cgroup_info __percpu *info; | ||
| 601 | }; | ||
| 602 | |||
| 603 | /* | ||
| 604 | * Must ensure cgroup is pinned (css_get) before calling | ||
| 605 | * this function. In other words, we cannot call this function | ||
| 606 | * if there is no cgroup event for the current CPU context. | ||
| 607 | */ | ||
| 608 | static inline struct perf_cgroup * | ||
| 609 | perf_cgroup_from_task(struct task_struct *task) | ||
| 610 | { | ||
| 611 | return container_of(task_css(task, perf_event_cgrp_id), | ||
| 612 | struct perf_cgroup, css); | ||
| 613 | } | ||
| 614 | #endif /* CONFIG_CGROUP_PERF */ | ||
| 615 | |||
| 543 | #ifdef CONFIG_PERF_EVENTS | 616 | #ifdef CONFIG_PERF_EVENTS |
| 544 | 617 | ||
| 618 | extern void *perf_aux_output_begin(struct perf_output_handle *handle, | ||
| 619 | struct perf_event *event); | ||
| 620 | extern void perf_aux_output_end(struct perf_output_handle *handle, | ||
| 621 | unsigned long size, bool truncated); | ||
| 622 | extern int perf_aux_output_skip(struct perf_output_handle *handle, | ||
| 623 | unsigned long size); | ||
| 624 | extern void *perf_get_aux(struct perf_output_handle *handle); | ||
| 625 | |||
| 545 | extern int perf_pmu_register(struct pmu *pmu, const char *name, int type); | 626 | extern int perf_pmu_register(struct pmu *pmu, const char *name, int type); |
| 546 | extern void perf_pmu_unregister(struct pmu *pmu); | 627 | extern void perf_pmu_unregister(struct pmu *pmu); |
| 547 | 628 | ||
| @@ -558,6 +639,8 @@ extern void perf_event_delayed_put(struct task_struct *task); | |||
| 558 | extern void perf_event_print_debug(void); | 639 | extern void perf_event_print_debug(void); |
| 559 | extern void perf_pmu_disable(struct pmu *pmu); | 640 | extern void perf_pmu_disable(struct pmu *pmu); |
| 560 | extern void perf_pmu_enable(struct pmu *pmu); | 641 | extern void perf_pmu_enable(struct pmu *pmu); |
| 642 | extern void perf_sched_cb_dec(struct pmu *pmu); | ||
| 643 | extern void perf_sched_cb_inc(struct pmu *pmu); | ||
| 561 | extern int perf_event_task_disable(void); | 644 | extern int perf_event_task_disable(void); |
| 562 | extern int perf_event_task_enable(void); | 645 | extern int perf_event_task_enable(void); |
| 563 | extern int perf_event_refresh(struct perf_event *event, int refresh); | 646 | extern int perf_event_refresh(struct perf_event *event, int refresh); |
| @@ -731,6 +814,11 @@ static inline void perf_event_task_sched_out(struct task_struct *prev, | |||
| 731 | __perf_event_task_sched_out(prev, next); | 814 | __perf_event_task_sched_out(prev, next); |
| 732 | } | 815 | } |
| 733 | 816 | ||
| 817 | static inline u64 __perf_event_count(struct perf_event *event) | ||
| 818 | { | ||
| 819 | return local64_read(&event->count) + atomic64_read(&event->child_count); | ||
| 820 | } | ||
| 821 | |||
| 734 | extern void perf_event_mmap(struct vm_area_struct *vma); | 822 | extern void perf_event_mmap(struct vm_area_struct *vma); |
| 735 | extern struct perf_guest_info_callbacks *perf_guest_cbs; | 823 | extern struct perf_guest_info_callbacks *perf_guest_cbs; |
| 736 | extern int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks); | 824 | extern int perf_register_guest_info_callbacks(struct perf_guest_info_callbacks *callbacks); |
| @@ -800,6 +888,16 @@ static inline bool has_branch_stack(struct perf_event *event) | |||
| 800 | return event->attr.sample_type & PERF_SAMPLE_BRANCH_STACK; | 888 | return event->attr.sample_type & PERF_SAMPLE_BRANCH_STACK; |
| 801 | } | 889 | } |
| 802 | 890 | ||
| 891 | static inline bool needs_branch_stack(struct perf_event *event) | ||
| 892 | { | ||
| 893 | return event->attr.branch_sample_type != 0; | ||
| 894 | } | ||
| 895 | |||
| 896 | static inline bool has_aux(struct perf_event *event) | ||
| 897 | { | ||
| 898 | return event->pmu->setup_aux; | ||
| 899 | } | ||
| 900 | |||
| 803 | extern int perf_output_begin(struct perf_output_handle *handle, | 901 | extern int perf_output_begin(struct perf_output_handle *handle, |
| 804 | struct perf_event *event, unsigned int size); | 902 | struct perf_event *event, unsigned int size); |
| 805 | extern void perf_output_end(struct perf_output_handle *handle); | 903 | extern void perf_output_end(struct perf_output_handle *handle); |
| @@ -815,6 +913,17 @@ extern void perf_event_disable(struct perf_event *event); | |||
| 815 | extern int __perf_event_disable(void *info); | 913 | extern int __perf_event_disable(void *info); |
| 816 | extern void perf_event_task_tick(void); | 914 | extern void perf_event_task_tick(void); |
| 817 | #else /* !CONFIG_PERF_EVENTS: */ | 915 | #else /* !CONFIG_PERF_EVENTS: */ |
| 916 | static inline void * | ||
| 917 | perf_aux_output_begin(struct perf_output_handle *handle, | ||
| 918 | struct perf_event *event) { return NULL; } | ||
| 919 | static inline void | ||
| 920 | perf_aux_output_end(struct perf_output_handle *handle, unsigned long size, | ||
| 921 | bool truncated) { } | ||
| 922 | static inline int | ||
| 923 | perf_aux_output_skip(struct perf_output_handle *handle, | ||
| 924 | unsigned long size) { return -EINVAL; } | ||
| 925 | static inline void * | ||
| 926 | perf_get_aux(struct perf_output_handle *handle) { return NULL; } | ||
| 818 | static inline void | 927 | static inline void |
| 819 | perf_event_task_sched_in(struct task_struct *prev, | 928 | perf_event_task_sched_in(struct task_struct *prev, |
| 820 | struct task_struct *task) { } | 929 | struct task_struct *task) { } |
diff --git a/include/linux/platform_data/hsmmc-omap.h b/include/linux/platform_data/hsmmc-omap.h index 67bbcf0785f6..8e981be2e2c2 100644 --- a/include/linux/platform_data/hsmmc-omap.h +++ b/include/linux/platform_data/hsmmc-omap.h | |||
| @@ -55,9 +55,6 @@ struct omap_hsmmc_platform_data { | |||
| 55 | u32 caps; /* Used for the MMC driver on 2430 and later */ | 55 | u32 caps; /* Used for the MMC driver on 2430 and later */ |
| 56 | u32 pm_caps; /* PM capabilities of the mmc */ | 56 | u32 pm_caps; /* PM capabilities of the mmc */ |
| 57 | 57 | ||
| 58 | /* switch pin can be for card detect (default) or card cover */ | ||
| 59 | unsigned cover:1; | ||
| 60 | |||
| 61 | /* use the internal clock */ | 58 | /* use the internal clock */ |
| 62 | unsigned internal_clock:1; | 59 | unsigned internal_clock:1; |
| 63 | 60 | ||
| @@ -73,7 +70,8 @@ struct omap_hsmmc_platform_data { | |||
| 73 | #define HSMMC_HAS_HSPE_SUPPORT (1 << 2) | 70 | #define HSMMC_HAS_HSPE_SUPPORT (1 << 2) |
| 74 | unsigned features; | 71 | unsigned features; |
| 75 | 72 | ||
| 76 | int switch_pin; /* gpio (card detect) */ | 73 | int gpio_cd; /* gpio (card detect) */ |
| 74 | int gpio_cod; /* gpio (cover detect) */ | ||
| 77 | int gpio_wp; /* gpio (write protect) */ | 75 | int gpio_wp; /* gpio (write protect) */ |
| 78 | 76 | ||
| 79 | int (*set_power)(struct device *dev, int power_on, int vdd); | 77 | int (*set_power)(struct device *dev, int power_on, int vdd); |
diff --git a/include/linux/platform_data/i2c-davinci.h b/include/linux/platform_data/i2c-davinci.h index 2312d197dfb7..89fd34727a24 100644 --- a/include/linux/platform_data/i2c-davinci.h +++ b/include/linux/platform_data/i2c-davinci.h | |||
| @@ -18,6 +18,7 @@ struct davinci_i2c_platform_data { | |||
| 18 | unsigned int bus_delay; /* post-transaction delay (usec) */ | 18 | unsigned int bus_delay; /* post-transaction delay (usec) */ |
| 19 | unsigned int sda_pin; /* GPIO pin ID to use for SDA */ | 19 | unsigned int sda_pin; /* GPIO pin ID to use for SDA */ |
| 20 | unsigned int scl_pin; /* GPIO pin ID to use for SCL */ | 20 | unsigned int scl_pin; /* GPIO pin ID to use for SCL */ |
| 21 | bool has_pfunc; /*chip has a ICPFUNC register */ | ||
| 21 | }; | 22 | }; |
| 22 | 23 | ||
| 23 | /* for board setup code */ | 24 | /* for board setup code */ |
diff --git a/include/linux/platform_data/sky81452-backlight.h b/include/linux/platform_data/sky81452-backlight.h new file mode 100644 index 000000000000..1231e9bb00f1 --- /dev/null +++ b/include/linux/platform_data/sky81452-backlight.h | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | /* | ||
| 2 | * sky81452.h SKY81452 backlight driver | ||
| 3 | * | ||
| 4 | * Copyright 2014 Skyworks Solutions Inc. | ||
| 5 | * Author : Gyungoh Yoo <jack.yoo@skyworksinc.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify it | ||
| 8 | * under the terms of the GNU General Public License version 2 | ||
| 9 | * as published by the Free Software Foundation. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, but | ||
| 12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 14 | * General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License along | ||
| 17 | * with this program; if not, see <http://www.gnu.org/licenses/>. | ||
| 18 | */ | ||
| 19 | |||
| 20 | #ifndef _SKY81452_BACKLIGHT_H | ||
| 21 | #define _SKY81452_BACKLIGHT_H | ||
| 22 | |||
| 23 | /** | ||
| 24 | * struct sky81452_platform_data | ||
| 25 | * @name: backlight driver name. | ||
| 26 | If it is not defined, default name is lcd-backlight. | ||
| 27 | * @gpio_enable:GPIO number which control EN pin | ||
| 28 | * @enable: Enable mask for current sink channel 1, 2, 3, 4, 5 and 6. | ||
| 29 | * @ignore_pwm: true if DPWMI should be ignored. | ||
| 30 | * @dpwm_mode: true is DPWM dimming mode, otherwise Analog dimming mode. | ||
| 31 | * @phase_shift:true is phase shift mode. | ||
| 32 | * @short_detecion_threshold: It should be one of 4, 5, 6 and 7V. | ||
| 33 | * @boost_current_limit: It should be one of 2300, 2750mA. | ||
| 34 | */ | ||
| 35 | struct sky81452_bl_platform_data { | ||
| 36 | const char *name; | ||
| 37 | int gpio_enable; | ||
| 38 | unsigned int enable; | ||
| 39 | bool ignore_pwm; | ||
| 40 | bool dpwm_mode; | ||
| 41 | bool phase_shift; | ||
| 42 | unsigned int short_detection_threshold; | ||
| 43 | unsigned int boost_current_limit; | ||
| 44 | }; | ||
| 45 | |||
| 46 | #endif | ||
diff --git a/include/linux/power/charger-manager.h b/include/linux/power/charger-manager.h index 416ebeb6ee1e..eadf28cb2fc9 100644 --- a/include/linux/power/charger-manager.h +++ b/include/linux/power/charger-manager.h | |||
| @@ -242,7 +242,8 @@ struct charger_manager { | |||
| 242 | int emergency_stop; | 242 | int emergency_stop; |
| 243 | 243 | ||
| 244 | char psy_name_buf[PSY_NAME_MAX + 1]; | 244 | char psy_name_buf[PSY_NAME_MAX + 1]; |
| 245 | struct power_supply charger_psy; | 245 | struct power_supply_desc charger_psy_desc; |
| 246 | struct power_supply *charger_psy; | ||
| 246 | 247 | ||
| 247 | u64 charging_start_time; | 248 | u64 charging_start_time; |
| 248 | u64 charging_end_time; | 249 | u64 charging_end_time; |
diff --git a/include/linux/power/max17042_battery.h b/include/linux/power/max17042_battery.h index 89dd84f47c6e..cf112b4075c8 100644 --- a/include/linux/power/max17042_battery.h +++ b/include/linux/power/max17042_battery.h | |||
| @@ -126,7 +126,14 @@ enum max17047_register { | |||
| 126 | MAX17047_QRTbl30 = 0x42, | 126 | MAX17047_QRTbl30 = 0x42, |
| 127 | }; | 127 | }; |
| 128 | 128 | ||
| 129 | enum max170xx_chip_type {MAX17042, MAX17047}; | 129 | enum max170xx_chip_type { |
| 130 | MAXIM_DEVICE_TYPE_UNKNOWN = 0, | ||
| 131 | MAXIM_DEVICE_TYPE_MAX17042, | ||
| 132 | MAXIM_DEVICE_TYPE_MAX17047, | ||
| 133 | MAXIM_DEVICE_TYPE_MAX17050, | ||
| 134 | |||
| 135 | MAXIM_DEVICE_TYPE_NUM | ||
| 136 | }; | ||
| 130 | 137 | ||
| 131 | /* | 138 | /* |
| 132 | * used for setting a register to a desired value | 139 | * used for setting a register to a desired value |
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index 096dbced02ac..75a1dd8dc56e 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #ifndef __LINUX_POWER_SUPPLY_H__ | 13 | #ifndef __LINUX_POWER_SUPPLY_H__ |
| 14 | #define __LINUX_POWER_SUPPLY_H__ | 14 | #define __LINUX_POWER_SUPPLY_H__ |
| 15 | 15 | ||
| 16 | #include <linux/device.h> | ||
| 16 | #include <linux/workqueue.h> | 17 | #include <linux/workqueue.h> |
| 17 | #include <linux/leds.h> | 18 | #include <linux/leds.h> |
| 18 | #include <linux/spinlock.h> | 19 | #include <linux/spinlock.h> |
| @@ -173,22 +174,32 @@ union power_supply_propval { | |||
| 173 | const char *strval; | 174 | const char *strval; |
| 174 | }; | 175 | }; |
| 175 | 176 | ||
| 176 | struct device; | ||
| 177 | struct device_node; | 177 | struct device_node; |
| 178 | struct power_supply; | ||
| 178 | 179 | ||
| 179 | struct power_supply { | 180 | /* Run-time specific power supply configuration */ |
| 180 | const char *name; | 181 | struct power_supply_config { |
| 181 | enum power_supply_type type; | 182 | struct device_node *of_node; |
| 182 | enum power_supply_property *properties; | 183 | /* Driver private data */ |
| 183 | size_t num_properties; | 184 | void *drv_data; |
| 184 | 185 | ||
| 185 | char **supplied_to; | 186 | char **supplied_to; |
| 186 | size_t num_supplicants; | 187 | size_t num_supplicants; |
| 188 | }; | ||
| 187 | 189 | ||
| 188 | char **supplied_from; | 190 | /* Description of power supply */ |
| 189 | size_t num_supplies; | 191 | struct power_supply_desc { |
| 190 | struct device_node *of_node; | 192 | const char *name; |
| 193 | enum power_supply_type type; | ||
| 194 | enum power_supply_property *properties; | ||
| 195 | size_t num_properties; | ||
| 191 | 196 | ||
| 197 | /* | ||
| 198 | * Functions for drivers implementing power supply class. | ||
| 199 | * These shouldn't be called directly by other drivers for accessing | ||
| 200 | * this power supply. Instead use power_supply_*() functions (for | ||
| 201 | * example power_supply_get_property()). | ||
| 202 | */ | ||
| 192 | int (*get_property)(struct power_supply *psy, | 203 | int (*get_property)(struct power_supply *psy, |
| 193 | enum power_supply_property psp, | 204 | enum power_supply_property psp, |
| 194 | union power_supply_propval *val); | 205 | union power_supply_propval *val); |
| @@ -208,12 +219,27 @@ struct power_supply { | |||
| 208 | bool no_thermal; | 219 | bool no_thermal; |
| 209 | /* For APM emulation, think legacy userspace. */ | 220 | /* For APM emulation, think legacy userspace. */ |
| 210 | int use_for_apm; | 221 | int use_for_apm; |
| 222 | }; | ||
| 223 | |||
| 224 | struct power_supply { | ||
| 225 | const struct power_supply_desc *desc; | ||
| 226 | |||
| 227 | char **supplied_to; | ||
| 228 | size_t num_supplicants; | ||
| 229 | |||
| 230 | char **supplied_from; | ||
| 231 | size_t num_supplies; | ||
| 232 | struct device_node *of_node; | ||
| 233 | |||
| 234 | /* Driver private data */ | ||
| 235 | void *drv_data; | ||
| 211 | 236 | ||
| 212 | /* private */ | 237 | /* private */ |
| 213 | struct device *dev; | 238 | struct device dev; |
| 214 | struct work_struct changed_work; | 239 | struct work_struct changed_work; |
| 215 | spinlock_t changed_lock; | 240 | spinlock_t changed_lock; |
| 216 | bool changed; | 241 | bool changed; |
| 242 | atomic_t use_cnt; | ||
| 217 | #ifdef CONFIG_THERMAL | 243 | #ifdef CONFIG_THERMAL |
| 218 | struct thermal_zone_device *tzd; | 244 | struct thermal_zone_device *tzd; |
| 219 | struct thermal_cooling_device *tcd; | 245 | struct thermal_cooling_device *tcd; |
| @@ -256,6 +282,7 @@ extern struct atomic_notifier_head power_supply_notifier; | |||
| 256 | extern int power_supply_reg_notifier(struct notifier_block *nb); | 282 | extern int power_supply_reg_notifier(struct notifier_block *nb); |
| 257 | extern void power_supply_unreg_notifier(struct notifier_block *nb); | 283 | extern void power_supply_unreg_notifier(struct notifier_block *nb); |
| 258 | extern struct power_supply *power_supply_get_by_name(const char *name); | 284 | extern struct power_supply *power_supply_get_by_name(const char *name); |
| 285 | extern void power_supply_put(struct power_supply *psy); | ||
| 259 | #ifdef CONFIG_OF | 286 | #ifdef CONFIG_OF |
| 260 | extern struct power_supply *power_supply_get_by_phandle(struct device_node *np, | 287 | extern struct power_supply *power_supply_get_by_phandle(struct device_node *np, |
| 261 | const char *property); | 288 | const char *property); |
| @@ -274,13 +301,36 @@ extern int power_supply_is_system_supplied(void); | |||
| 274 | static inline int power_supply_is_system_supplied(void) { return -ENOSYS; } | 301 | static inline int power_supply_is_system_supplied(void) { return -ENOSYS; } |
| 275 | #endif | 302 | #endif |
| 276 | 303 | ||
| 277 | extern int power_supply_register(struct device *parent, | 304 | extern int power_supply_get_property(struct power_supply *psy, |
| 278 | struct power_supply *psy); | 305 | enum power_supply_property psp, |
| 279 | extern int power_supply_register_no_ws(struct device *parent, | 306 | union power_supply_propval *val); |
| 280 | struct power_supply *psy); | 307 | extern int power_supply_set_property(struct power_supply *psy, |
| 308 | enum power_supply_property psp, | ||
| 309 | const union power_supply_propval *val); | ||
| 310 | extern int power_supply_property_is_writeable(struct power_supply *psy, | ||
| 311 | enum power_supply_property psp); | ||
| 312 | extern void power_supply_external_power_changed(struct power_supply *psy); | ||
| 313 | |||
| 314 | extern struct power_supply *__must_check | ||
| 315 | power_supply_register(struct device *parent, | ||
| 316 | const struct power_supply_desc *desc, | ||
| 317 | const struct power_supply_config *cfg); | ||
| 318 | extern struct power_supply *__must_check | ||
| 319 | power_supply_register_no_ws(struct device *parent, | ||
| 320 | const struct power_supply_desc *desc, | ||
| 321 | const struct power_supply_config *cfg); | ||
| 322 | extern struct power_supply *__must_check | ||
| 323 | devm_power_supply_register(struct device *parent, | ||
| 324 | const struct power_supply_desc *desc, | ||
| 325 | const struct power_supply_config *cfg); | ||
| 326 | extern struct power_supply *__must_check | ||
| 327 | devm_power_supply_register_no_ws(struct device *parent, | ||
| 328 | const struct power_supply_desc *desc, | ||
| 329 | const struct power_supply_config *cfg); | ||
| 281 | extern void power_supply_unregister(struct power_supply *psy); | 330 | extern void power_supply_unregister(struct power_supply *psy); |
| 282 | extern int power_supply_powers(struct power_supply *psy, struct device *dev); | 331 | extern int power_supply_powers(struct power_supply *psy, struct device *dev); |
| 283 | 332 | ||
| 333 | extern void *power_supply_get_drvdata(struct power_supply *psy); | ||
| 284 | /* For APM emulation, think legacy userspace. */ | 334 | /* For APM emulation, think legacy userspace. */ |
| 285 | extern struct class *power_supply_class; | 335 | extern struct class *power_supply_class; |
| 286 | 336 | ||
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 78097491cd99..573a5afd5ed8 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -48,6 +48,26 @@ | |||
| 48 | 48 | ||
| 49 | extern int rcu_expedited; /* for sysctl */ | 49 | extern int rcu_expedited; /* for sysctl */ |
| 50 | 50 | ||
| 51 | #ifdef CONFIG_TINY_RCU | ||
| 52 | /* Tiny RCU doesn't expedite, as its purpose in life is instead to be tiny. */ | ||
| 53 | static inline bool rcu_gp_is_expedited(void) /* Internal RCU use. */ | ||
| 54 | { | ||
| 55 | return false; | ||
| 56 | } | ||
| 57 | |||
| 58 | static inline void rcu_expedite_gp(void) | ||
| 59 | { | ||
| 60 | } | ||
| 61 | |||
| 62 | static inline void rcu_unexpedite_gp(void) | ||
| 63 | { | ||
| 64 | } | ||
| 65 | #else /* #ifdef CONFIG_TINY_RCU */ | ||
| 66 | bool rcu_gp_is_expedited(void); /* Internal RCU use. */ | ||
| 67 | void rcu_expedite_gp(void); | ||
| 68 | void rcu_unexpedite_gp(void); | ||
| 69 | #endif /* #else #ifdef CONFIG_TINY_RCU */ | ||
| 70 | |||
| 51 | enum rcutorture_type { | 71 | enum rcutorture_type { |
| 52 | RCU_FLAVOR, | 72 | RCU_FLAVOR, |
| 53 | RCU_BH_FLAVOR, | 73 | RCU_BH_FLAVOR, |
| @@ -195,6 +215,15 @@ void call_rcu_sched(struct rcu_head *head, | |||
| 195 | 215 | ||
| 196 | void synchronize_sched(void); | 216 | void synchronize_sched(void); |
| 197 | 217 | ||
| 218 | /* | ||
| 219 | * Structure allowing asynchronous waiting on RCU. | ||
| 220 | */ | ||
| 221 | struct rcu_synchronize { | ||
| 222 | struct rcu_head head; | ||
| 223 | struct completion completion; | ||
| 224 | }; | ||
| 225 | void wakeme_after_rcu(struct rcu_head *head); | ||
| 226 | |||
| 198 | /** | 227 | /** |
| 199 | * call_rcu_tasks() - Queue an RCU for invocation task-based grace period | 228 | * call_rcu_tasks() - Queue an RCU for invocation task-based grace period |
| 200 | * @head: structure to be used for queueing the RCU updates. | 229 | * @head: structure to be used for queueing the RCU updates. |
| @@ -258,6 +287,7 @@ static inline int rcu_preempt_depth(void) | |||
| 258 | 287 | ||
| 259 | /* Internal to kernel */ | 288 | /* Internal to kernel */ |
| 260 | void rcu_init(void); | 289 | void rcu_init(void); |
| 290 | void rcu_end_inkernel_boot(void); | ||
| 261 | void rcu_sched_qs(void); | 291 | void rcu_sched_qs(void); |
| 262 | void rcu_bh_qs(void); | 292 | void rcu_bh_qs(void); |
| 263 | void rcu_check_callbacks(int user); | 293 | void rcu_check_callbacks(int user); |
| @@ -266,6 +296,8 @@ void rcu_idle_enter(void); | |||
| 266 | void rcu_idle_exit(void); | 296 | void rcu_idle_exit(void); |
| 267 | void rcu_irq_enter(void); | 297 | void rcu_irq_enter(void); |
| 268 | void rcu_irq_exit(void); | 298 | void rcu_irq_exit(void); |
| 299 | int rcu_cpu_notify(struct notifier_block *self, | ||
| 300 | unsigned long action, void *hcpu); | ||
| 269 | 301 | ||
| 270 | #ifdef CONFIG_RCU_STALL_COMMON | 302 | #ifdef CONFIG_RCU_STALL_COMMON |
| 271 | void rcu_sysrq_start(void); | 303 | void rcu_sysrq_start(void); |
| @@ -720,7 +752,7 @@ static inline void rcu_preempt_sleep_check(void) | |||
| 720 | * annotated as __rcu. | 752 | * annotated as __rcu. |
| 721 | */ | 753 | */ |
| 722 | #define rcu_dereference_check(p, c) \ | 754 | #define rcu_dereference_check(p, c) \ |
| 723 | __rcu_dereference_check((p), rcu_read_lock_held() || (c), __rcu) | 755 | __rcu_dereference_check((p), (c) || rcu_read_lock_held(), __rcu) |
| 724 | 756 | ||
| 725 | /** | 757 | /** |
| 726 | * rcu_dereference_bh_check() - rcu_dereference_bh with debug checking | 758 | * rcu_dereference_bh_check() - rcu_dereference_bh with debug checking |
| @@ -730,7 +762,7 @@ static inline void rcu_preempt_sleep_check(void) | |||
| 730 | * This is the RCU-bh counterpart to rcu_dereference_check(). | 762 | * This is the RCU-bh counterpart to rcu_dereference_check(). |
| 731 | */ | 763 | */ |
| 732 | #define rcu_dereference_bh_check(p, c) \ | 764 | #define rcu_dereference_bh_check(p, c) \ |
| 733 | __rcu_dereference_check((p), rcu_read_lock_bh_held() || (c), __rcu) | 765 | __rcu_dereference_check((p), (c) || rcu_read_lock_bh_held(), __rcu) |
| 734 | 766 | ||
| 735 | /** | 767 | /** |
| 736 | * rcu_dereference_sched_check() - rcu_dereference_sched with debug checking | 768 | * rcu_dereference_sched_check() - rcu_dereference_sched with debug checking |
| @@ -740,7 +772,7 @@ static inline void rcu_preempt_sleep_check(void) | |||
| 740 | * This is the RCU-sched counterpart to rcu_dereference_check(). | 772 | * This is the RCU-sched counterpart to rcu_dereference_check(). |
| 741 | */ | 773 | */ |
| 742 | #define rcu_dereference_sched_check(p, c) \ | 774 | #define rcu_dereference_sched_check(p, c) \ |
| 743 | __rcu_dereference_check((p), rcu_read_lock_sched_held() || (c), \ | 775 | __rcu_dereference_check((p), (c) || rcu_read_lock_sched_held(), \ |
| 744 | __rcu) | 776 | __rcu) |
| 745 | 777 | ||
| 746 | #define rcu_dereference_raw(p) rcu_dereference_check(p, 1) /*@@@ needed? @@@*/ | 778 | #define rcu_dereference_raw(p) rcu_dereference_check(p, 1) /*@@@ needed? @@@*/ |
| @@ -933,9 +965,9 @@ static inline void rcu_read_unlock(void) | |||
| 933 | { | 965 | { |
| 934 | rcu_lockdep_assert(rcu_is_watching(), | 966 | rcu_lockdep_assert(rcu_is_watching(), |
| 935 | "rcu_read_unlock() used illegally while idle"); | 967 | "rcu_read_unlock() used illegally while idle"); |
| 936 | rcu_lock_release(&rcu_lock_map); | ||
| 937 | __release(RCU); | 968 | __release(RCU); |
| 938 | __rcu_read_unlock(); | 969 | __rcu_read_unlock(); |
| 970 | rcu_lock_release(&rcu_lock_map); /* Keep acq info for rls diags. */ | ||
| 939 | } | 971 | } |
| 940 | 972 | ||
| 941 | /** | 973 | /** |
diff --git a/include/linux/regulator/act8865.h b/include/linux/regulator/act8865.h index b6c4909b33af..15fa8f2d35c9 100644 --- a/include/linux/regulator/act8865.h +++ b/include/linux/regulator/act8865.h | |||
| @@ -19,6 +19,19 @@ | |||
| 19 | #include <linux/regulator/machine.h> | 19 | #include <linux/regulator/machine.h> |
| 20 | 20 | ||
| 21 | enum { | 21 | enum { |
| 22 | ACT8600_ID_DCDC1, | ||
| 23 | ACT8600_ID_DCDC2, | ||
| 24 | ACT8600_ID_DCDC3, | ||
| 25 | ACT8600_ID_SUDCDC4, | ||
| 26 | ACT8600_ID_LDO5, | ||
| 27 | ACT8600_ID_LDO6, | ||
| 28 | ACT8600_ID_LDO7, | ||
| 29 | ACT8600_ID_LDO8, | ||
| 30 | ACT8600_ID_LDO9, | ||
| 31 | ACT8600_ID_LDO10, | ||
| 32 | }; | ||
| 33 | |||
| 34 | enum { | ||
| 22 | ACT8865_ID_DCDC1, | 35 | ACT8865_ID_DCDC1, |
| 23 | ACT8865_ID_DCDC2, | 36 | ACT8865_ID_DCDC2, |
| 24 | ACT8865_ID_DCDC3, | 37 | ACT8865_ID_DCDC3, |
| @@ -46,6 +59,7 @@ enum { | |||
| 46 | }; | 59 | }; |
| 47 | 60 | ||
| 48 | enum { | 61 | enum { |
| 62 | ACT8600, | ||
| 49 | ACT8865, | 63 | ACT8865, |
| 50 | ACT8846, | 64 | ACT8846, |
| 51 | }; | 65 | }; |
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index d17e1ff7ad01..f8a689ed62a5 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h | |||
| @@ -114,7 +114,7 @@ struct regmap; | |||
| 114 | #define REGULATOR_EVENT_OVER_TEMP 0x10 | 114 | #define REGULATOR_EVENT_OVER_TEMP 0x10 |
| 115 | #define REGULATOR_EVENT_FORCE_DISABLE 0x20 | 115 | #define REGULATOR_EVENT_FORCE_DISABLE 0x20 |
| 116 | #define REGULATOR_EVENT_VOLTAGE_CHANGE 0x40 | 116 | #define REGULATOR_EVENT_VOLTAGE_CHANGE 0x40 |
| 117 | #define REGULATOR_EVENT_DISABLE 0x80 | 117 | #define REGULATOR_EVENT_DISABLE 0x80 |
| 118 | #define REGULATOR_EVENT_PRE_VOLTAGE_CHANGE 0x100 | 118 | #define REGULATOR_EVENT_PRE_VOLTAGE_CHANGE 0x100 |
| 119 | #define REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE 0x200 | 119 | #define REGULATOR_EVENT_ABORT_VOLTAGE_CHANGE 0x200 |
| 120 | #define REGULATOR_EVENT_PRE_DISABLE 0x400 | 120 | #define REGULATOR_EVENT_PRE_DISABLE 0x400 |
| @@ -238,7 +238,7 @@ int regulator_get_current_limit(struct regulator *regulator); | |||
| 238 | 238 | ||
| 239 | int regulator_set_mode(struct regulator *regulator, unsigned int mode); | 239 | int regulator_set_mode(struct regulator *regulator, unsigned int mode); |
| 240 | unsigned int regulator_get_mode(struct regulator *regulator); | 240 | unsigned int regulator_get_mode(struct regulator *regulator); |
| 241 | int regulator_set_optimum_mode(struct regulator *regulator, int load_uA); | 241 | int regulator_set_load(struct regulator *regulator, int load_uA); |
| 242 | 242 | ||
| 243 | int regulator_allow_bypass(struct regulator *regulator, bool allow); | 243 | int regulator_allow_bypass(struct regulator *regulator, bool allow); |
| 244 | 244 | ||
| @@ -252,8 +252,12 @@ int regulator_list_hardware_vsel(struct regulator *regulator, | |||
| 252 | /* regulator notifier block */ | 252 | /* regulator notifier block */ |
| 253 | int regulator_register_notifier(struct regulator *regulator, | 253 | int regulator_register_notifier(struct regulator *regulator, |
| 254 | struct notifier_block *nb); | 254 | struct notifier_block *nb); |
| 255 | int devm_regulator_register_notifier(struct regulator *regulator, | ||
| 256 | struct notifier_block *nb); | ||
| 255 | int regulator_unregister_notifier(struct regulator *regulator, | 257 | int regulator_unregister_notifier(struct regulator *regulator, |
| 256 | struct notifier_block *nb); | 258 | struct notifier_block *nb); |
| 259 | void devm_regulator_unregister_notifier(struct regulator *regulator, | ||
| 260 | struct notifier_block *nb); | ||
| 257 | 261 | ||
| 258 | /* driver data - core doesn't touch */ | 262 | /* driver data - core doesn't touch */ |
| 259 | void *regulator_get_drvdata(struct regulator *regulator); | 263 | void *regulator_get_drvdata(struct regulator *regulator); |
| @@ -479,8 +483,7 @@ static inline unsigned int regulator_get_mode(struct regulator *regulator) | |||
| 479 | return REGULATOR_MODE_NORMAL; | 483 | return REGULATOR_MODE_NORMAL; |
| 480 | } | 484 | } |
| 481 | 485 | ||
| 482 | static inline int regulator_set_optimum_mode(struct regulator *regulator, | 486 | static inline int regulator_set_load(struct regulator *regulator, int load_uA) |
| 483 | int load_uA) | ||
| 484 | { | 487 | { |
| 485 | return REGULATOR_MODE_NORMAL; | 488 | return REGULATOR_MODE_NORMAL; |
| 486 | } | 489 | } |
| @@ -515,12 +518,24 @@ static inline int regulator_register_notifier(struct regulator *regulator, | |||
| 515 | return 0; | 518 | return 0; |
| 516 | } | 519 | } |
| 517 | 520 | ||
| 521 | static inline int devm_regulator_register_notifier(struct regulator *regulator, | ||
| 522 | struct notifier_block *nb) | ||
| 523 | { | ||
| 524 | return 0; | ||
| 525 | } | ||
| 526 | |||
| 518 | static inline int regulator_unregister_notifier(struct regulator *regulator, | 527 | static inline int regulator_unregister_notifier(struct regulator *regulator, |
| 519 | struct notifier_block *nb) | 528 | struct notifier_block *nb) |
| 520 | { | 529 | { |
| 521 | return 0; | 530 | return 0; |
| 522 | } | 531 | } |
| 523 | 532 | ||
| 533 | static inline int devm_regulator_unregister_notifier(struct regulator *regulator, | ||
| 534 | struct notifier_block *nb) | ||
| 535 | { | ||
| 536 | return 0; | ||
| 537 | } | ||
| 538 | |||
| 524 | static inline void *regulator_get_drvdata(struct regulator *regulator) | 539 | static inline void *regulator_get_drvdata(struct regulator *regulator) |
| 525 | { | 540 | { |
| 526 | return NULL; | 541 | return NULL; |
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h index 045f709cb89b..fffa688ac3a7 100644 --- a/include/linux/regulator/driver.h +++ b/include/linux/regulator/driver.h | |||
| @@ -98,6 +98,7 @@ struct regulator_linear_range { | |||
| 98 | * REGULATOR_STATUS value (or negative errno) | 98 | * REGULATOR_STATUS value (or negative errno) |
| 99 | * @get_optimum_mode: Get the most efficient operating mode for the regulator | 99 | * @get_optimum_mode: Get the most efficient operating mode for the regulator |
| 100 | * when running with the specified parameters. | 100 | * when running with the specified parameters. |
| 101 | * @set_load: Set the load for the regulator. | ||
| 101 | * | 102 | * |
| 102 | * @set_bypass: Set the regulator in bypass mode. | 103 | * @set_bypass: Set the regulator in bypass mode. |
| 103 | * @get_bypass: Get the regulator bypass mode state. | 104 | * @get_bypass: Get the regulator bypass mode state. |
| @@ -167,6 +168,8 @@ struct regulator_ops { | |||
| 167 | /* get most efficient regulator operating mode for load */ | 168 | /* get most efficient regulator operating mode for load */ |
| 168 | unsigned int (*get_optimum_mode) (struct regulator_dev *, int input_uV, | 169 | unsigned int (*get_optimum_mode) (struct regulator_dev *, int input_uV, |
| 169 | int output_uV, int load_uA); | 170 | int output_uV, int load_uA); |
| 171 | /* set the load on the regulator */ | ||
| 172 | int (*set_load)(struct regulator_dev *, int load_uA); | ||
| 170 | 173 | ||
| 171 | /* control and report on bypass mode */ | 174 | /* control and report on bypass mode */ |
| 172 | int (*set_bypass)(struct regulator_dev *dev, bool enable); | 175 | int (*set_bypass)(struct regulator_dev *dev, bool enable); |
| @@ -367,6 +370,7 @@ struct regulator_dev { | |||
| 367 | struct device dev; | 370 | struct device dev; |
| 368 | struct regulation_constraints *constraints; | 371 | struct regulation_constraints *constraints; |
| 369 | struct regulator *supply; /* for tree */ | 372 | struct regulator *supply; /* for tree */ |
| 373 | const char *supply_name; | ||
| 370 | struct regmap *regmap; | 374 | struct regmap *regmap; |
| 371 | 375 | ||
| 372 | struct delayed_work disable_work; | 376 | struct delayed_work disable_work; |
diff --git a/include/linux/rtc.h b/include/linux/rtc.h index dcad7ee0d746..8dcf6825fa88 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h | |||
| @@ -77,6 +77,7 @@ struct rtc_class_ops { | |||
| 77 | int (*read_alarm)(struct device *, struct rtc_wkalrm *); | 77 | int (*read_alarm)(struct device *, struct rtc_wkalrm *); |
| 78 | int (*set_alarm)(struct device *, struct rtc_wkalrm *); | 78 | int (*set_alarm)(struct device *, struct rtc_wkalrm *); |
| 79 | int (*proc)(struct device *, struct seq_file *); | 79 | int (*proc)(struct device *, struct seq_file *); |
| 80 | int (*set_mmss64)(struct device *, time64_t secs); | ||
| 80 | int (*set_mmss)(struct device *, unsigned long secs); | 81 | int (*set_mmss)(struct device *, unsigned long secs); |
| 81 | int (*read_callback)(struct device *, int data); | 82 | int (*read_callback)(struct device *, int data); |
| 82 | int (*alarm_irq_enable)(struct device *, unsigned int enabled); | 83 | int (*alarm_irq_enable)(struct device *, unsigned int enabled); |
diff --git a/include/linux/sched.h b/include/linux/sched.h index a419b65770d6..f74d4cc3a3e5 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -176,6 +176,14 @@ extern void get_iowait_load(unsigned long *nr_waiters, unsigned long *load); | |||
| 176 | extern void calc_global_load(unsigned long ticks); | 176 | extern void calc_global_load(unsigned long ticks); |
| 177 | extern void update_cpu_load_nohz(void); | 177 | extern void update_cpu_load_nohz(void); |
| 178 | 178 | ||
| 179 | /* Notifier for when a task gets migrated to a new CPU */ | ||
| 180 | struct task_migration_notifier { | ||
| 181 | struct task_struct *task; | ||
| 182 | int from_cpu; | ||
| 183 | int to_cpu; | ||
| 184 | }; | ||
| 185 | extern void register_task_migration_notifier(struct notifier_block *n); | ||
| 186 | |||
| 179 | extern unsigned long get_parent_ip(unsigned long addr); | 187 | extern unsigned long get_parent_ip(unsigned long addr); |
| 180 | 188 | ||
| 181 | extern void dump_cpu_task(int cpu); | 189 | extern void dump_cpu_task(int cpu); |
| @@ -329,6 +337,8 @@ extern asmlinkage void schedule_tail(struct task_struct *prev); | |||
| 329 | extern void init_idle(struct task_struct *idle, int cpu); | 337 | extern void init_idle(struct task_struct *idle, int cpu); |
| 330 | extern void init_idle_bootup_task(struct task_struct *idle); | 338 | extern void init_idle_bootup_task(struct task_struct *idle); |
| 331 | 339 | ||
| 340 | extern cpumask_var_t cpu_isolated_map; | ||
| 341 | |||
| 332 | extern int runqueue_is_locked(int cpu); | 342 | extern int runqueue_is_locked(int cpu); |
| 333 | 343 | ||
| 334 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON) | 344 | #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON) |
| @@ -1115,15 +1125,28 @@ struct load_weight { | |||
| 1115 | }; | 1125 | }; |
| 1116 | 1126 | ||
| 1117 | struct sched_avg { | 1127 | struct sched_avg { |
| 1128 | u64 last_runnable_update; | ||
| 1129 | s64 decay_count; | ||
| 1130 | /* | ||
| 1131 | * utilization_avg_contrib describes the amount of time that a | ||
| 1132 | * sched_entity is running on a CPU. It is based on running_avg_sum | ||
| 1133 | * and is scaled in the range [0..SCHED_LOAD_SCALE]. | ||
| 1134 | * load_avg_contrib described the amount of time that a sched_entity | ||
| 1135 | * is runnable on a rq. It is based on both runnable_avg_sum and the | ||
| 1136 | * weight of the task. | ||
| 1137 | */ | ||
| 1138 | unsigned long load_avg_contrib, utilization_avg_contrib; | ||
| 1118 | /* | 1139 | /* |
| 1119 | * These sums represent an infinite geometric series and so are bound | 1140 | * These sums represent an infinite geometric series and so are bound |
| 1120 | * above by 1024/(1-y). Thus we only need a u32 to store them for all | 1141 | * above by 1024/(1-y). Thus we only need a u32 to store them for all |
| 1121 | * choices of y < 1-2^(-32)*1024. | 1142 | * choices of y < 1-2^(-32)*1024. |
| 1143 | * running_avg_sum reflects the time that the sched_entity is | ||
| 1144 | * effectively running on the CPU. | ||
| 1145 | * runnable_avg_sum represents the amount of time a sched_entity is on | ||
| 1146 | * a runqueue which includes the running time that is monitored by | ||
| 1147 | * running_avg_sum. | ||
| 1122 | */ | 1148 | */ |
| 1123 | u32 runnable_avg_sum, runnable_avg_period; | 1149 | u32 runnable_avg_sum, avg_period, running_avg_sum; |
| 1124 | u64 last_runnable_update; | ||
| 1125 | s64 decay_count; | ||
| 1126 | unsigned long load_avg_contrib; | ||
| 1127 | }; | 1150 | }; |
| 1128 | 1151 | ||
| 1129 | #ifdef CONFIG_SCHEDSTATS | 1152 | #ifdef CONFIG_SCHEDSTATS |
diff --git a/include/linux/security.h b/include/linux/security.h index a1b7dbd127ff..4e14e3d6309f 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -1556,7 +1556,7 @@ struct security_operations { | |||
| 1556 | int (*inode_follow_link) (struct dentry *dentry, struct nameidata *nd); | 1556 | int (*inode_follow_link) (struct dentry *dentry, struct nameidata *nd); |
| 1557 | int (*inode_permission) (struct inode *inode, int mask); | 1557 | int (*inode_permission) (struct inode *inode, int mask); |
| 1558 | int (*inode_setattr) (struct dentry *dentry, struct iattr *attr); | 1558 | int (*inode_setattr) (struct dentry *dentry, struct iattr *attr); |
| 1559 | int (*inode_getattr) (struct vfsmount *mnt, struct dentry *dentry); | 1559 | int (*inode_getattr) (const struct path *path); |
| 1560 | int (*inode_setxattr) (struct dentry *dentry, const char *name, | 1560 | int (*inode_setxattr) (struct dentry *dentry, const char *name, |
| 1561 | const void *value, size_t size, int flags); | 1561 | const void *value, size_t size, int flags); |
| 1562 | void (*inode_post_setxattr) (struct dentry *dentry, const char *name, | 1562 | void (*inode_post_setxattr) (struct dentry *dentry, const char *name, |
| @@ -1843,7 +1843,7 @@ int security_inode_readlink(struct dentry *dentry); | |||
| 1843 | int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd); | 1843 | int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd); |
| 1844 | int security_inode_permission(struct inode *inode, int mask); | 1844 | int security_inode_permission(struct inode *inode, int mask); |
| 1845 | int security_inode_setattr(struct dentry *dentry, struct iattr *attr); | 1845 | int security_inode_setattr(struct dentry *dentry, struct iattr *attr); |
| 1846 | int security_inode_getattr(struct vfsmount *mnt, struct dentry *dentry); | 1846 | int security_inode_getattr(const struct path *path); |
| 1847 | int security_inode_setxattr(struct dentry *dentry, const char *name, | 1847 | int security_inode_setxattr(struct dentry *dentry, const char *name, |
| 1848 | const void *value, size_t size, int flags); | 1848 | const void *value, size_t size, int flags); |
| 1849 | void security_inode_post_setxattr(struct dentry *dentry, const char *name, | 1849 | void security_inode_post_setxattr(struct dentry *dentry, const char *name, |
| @@ -2259,8 +2259,7 @@ static inline int security_inode_setattr(struct dentry *dentry, | |||
| 2259 | return 0; | 2259 | return 0; |
| 2260 | } | 2260 | } |
| 2261 | 2261 | ||
| 2262 | static inline int security_inode_getattr(struct vfsmount *mnt, | 2262 | static inline int security_inode_getattr(const struct path *path) |
| 2263 | struct dentry *dentry) | ||
| 2264 | { | 2263 | { |
| 2265 | return 0; | 2264 | return 0; |
| 2266 | } | 2265 | } |
diff --git a/include/linux/seqlock.h b/include/linux/seqlock.h index f5df8f687b4d..5f68d0a391ce 100644 --- a/include/linux/seqlock.h +++ b/include/linux/seqlock.h | |||
| @@ -108,7 +108,7 @@ static inline unsigned __read_seqcount_begin(const seqcount_t *s) | |||
| 108 | unsigned ret; | 108 | unsigned ret; |
| 109 | 109 | ||
| 110 | repeat: | 110 | repeat: |
| 111 | ret = ACCESS_ONCE(s->sequence); | 111 | ret = READ_ONCE(s->sequence); |
| 112 | if (unlikely(ret & 1)) { | 112 | if (unlikely(ret & 1)) { |
| 113 | cpu_relax(); | 113 | cpu_relax(); |
| 114 | goto repeat; | 114 | goto repeat; |
| @@ -127,7 +127,7 @@ repeat: | |||
| 127 | */ | 127 | */ |
| 128 | static inline unsigned raw_read_seqcount(const seqcount_t *s) | 128 | static inline unsigned raw_read_seqcount(const seqcount_t *s) |
| 129 | { | 129 | { |
| 130 | unsigned ret = ACCESS_ONCE(s->sequence); | 130 | unsigned ret = READ_ONCE(s->sequence); |
| 131 | smp_rmb(); | 131 | smp_rmb(); |
| 132 | return ret; | 132 | return ret; |
| 133 | } | 133 | } |
| @@ -179,7 +179,7 @@ static inline unsigned read_seqcount_begin(const seqcount_t *s) | |||
| 179 | */ | 179 | */ |
| 180 | static inline unsigned raw_seqcount_begin(const seqcount_t *s) | 180 | static inline unsigned raw_seqcount_begin(const seqcount_t *s) |
| 181 | { | 181 | { |
| 182 | unsigned ret = ACCESS_ONCE(s->sequence); | 182 | unsigned ret = READ_ONCE(s->sequence); |
| 183 | smp_rmb(); | 183 | smp_rmb(); |
| 184 | return ret & ~1; | 184 | return ret & ~1; |
| 185 | } | 185 | } |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 76f1feeabd38..ffd24c830151 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -18,7 +18,7 @@ | |||
| 18 | 18 | ||
| 19 | /* | 19 | /* |
| 20 | * Flags to pass to kmem_cache_create(). | 20 | * Flags to pass to kmem_cache_create(). |
| 21 | * The ones marked DEBUG are only valid if CONFIG_SLAB_DEBUG is set. | 21 | * The ones marked DEBUG are only valid if CONFIG_DEBUG_SLAB is set. |
| 22 | */ | 22 | */ |
| 23 | #define SLAB_DEBUG_FREE 0x00000100UL /* DEBUG: Perform (expensive) checks on free */ | 23 | #define SLAB_DEBUG_FREE 0x00000100UL /* DEBUG: Perform (expensive) checks on free */ |
| 24 | #define SLAB_RED_ZONE 0x00000400UL /* DEBUG: Red zone objs in a cache */ | 24 | #define SLAB_RED_ZONE 0x00000400UL /* DEBUG: Red zone objs in a cache */ |
diff --git a/include/linux/smpboot.h b/include/linux/smpboot.h index 13e929679550..d600afb21926 100644 --- a/include/linux/smpboot.h +++ b/include/linux/smpboot.h | |||
| @@ -47,6 +47,5 @@ struct smp_hotplug_thread { | |||
| 47 | 47 | ||
| 48 | int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread); | 48 | int smpboot_register_percpu_thread(struct smp_hotplug_thread *plug_thread); |
| 49 | void smpboot_unregister_percpu_thread(struct smp_hotplug_thread *plug_thread); | 49 | void smpboot_unregister_percpu_thread(struct smp_hotplug_thread *plug_thread); |
| 50 | int smpboot_thread_schedule(void); | ||
| 51 | 50 | ||
| 52 | #endif | 51 | #endif |
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h index 856d34dde79b..d673072346f2 100644 --- a/include/linux/spi/spi.h +++ b/include/linux/spi/spi.h | |||
| @@ -162,8 +162,6 @@ struct spi_transfer; | |||
| 162 | * @remove: Unbinds this driver from the spi device | 162 | * @remove: Unbinds this driver from the spi device |
| 163 | * @shutdown: Standard shutdown callback used during system state | 163 | * @shutdown: Standard shutdown callback used during system state |
| 164 | * transitions such as powerdown/halt and kexec | 164 | * transitions such as powerdown/halt and kexec |
| 165 | * @suspend: Standard suspend callback used during system state transitions | ||
| 166 | * @resume: Standard resume callback used during system state transitions | ||
| 167 | * @driver: SPI device drivers should initialize the name and owner | 165 | * @driver: SPI device drivers should initialize the name and owner |
| 168 | * field of this structure. | 166 | * field of this structure. |
| 169 | * | 167 | * |
| @@ -184,8 +182,6 @@ struct spi_driver { | |||
| 184 | int (*probe)(struct spi_device *spi); | 182 | int (*probe)(struct spi_device *spi); |
| 185 | int (*remove)(struct spi_device *spi); | 183 | int (*remove)(struct spi_device *spi); |
| 186 | void (*shutdown)(struct spi_device *spi); | 184 | void (*shutdown)(struct spi_device *spi); |
| 187 | int (*suspend)(struct spi_device *spi, pm_message_t mesg); | ||
| 188 | int (*resume)(struct spi_device *spi); | ||
| 189 | struct device_driver driver; | 185 | struct device_driver driver; |
| 190 | }; | 186 | }; |
| 191 | 187 | ||
| @@ -294,6 +290,8 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv) | |||
| 294 | * transfer_one_message are mutually exclusive; when both | 290 | * transfer_one_message are mutually exclusive; when both |
| 295 | * are set, the generic subsystem does not call your | 291 | * are set, the generic subsystem does not call your |
| 296 | * transfer_one callback. | 292 | * transfer_one callback. |
| 293 | * @handle_err: the subsystem calls the driver to handle an error that occurs | ||
| 294 | * in the generic implementation of transfer_one_message(). | ||
| 297 | * @unprepare_message: undo any work done by prepare_message(). | 295 | * @unprepare_message: undo any work done by prepare_message(). |
| 298 | * @cs_gpios: Array of GPIOs to use as chip select lines; one per CS | 296 | * @cs_gpios: Array of GPIOs to use as chip select lines; one per CS |
| 299 | * number. Any individual value may be -ENOENT for CS lines that | 297 | * number. Any individual value may be -ENOENT for CS lines that |
| @@ -448,6 +446,8 @@ struct spi_master { | |||
| 448 | void (*set_cs)(struct spi_device *spi, bool enable); | 446 | void (*set_cs)(struct spi_device *spi, bool enable); |
| 449 | int (*transfer_one)(struct spi_master *master, struct spi_device *spi, | 447 | int (*transfer_one)(struct spi_master *master, struct spi_device *spi, |
| 450 | struct spi_transfer *transfer); | 448 | struct spi_transfer *transfer); |
| 449 | void (*handle_err)(struct spi_master *master, | ||
| 450 | struct spi_message *message); | ||
| 451 | 451 | ||
| 452 | /* gpio chip select */ | 452 | /* gpio chip select */ |
| 453 | int *cs_gpios; | 453 | int *cs_gpios; |
diff --git a/include/linux/srcu.h b/include/linux/srcu.h index 9cfd9623fb03..bdeb4567b71e 100644 --- a/include/linux/srcu.h +++ b/include/linux/srcu.h | |||
| @@ -182,7 +182,7 @@ static inline int srcu_read_lock_held(struct srcu_struct *sp) | |||
| 182 | * lockdep_is_held() calls. | 182 | * lockdep_is_held() calls. |
| 183 | */ | 183 | */ |
| 184 | #define srcu_dereference_check(p, sp, c) \ | 184 | #define srcu_dereference_check(p, sp, c) \ |
| 185 | __rcu_dereference_check((p), srcu_read_lock_held(sp) || (c), __rcu) | 185 | __rcu_dereference_check((p), (c) || srcu_read_lock_held(sp), __rcu) |
| 186 | 186 | ||
| 187 | /** | 187 | /** |
| 188 | * srcu_dereference - fetch SRCU-protected pointer for later dereferencing | 188 | * srcu_dereference - fetch SRCU-protected pointer for later dereferencing |
diff --git a/include/linux/stacktrace.h b/include/linux/stacktrace.h index 669045ab73f3..0a34489a46b6 100644 --- a/include/linux/stacktrace.h +++ b/include/linux/stacktrace.h | |||
| @@ -7,8 +7,6 @@ struct task_struct; | |||
| 7 | struct pt_regs; | 7 | struct pt_regs; |
| 8 | 8 | ||
| 9 | #ifdef CONFIG_STACKTRACE | 9 | #ifdef CONFIG_STACKTRACE |
| 10 | struct task_struct; | ||
| 11 | |||
| 12 | struct stack_trace { | 10 | struct stack_trace { |
| 13 | unsigned int nr_entries, max_entries; | 11 | unsigned int nr_entries, max_entries; |
| 14 | unsigned long *entries; | 12 | unsigned long *entries; |
diff --git a/include/linux/stddef.h b/include/linux/stddef.h index f4aec0e75c3a..076af437284d 100644 --- a/include/linux/stddef.h +++ b/include/linux/stddef.h | |||
| @@ -19,3 +19,12 @@ enum { | |||
| 19 | #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) | 19 | #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) |
| 20 | #endif | 20 | #endif |
| 21 | #endif | 21 | #endif |
| 22 | |||
| 23 | /** | ||
| 24 | * offsetofend(TYPE, MEMBER) | ||
| 25 | * | ||
| 26 | * @TYPE: The type of the structure | ||
| 27 | * @MEMBER: The member within the structure to get the end offset of | ||
| 28 | */ | ||
| 29 | #define offsetofend(TYPE, MEMBER) \ | ||
| 30 | (offsetof(TYPE, MEMBER) + sizeof(((TYPE *)0)->MEMBER)) | ||
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index ddad16148bd6..99382c0df17e 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
| @@ -57,6 +57,21 @@ do { \ | |||
| 57 | #define sysfs_attr_init(attr) do {} while (0) | 57 | #define sysfs_attr_init(attr) do {} while (0) |
| 58 | #endif | 58 | #endif |
| 59 | 59 | ||
| 60 | /** | ||
| 61 | * struct attribute_group - data structure used to declare an attribute group. | ||
| 62 | * @name: Optional: Attribute group name | ||
| 63 | * If specified, the attribute group will be created in | ||
| 64 | * a new subdirectory with this name. | ||
| 65 | * @is_visible: Optional: Function to return permissions associated with an | ||
| 66 | * attribute of the group. Will be called repeatedly for each | ||
| 67 | * attribute in the group. Only read/write permissions as well as | ||
| 68 | * SYSFS_PREALLOC are accepted. Must return 0 if an attribute is | ||
| 69 | * not visible. The returned value will replace static permissions | ||
| 70 | * defined in struct attribute or struct bin_attribute. | ||
| 71 | * @attrs: Pointer to NULL terminated list of attributes. | ||
| 72 | * @bin_attrs: Pointer to NULL terminated list of binary attributes. | ||
| 73 | * Either attrs or bin_attrs or both must be provided. | ||
| 74 | */ | ||
| 60 | struct attribute_group { | 75 | struct attribute_group { |
| 61 | const char *name; | 76 | const char *name; |
| 62 | umode_t (*is_visible)(struct kobject *, | 77 | umode_t (*is_visible)(struct kobject *, |
diff --git a/include/linux/tick.h b/include/linux/tick.h index 9c085dc12ae9..f8492da57ad3 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h | |||
| @@ -1,7 +1,5 @@ | |||
| 1 | /* linux/include/linux/tick.h | 1 | /* |
| 2 | * | 2 | * Tick related global functions |
| 3 | * This file contains the structure definitions for tick related functions | ||
| 4 | * | ||
| 5 | */ | 3 | */ |
| 6 | #ifndef _LINUX_TICK_H | 4 | #ifndef _LINUX_TICK_H |
| 7 | #define _LINUX_TICK_H | 5 | #define _LINUX_TICK_H |
| @@ -9,149 +7,99 @@ | |||
| 9 | #include <linux/clockchips.h> | 7 | #include <linux/clockchips.h> |
| 10 | #include <linux/irqflags.h> | 8 | #include <linux/irqflags.h> |
| 11 | #include <linux/percpu.h> | 9 | #include <linux/percpu.h> |
| 12 | #include <linux/hrtimer.h> | ||
| 13 | #include <linux/context_tracking_state.h> | 10 | #include <linux/context_tracking_state.h> |
| 14 | #include <linux/cpumask.h> | 11 | #include <linux/cpumask.h> |
| 15 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
| 16 | 13 | ||
| 17 | #ifdef CONFIG_GENERIC_CLOCKEVENTS | 14 | #ifdef CONFIG_GENERIC_CLOCKEVENTS |
| 18 | |||
| 19 | enum tick_device_mode { | ||
| 20 | TICKDEV_MODE_PERIODIC, | ||
| 21 | TICKDEV_MODE_ONESHOT, | ||
| 22 | }; | ||
| 23 | |||
| 24 | struct tick_device { | ||
| 25 | struct clock_event_device *evtdev; | ||
| 26 | enum tick_device_mode mode; | ||
| 27 | }; | ||
| 28 | |||
| 29 | enum tick_nohz_mode { | ||
| 30 | NOHZ_MODE_INACTIVE, | ||
| 31 | NOHZ_MODE_LOWRES, | ||
| 32 | NOHZ_MODE_HIGHRES, | ||
| 33 | }; | ||
| 34 | |||
| 35 | /** | ||
| 36 | * struct tick_sched - sched tick emulation and no idle tick control/stats | ||
| 37 | * @sched_timer: hrtimer to schedule the periodic tick in high | ||
| 38 | * resolution mode | ||
| 39 | * @last_tick: Store the last tick expiry time when the tick | ||
| 40 | * timer is modified for nohz sleeps. This is necessary | ||
| 41 | * to resume the tick timer operation in the timeline | ||
| 42 | * when the CPU returns from nohz sleep. | ||
| 43 | * @tick_stopped: Indicator that the idle tick has been stopped | ||
| 44 | * @idle_jiffies: jiffies at the entry to idle for idle time accounting | ||
| 45 | * @idle_calls: Total number of idle calls | ||
| 46 | * @idle_sleeps: Number of idle calls, where the sched tick was stopped | ||
| 47 | * @idle_entrytime: Time when the idle call was entered | ||
| 48 | * @idle_waketime: Time when the idle was interrupted | ||
| 49 | * @idle_exittime: Time when the idle state was left | ||
| 50 | * @idle_sleeptime: Sum of the time slept in idle with sched tick stopped | ||
| 51 | * @iowait_sleeptime: Sum of the time slept in idle with sched tick stopped, with IO outstanding | ||
| 52 | * @sleep_length: Duration of the current idle sleep | ||
| 53 | * @do_timer_lst: CPU was the last one doing do_timer before going idle | ||
| 54 | */ | ||
| 55 | struct tick_sched { | ||
| 56 | struct hrtimer sched_timer; | ||
| 57 | unsigned long check_clocks; | ||
| 58 | enum tick_nohz_mode nohz_mode; | ||
| 59 | ktime_t last_tick; | ||
| 60 | int inidle; | ||
| 61 | int tick_stopped; | ||
| 62 | unsigned long idle_jiffies; | ||
| 63 | unsigned long idle_calls; | ||
| 64 | unsigned long idle_sleeps; | ||
| 65 | int idle_active; | ||
| 66 | ktime_t idle_entrytime; | ||
| 67 | ktime_t idle_waketime; | ||
| 68 | ktime_t idle_exittime; | ||
| 69 | ktime_t idle_sleeptime; | ||
| 70 | ktime_t iowait_sleeptime; | ||
| 71 | ktime_t sleep_length; | ||
| 72 | unsigned long last_jiffies; | ||
| 73 | unsigned long next_jiffies; | ||
| 74 | ktime_t idle_expires; | ||
| 75 | int do_timer_last; | ||
| 76 | }; | ||
| 77 | |||
| 78 | extern void __init tick_init(void); | 15 | extern void __init tick_init(void); |
| 79 | extern int tick_is_oneshot_available(void); | ||
| 80 | extern struct tick_device *tick_get_device(int cpu); | ||
| 81 | |||
| 82 | extern void tick_freeze(void); | 16 | extern void tick_freeze(void); |
| 83 | extern void tick_unfreeze(void); | 17 | extern void tick_unfreeze(void); |
| 18 | /* Should be core only, but ARM BL switcher requires it */ | ||
| 19 | extern void tick_suspend_local(void); | ||
| 20 | /* Should be core only, but XEN resume magic and ARM BL switcher require it */ | ||
| 21 | extern void tick_resume_local(void); | ||
| 22 | extern void tick_handover_do_timer(void); | ||
| 23 | extern void tick_cleanup_dead_cpu(int cpu); | ||
| 24 | #else /* CONFIG_GENERIC_CLOCKEVENTS */ | ||
| 25 | static inline void tick_init(void) { } | ||
| 26 | static inline void tick_freeze(void) { } | ||
| 27 | static inline void tick_unfreeze(void) { } | ||
| 28 | static inline void tick_suspend_local(void) { } | ||
| 29 | static inline void tick_resume_local(void) { } | ||
| 30 | static inline void tick_handover_do_timer(void) { } | ||
| 31 | static inline void tick_cleanup_dead_cpu(int cpu) { } | ||
| 32 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ | ||
| 84 | 33 | ||
| 85 | # ifdef CONFIG_HIGH_RES_TIMERS | 34 | #ifdef CONFIG_TICK_ONESHOT |
| 86 | extern int tick_init_highres(void); | ||
| 87 | extern int tick_program_event(ktime_t expires, int force); | ||
| 88 | extern void tick_setup_sched_timer(void); | ||
| 89 | # endif | ||
| 90 | |||
| 91 | # if defined CONFIG_NO_HZ_COMMON || defined CONFIG_HIGH_RES_TIMERS | ||
| 92 | extern void tick_cancel_sched_timer(int cpu); | ||
| 93 | # else | ||
| 94 | static inline void tick_cancel_sched_timer(int cpu) { } | ||
| 95 | # endif | ||
| 96 | |||
| 97 | # ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST | ||
| 98 | extern struct tick_device *tick_get_broadcast_device(void); | ||
| 99 | extern struct cpumask *tick_get_broadcast_mask(void); | ||
| 100 | |||
| 101 | # ifdef CONFIG_TICK_ONESHOT | ||
| 102 | extern struct cpumask *tick_get_broadcast_oneshot_mask(void); | ||
| 103 | # endif | ||
| 104 | |||
| 105 | # endif /* BROADCAST */ | ||
| 106 | |||
| 107 | # ifdef CONFIG_TICK_ONESHOT | ||
| 108 | extern void tick_clock_notify(void); | ||
| 109 | extern int tick_check_oneshot_change(int allow_nohz); | ||
| 110 | extern struct tick_sched *tick_get_tick_sched(int cpu); | ||
| 111 | extern void tick_irq_enter(void); | 35 | extern void tick_irq_enter(void); |
| 112 | extern int tick_oneshot_mode_active(void); | ||
| 113 | # ifndef arch_needs_cpu | 36 | # ifndef arch_needs_cpu |
| 114 | # define arch_needs_cpu() (0) | 37 | # define arch_needs_cpu() (0) |
| 115 | # endif | 38 | # endif |
| 116 | # else | 39 | # else |
| 117 | static inline void tick_clock_notify(void) { } | ||
| 118 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } | ||
| 119 | static inline void tick_irq_enter(void) { } | 40 | static inline void tick_irq_enter(void) { } |
| 120 | static inline int tick_oneshot_mode_active(void) { return 0; } | 41 | #endif |
| 121 | # endif | ||
| 122 | 42 | ||
| 123 | #else /* CONFIG_GENERIC_CLOCKEVENTS */ | 43 | #if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT) |
| 124 | static inline void tick_init(void) { } | 44 | extern void hotplug_cpu__broadcast_tick_pull(int dead_cpu); |
| 125 | static inline void tick_freeze(void) { } | 45 | #else |
| 126 | static inline void tick_unfreeze(void) { } | 46 | static inline void hotplug_cpu__broadcast_tick_pull(int dead_cpu) { } |
| 127 | static inline void tick_cancel_sched_timer(int cpu) { } | 47 | #endif |
| 128 | static inline void tick_clock_notify(void) { } | ||
| 129 | static inline int tick_check_oneshot_change(int allow_nohz) { return 0; } | ||
| 130 | static inline void tick_irq_enter(void) { } | ||
| 131 | static inline int tick_oneshot_mode_active(void) { return 0; } | ||
| 132 | #endif /* !CONFIG_GENERIC_CLOCKEVENTS */ | ||
| 133 | 48 | ||
| 134 | # ifdef CONFIG_NO_HZ_COMMON | 49 | enum tick_broadcast_mode { |
| 135 | DECLARE_PER_CPU(struct tick_sched, tick_cpu_sched); | 50 | TICK_BROADCAST_OFF, |
| 51 | TICK_BROADCAST_ON, | ||
| 52 | TICK_BROADCAST_FORCE, | ||
| 53 | }; | ||
| 54 | |||
| 55 | enum tick_broadcast_state { | ||
| 56 | TICK_BROADCAST_EXIT, | ||
| 57 | TICK_BROADCAST_ENTER, | ||
| 58 | }; | ||
| 59 | |||
| 60 | #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST | ||
| 61 | extern void tick_broadcast_control(enum tick_broadcast_mode mode); | ||
| 62 | #else | ||
| 63 | static inline void tick_broadcast_control(enum tick_broadcast_mode mode) { } | ||
| 64 | #endif /* BROADCAST */ | ||
| 65 | |||
| 66 | #if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) && defined(CONFIG_TICK_ONESHOT) | ||
| 67 | extern int tick_broadcast_oneshot_control(enum tick_broadcast_state state); | ||
| 68 | #else | ||
| 69 | static inline int tick_broadcast_oneshot_control(enum tick_broadcast_state state) { return 0; } | ||
| 70 | #endif | ||
| 136 | 71 | ||
| 137 | static inline int tick_nohz_tick_stopped(void) | 72 | static inline void tick_broadcast_enable(void) |
| 73 | { | ||
| 74 | tick_broadcast_control(TICK_BROADCAST_ON); | ||
| 75 | } | ||
| 76 | static inline void tick_broadcast_disable(void) | ||
| 77 | { | ||
| 78 | tick_broadcast_control(TICK_BROADCAST_OFF); | ||
| 79 | } | ||
| 80 | static inline void tick_broadcast_force(void) | ||
| 81 | { | ||
| 82 | tick_broadcast_control(TICK_BROADCAST_FORCE); | ||
| 83 | } | ||
| 84 | static inline int tick_broadcast_enter(void) | ||
| 138 | { | 85 | { |
| 139 | return __this_cpu_read(tick_cpu_sched.tick_stopped); | 86 | return tick_broadcast_oneshot_control(TICK_BROADCAST_ENTER); |
| 87 | } | ||
| 88 | static inline void tick_broadcast_exit(void) | ||
| 89 | { | ||
| 90 | tick_broadcast_oneshot_control(TICK_BROADCAST_EXIT); | ||
| 140 | } | 91 | } |
| 141 | 92 | ||
| 93 | #ifdef CONFIG_NO_HZ_COMMON | ||
| 94 | extern int tick_nohz_tick_stopped(void); | ||
| 142 | extern void tick_nohz_idle_enter(void); | 95 | extern void tick_nohz_idle_enter(void); |
| 143 | extern void tick_nohz_idle_exit(void); | 96 | extern void tick_nohz_idle_exit(void); |
| 144 | extern void tick_nohz_irq_exit(void); | 97 | extern void tick_nohz_irq_exit(void); |
| 145 | extern ktime_t tick_nohz_get_sleep_length(void); | 98 | extern ktime_t tick_nohz_get_sleep_length(void); |
| 146 | extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time); | 99 | extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time); |
| 147 | extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time); | 100 | extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time); |
| 148 | 101 | #else /* !CONFIG_NO_HZ_COMMON */ | |
| 149 | # else /* !CONFIG_NO_HZ_COMMON */ | 102 | static inline int tick_nohz_tick_stopped(void) { return 0; } |
| 150 | static inline int tick_nohz_tick_stopped(void) | ||
| 151 | { | ||
| 152 | return 0; | ||
| 153 | } | ||
| 154 | |||
| 155 | static inline void tick_nohz_idle_enter(void) { } | 103 | static inline void tick_nohz_idle_enter(void) { } |
| 156 | static inline void tick_nohz_idle_exit(void) { } | 104 | static inline void tick_nohz_idle_exit(void) { } |
| 157 | 105 | ||
| @@ -163,7 +111,7 @@ static inline ktime_t tick_nohz_get_sleep_length(void) | |||
| 163 | } | 111 | } |
| 164 | static inline u64 get_cpu_idle_time_us(int cpu, u64 *unused) { return -1; } | 112 | static inline u64 get_cpu_idle_time_us(int cpu, u64 *unused) { return -1; } |
| 165 | static inline u64 get_cpu_iowait_time_us(int cpu, u64 *unused) { return -1; } | 113 | static inline u64 get_cpu_iowait_time_us(int cpu, u64 *unused) { return -1; } |
| 166 | # endif /* !CONFIG_NO_HZ_COMMON */ | 114 | #endif /* !CONFIG_NO_HZ_COMMON */ |
| 167 | 115 | ||
| 168 | #ifdef CONFIG_NO_HZ_FULL | 116 | #ifdef CONFIG_NO_HZ_FULL |
| 169 | extern bool tick_nohz_full_running; | 117 | extern bool tick_nohz_full_running; |
diff --git a/include/linux/timekeeper_internal.h b/include/linux/timekeeper_internal.h index 05af9a334893..fb86963859c7 100644 --- a/include/linux/timekeeper_internal.h +++ b/include/linux/timekeeper_internal.h | |||
| @@ -16,16 +16,16 @@ | |||
| 16 | * @read: Read function of @clock | 16 | * @read: Read function of @clock |
| 17 | * @mask: Bitmask for two's complement subtraction of non 64bit clocks | 17 | * @mask: Bitmask for two's complement subtraction of non 64bit clocks |
| 18 | * @cycle_last: @clock cycle value at last update | 18 | * @cycle_last: @clock cycle value at last update |
| 19 | * @mult: NTP adjusted multiplier for scaled math conversion | 19 | * @mult: (NTP adjusted) multiplier for scaled math conversion |
| 20 | * @shift: Shift value for scaled math conversion | 20 | * @shift: Shift value for scaled math conversion |
| 21 | * @xtime_nsec: Shifted (fractional) nano seconds offset for readout | 21 | * @xtime_nsec: Shifted (fractional) nano seconds offset for readout |
| 22 | * @base_mono: ktime_t (nanoseconds) base time for readout | 22 | * @base: ktime_t (nanoseconds) base time for readout |
| 23 | * | 23 | * |
| 24 | * This struct has size 56 byte on 64 bit. Together with a seqcount it | 24 | * This struct has size 56 byte on 64 bit. Together with a seqcount it |
| 25 | * occupies a single 64byte cache line. | 25 | * occupies a single 64byte cache line. |
| 26 | * | 26 | * |
| 27 | * The struct is separate from struct timekeeper as it is also used | 27 | * The struct is separate from struct timekeeper as it is also used |
| 28 | * for a fast NMI safe accessor to clock monotonic. | 28 | * for a fast NMI safe accessors. |
| 29 | */ | 29 | */ |
| 30 | struct tk_read_base { | 30 | struct tk_read_base { |
| 31 | struct clocksource *clock; | 31 | struct clocksource *clock; |
| @@ -35,12 +35,13 @@ struct tk_read_base { | |||
| 35 | u32 mult; | 35 | u32 mult; |
| 36 | u32 shift; | 36 | u32 shift; |
| 37 | u64 xtime_nsec; | 37 | u64 xtime_nsec; |
| 38 | ktime_t base_mono; | 38 | ktime_t base; |
| 39 | }; | 39 | }; |
| 40 | 40 | ||
| 41 | /** | 41 | /** |
| 42 | * struct timekeeper - Structure holding internal timekeeping values. | 42 | * struct timekeeper - Structure holding internal timekeeping values. |
| 43 | * @tkr: The readout base structure | 43 | * @tkr_mono: The readout base structure for CLOCK_MONOTONIC |
| 44 | * @tkr_raw: The readout base structure for CLOCK_MONOTONIC_RAW | ||
| 44 | * @xtime_sec: Current CLOCK_REALTIME time in seconds | 45 | * @xtime_sec: Current CLOCK_REALTIME time in seconds |
| 45 | * @ktime_sec: Current CLOCK_MONOTONIC time in seconds | 46 | * @ktime_sec: Current CLOCK_MONOTONIC time in seconds |
| 46 | * @wall_to_monotonic: CLOCK_REALTIME to CLOCK_MONOTONIC offset | 47 | * @wall_to_monotonic: CLOCK_REALTIME to CLOCK_MONOTONIC offset |
| @@ -48,7 +49,6 @@ struct tk_read_base { | |||
| 48 | * @offs_boot: Offset clock monotonic -> clock boottime | 49 | * @offs_boot: Offset clock monotonic -> clock boottime |
| 49 | * @offs_tai: Offset clock monotonic -> clock tai | 50 | * @offs_tai: Offset clock monotonic -> clock tai |
| 50 | * @tai_offset: The current UTC to TAI offset in seconds | 51 | * @tai_offset: The current UTC to TAI offset in seconds |
| 51 | * @base_raw: Monotonic raw base time in ktime_t format | ||
| 52 | * @raw_time: Monotonic raw base time in timespec64 format | 52 | * @raw_time: Monotonic raw base time in timespec64 format |
| 53 | * @cycle_interval: Number of clock cycles in one NTP interval | 53 | * @cycle_interval: Number of clock cycles in one NTP interval |
| 54 | * @xtime_interval: Number of clock shifted nano seconds in one NTP | 54 | * @xtime_interval: Number of clock shifted nano seconds in one NTP |
| @@ -76,7 +76,8 @@ struct tk_read_base { | |||
| 76 | * used instead. | 76 | * used instead. |
| 77 | */ | 77 | */ |
| 78 | struct timekeeper { | 78 | struct timekeeper { |
| 79 | struct tk_read_base tkr; | 79 | struct tk_read_base tkr_mono; |
| 80 | struct tk_read_base tkr_raw; | ||
| 80 | u64 xtime_sec; | 81 | u64 xtime_sec; |
| 81 | unsigned long ktime_sec; | 82 | unsigned long ktime_sec; |
| 82 | struct timespec64 wall_to_monotonic; | 83 | struct timespec64 wall_to_monotonic; |
| @@ -84,7 +85,6 @@ struct timekeeper { | |||
| 84 | ktime_t offs_boot; | 85 | ktime_t offs_boot; |
| 85 | ktime_t offs_tai; | 86 | ktime_t offs_tai; |
| 86 | s32 tai_offset; | 87 | s32 tai_offset; |
| 87 | ktime_t base_raw; | ||
| 88 | struct timespec64 raw_time; | 88 | struct timespec64 raw_time; |
| 89 | 89 | ||
| 90 | /* The following members are for timekeeping internal use */ | 90 | /* The following members are for timekeeping internal use */ |
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h index 3eaae4754275..99176af216af 100644 --- a/include/linux/timekeeping.h +++ b/include/linux/timekeeping.h | |||
| @@ -214,12 +214,18 @@ static inline u64 ktime_get_boot_ns(void) | |||
| 214 | return ktime_to_ns(ktime_get_boottime()); | 214 | return ktime_to_ns(ktime_get_boottime()); |
| 215 | } | 215 | } |
| 216 | 216 | ||
| 217 | static inline u64 ktime_get_tai_ns(void) | ||
| 218 | { | ||
| 219 | return ktime_to_ns(ktime_get_clocktai()); | ||
| 220 | } | ||
| 221 | |||
| 217 | static inline u64 ktime_get_raw_ns(void) | 222 | static inline u64 ktime_get_raw_ns(void) |
| 218 | { | 223 | { |
| 219 | return ktime_to_ns(ktime_get_raw()); | 224 | return ktime_to_ns(ktime_get_raw()); |
| 220 | } | 225 | } |
| 221 | 226 | ||
| 222 | extern u64 ktime_get_mono_fast_ns(void); | 227 | extern u64 ktime_get_mono_fast_ns(void); |
| 228 | extern u64 ktime_get_raw_fast_ns(void); | ||
| 223 | 229 | ||
| 224 | /* | 230 | /* |
| 225 | * Timespec interfaces utilizing the ktime based ones | 231 | * Timespec interfaces utilizing the ktime based ones |
| @@ -242,6 +248,9 @@ static inline void timekeeping_clocktai(struct timespec *ts) | |||
| 242 | /* | 248 | /* |
| 243 | * RTC specific | 249 | * RTC specific |
| 244 | */ | 250 | */ |
| 251 | extern bool timekeeping_rtc_skipsuspend(void); | ||
| 252 | extern bool timekeeping_rtc_skipresume(void); | ||
| 253 | |||
| 245 | extern void timekeeping_inject_sleeptime64(struct timespec64 *delta); | 254 | extern void timekeeping_inject_sleeptime64(struct timespec64 *delta); |
| 246 | 255 | ||
| 247 | /* | 256 | /* |
| @@ -253,17 +262,14 @@ extern void getnstime_raw_and_real(struct timespec *ts_raw, | |||
| 253 | /* | 262 | /* |
| 254 | * Persistent clock related interfaces | 263 | * Persistent clock related interfaces |
| 255 | */ | 264 | */ |
| 256 | extern bool persistent_clock_exist; | ||
| 257 | extern int persistent_clock_is_local; | 265 | extern int persistent_clock_is_local; |
| 258 | 266 | ||
| 259 | static inline bool has_persistent_clock(void) | ||
| 260 | { | ||
| 261 | return persistent_clock_exist; | ||
| 262 | } | ||
| 263 | |||
| 264 | extern void read_persistent_clock(struct timespec *ts); | 267 | extern void read_persistent_clock(struct timespec *ts); |
| 268 | extern void read_persistent_clock64(struct timespec64 *ts); | ||
| 265 | extern void read_boot_clock(struct timespec *ts); | 269 | extern void read_boot_clock(struct timespec *ts); |
| 270 | extern void read_boot_clock64(struct timespec64 *ts); | ||
| 266 | extern int update_persistent_clock(struct timespec now); | 271 | extern int update_persistent_clock(struct timespec now); |
| 272 | extern int update_persistent_clock64(struct timespec64 now); | ||
| 267 | 273 | ||
| 268 | 274 | ||
| 269 | #endif | 275 | #endif |
diff --git a/include/linux/tracefs.h b/include/linux/tracefs.h new file mode 100644 index 000000000000..5b727a17beee --- /dev/null +++ b/include/linux/tracefs.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * tracefs.h - a pseudo file system for activating tracing | ||
| 3 | * | ||
| 4 | * Based on debugfs by: 2004 Greg Kroah-Hartman <greg@kroah.com> | ||
| 5 | * | ||
| 6 | * Copyright (C) 2014 Red Hat Inc, author: Steven Rostedt <srostedt@redhat.com> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or | ||
| 9 | * modify it under the terms of the GNU General Public License version | ||
| 10 | * 2 as published by the Free Software Foundation. | ||
| 11 | * | ||
| 12 | * tracefs is the file system that is used by the tracing infrastructure. | ||
| 13 | * | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef _TRACEFS_H_ | ||
| 17 | #define _TRACEFS_H_ | ||
| 18 | |||
| 19 | #include <linux/fs.h> | ||
| 20 | #include <linux/seq_file.h> | ||
| 21 | |||
| 22 | #include <linux/types.h> | ||
| 23 | |||
| 24 | struct file_operations; | ||
| 25 | |||
| 26 | #ifdef CONFIG_TRACING | ||
| 27 | |||
| 28 | struct dentry *tracefs_create_file(const char *name, umode_t mode, | ||
| 29 | struct dentry *parent, void *data, | ||
| 30 | const struct file_operations *fops); | ||
| 31 | |||
| 32 | struct dentry *tracefs_create_dir(const char *name, struct dentry *parent); | ||
| 33 | |||
| 34 | void tracefs_remove(struct dentry *dentry); | ||
| 35 | void tracefs_remove_recursive(struct dentry *dentry); | ||
| 36 | |||
| 37 | struct dentry *tracefs_create_instance_dir(const char *name, struct dentry *parent, | ||
| 38 | int (*mkdir)(const char *name), | ||
| 39 | int (*rmdir)(const char *name)); | ||
| 40 | |||
| 41 | bool tracefs_initialized(void); | ||
| 42 | |||
| 43 | #endif /* CONFIG_TRACING */ | ||
| 44 | |||
| 45 | #endif | ||
diff --git a/include/linux/tracepoint.h b/include/linux/tracepoint.h index c72851328ca9..a5f7f3ecafa3 100644 --- a/include/linux/tracepoint.h +++ b/include/linux/tracepoint.h | |||
| @@ -36,6 +36,12 @@ struct tracepoint { | |||
| 36 | struct tracepoint_func __rcu *funcs; | 36 | struct tracepoint_func __rcu *funcs; |
| 37 | }; | 37 | }; |
| 38 | 38 | ||
| 39 | struct trace_enum_map { | ||
| 40 | const char *system; | ||
| 41 | const char *enum_string; | ||
| 42 | unsigned long enum_value; | ||
| 43 | }; | ||
| 44 | |||
| 39 | extern int | 45 | extern int |
| 40 | tracepoint_probe_register(struct tracepoint *tp, void *probe, void *data); | 46 | tracepoint_probe_register(struct tracepoint *tp, void *probe, void *data); |
| 41 | extern int | 47 | extern int |
| @@ -87,6 +93,8 @@ extern void syscall_unregfunc(void); | |||
| 87 | 93 | ||
| 88 | #define PARAMS(args...) args | 94 | #define PARAMS(args...) args |
| 89 | 95 | ||
| 96 | #define TRACE_DEFINE_ENUM(x) | ||
| 97 | |||
| 90 | #endif /* _LINUX_TRACEPOINT_H */ | 98 | #endif /* _LINUX_TRACEPOINT_H */ |
| 91 | 99 | ||
| 92 | /* | 100 | /* |
diff --git a/include/linux/uio.h b/include/linux/uio.h index 71880299ed48..15f11fb9fff6 100644 --- a/include/linux/uio.h +++ b/include/linux/uio.h | |||
| @@ -76,6 +76,7 @@ size_t iov_iter_copy_from_user_atomic(struct page *page, | |||
| 76 | struct iov_iter *i, unsigned long offset, size_t bytes); | 76 | struct iov_iter *i, unsigned long offset, size_t bytes); |
| 77 | void iov_iter_advance(struct iov_iter *i, size_t bytes); | 77 | void iov_iter_advance(struct iov_iter *i, size_t bytes); |
| 78 | int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes); | 78 | int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes); |
| 79 | int iov_iter_fault_in_multipages_readable(struct iov_iter *i, size_t bytes); | ||
| 79 | size_t iov_iter_single_seg_count(const struct iov_iter *i); | 80 | size_t iov_iter_single_seg_count(const struct iov_iter *i); |
| 80 | size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes, | 81 | size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes, |
| 81 | struct iov_iter *i); | 82 | struct iov_iter *i); |
| @@ -139,4 +140,18 @@ static inline void iov_iter_reexpand(struct iov_iter *i, size_t count) | |||
| 139 | size_t csum_and_copy_to_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); | 140 | size_t csum_and_copy_to_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); |
| 140 | size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); | 141 | size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, struct iov_iter *i); |
| 141 | 142 | ||
| 143 | int import_iovec(int type, const struct iovec __user * uvector, | ||
| 144 | unsigned nr_segs, unsigned fast_segs, | ||
| 145 | struct iovec **iov, struct iov_iter *i); | ||
| 146 | |||
| 147 | #ifdef CONFIG_COMPAT | ||
| 148 | struct compat_iovec; | ||
| 149 | int compat_import_iovec(int type, const struct compat_iovec __user * uvector, | ||
| 150 | unsigned nr_segs, unsigned fast_segs, | ||
| 151 | struct iovec **iov, struct iov_iter *i); | ||
| 152 | #endif | ||
| 153 | |||
| 154 | int import_single_range(int type, void __user *buf, size_t len, | ||
| 155 | struct iovec *iov, struct iov_iter *i); | ||
| 156 | |||
| 142 | #endif | 157 | #endif |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 7ee1b5c3b4cb..447fe29b55b4 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -205,6 +205,32 @@ void usb_put_intf(struct usb_interface *intf); | |||
| 205 | #define USB_MAXINTERFACES 32 | 205 | #define USB_MAXINTERFACES 32 |
| 206 | #define USB_MAXIADS (USB_MAXINTERFACES/2) | 206 | #define USB_MAXIADS (USB_MAXINTERFACES/2) |
| 207 | 207 | ||
| 208 | /* | ||
| 209 | * USB Resume Timer: Every Host controller driver should drive the resume | ||
| 210 | * signalling on the bus for the amount of time defined by this macro. | ||
| 211 | * | ||
| 212 | * That way we will have a 'stable' behavior among all HCDs supported by Linux. | ||
| 213 | * | ||
| 214 | * Note that the USB Specification states we should drive resume for *at least* | ||
| 215 | * 20 ms, but it doesn't give an upper bound. This creates two possible | ||
| 216 | * situations which we want to avoid: | ||
| 217 | * | ||
| 218 | * (a) sometimes an msleep(20) might expire slightly before 20 ms, which causes | ||
| 219 | * us to fail USB Electrical Tests, thus failing Certification | ||
| 220 | * | ||
| 221 | * (b) Some (many) devices actually need more than 20 ms of resume signalling, | ||
| 222 | * and while we can argue that's against the USB Specification, we don't have | ||
| 223 | * control over which devices a certification laboratory will be using for | ||
| 224 | * certification. If CertLab uses a device which was tested against Windows and | ||
| 225 | * that happens to have relaxed resume signalling rules, we might fall into | ||
| 226 | * situations where we fail interoperability and electrical tests. | ||
| 227 | * | ||
| 228 | * In order to avoid both conditions, we're using a 40 ms resume timeout, which | ||
| 229 | * should cope with both LPJ calibration errors and devices not following every | ||
| 230 | * detail of the USB Specification. | ||
| 231 | */ | ||
| 232 | #define USB_RESUME_TIMEOUT 40 /* ms */ | ||
| 233 | |||
| 208 | /** | 234 | /** |
| 209 | * struct usb_interface_cache - long-term representation of a device interface | 235 | * struct usb_interface_cache - long-term representation of a device interface |
| 210 | * @num_altsetting: number of altsettings defined. | 236 | * @num_altsetting: number of altsettings defined. |
diff --git a/include/linux/usb/chipidea.h b/include/linux/usb/chipidea.h index 535997a6681b..ab94f78c4dd1 100644 --- a/include/linux/usb/chipidea.h +++ b/include/linux/usb/chipidea.h | |||
| @@ -19,6 +19,7 @@ struct ci_hdrc_platform_data { | |||
| 19 | enum usb_phy_interface phy_mode; | 19 | enum usb_phy_interface phy_mode; |
| 20 | unsigned long flags; | 20 | unsigned long flags; |
| 21 | #define CI_HDRC_REGS_SHARED BIT(0) | 21 | #define CI_HDRC_REGS_SHARED BIT(0) |
| 22 | #define CI_HDRC_SUPPORTS_RUNTIME_PM BIT(2) | ||
| 22 | #define CI_HDRC_DISABLE_STREAMING BIT(3) | 23 | #define CI_HDRC_DISABLE_STREAMING BIT(3) |
| 23 | /* | 24 | /* |
| 24 | * Only set it when DCCPARAMS.DC==1 and DCCPARAMS.HC==1, | 25 | * Only set it when DCCPARAMS.DC==1 and DCCPARAMS.HC==1, |
| @@ -27,6 +28,7 @@ struct ci_hdrc_platform_data { | |||
| 27 | #define CI_HDRC_DUAL_ROLE_NOT_OTG BIT(4) | 28 | #define CI_HDRC_DUAL_ROLE_NOT_OTG BIT(4) |
| 28 | #define CI_HDRC_IMX28_WRITE_FIX BIT(5) | 29 | #define CI_HDRC_IMX28_WRITE_FIX BIT(5) |
| 29 | #define CI_HDRC_FORCE_FULLSPEED BIT(6) | 30 | #define CI_HDRC_FORCE_FULLSPEED BIT(6) |
| 31 | #define CI_HDRC_TURN_VBUS_EARLY_ON BIT(7) | ||
| 30 | enum usb_dr_mode dr_mode; | 32 | enum usb_dr_mode dr_mode; |
| 31 | #define CI_HDRC_CONTROLLER_RESET_EVENT 0 | 33 | #define CI_HDRC_CONTROLLER_RESET_EVENT 0 |
| 32 | #define CI_HDRC_CONTROLLER_STOPPED_EVENT 1 | 34 | #define CI_HDRC_CONTROLLER_STOPPED_EVENT 1 |
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h index 3d87defcc527..2511469a9904 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h | |||
| @@ -148,6 +148,7 @@ struct usb_os_desc_table { | |||
| 148 | * @disable: (REQUIRED) Indicates the function should be disabled. Reasons | 148 | * @disable: (REQUIRED) Indicates the function should be disabled. Reasons |
| 149 | * include host resetting or reconfiguring the gadget, and disconnection. | 149 | * include host resetting or reconfiguring the gadget, and disconnection. |
| 150 | * @setup: Used for interface-specific control requests. | 150 | * @setup: Used for interface-specific control requests. |
| 151 | * @req_match: Tests if a given class request can be handled by this function. | ||
| 151 | * @suspend: Notifies functions when the host stops sending USB traffic. | 152 | * @suspend: Notifies functions when the host stops sending USB traffic. |
| 152 | * @resume: Notifies functions when the host restarts USB traffic. | 153 | * @resume: Notifies functions when the host restarts USB traffic. |
| 153 | * @get_status: Returns function status as a reply to | 154 | * @get_status: Returns function status as a reply to |
| @@ -213,6 +214,8 @@ struct usb_function { | |||
| 213 | void (*disable)(struct usb_function *); | 214 | void (*disable)(struct usb_function *); |
| 214 | int (*setup)(struct usb_function *, | 215 | int (*setup)(struct usb_function *, |
| 215 | const struct usb_ctrlrequest *); | 216 | const struct usb_ctrlrequest *); |
| 217 | bool (*req_match)(struct usb_function *, | ||
| 218 | const struct usb_ctrlrequest *); | ||
| 216 | void (*suspend)(struct usb_function *); | 219 | void (*suspend)(struct usb_function *); |
| 217 | void (*resume)(struct usb_function *); | 220 | void (*resume)(struct usb_function *); |
| 218 | 221 | ||
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index e2f00fd8cd47..4f3dfb7d0654 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h | |||
| @@ -190,7 +190,7 @@ struct usb_ep { | |||
| 190 | * @ep:the endpoint being configured | 190 | * @ep:the endpoint being configured |
| 191 | * @maxpacket_limit:value of maximum packet size limit | 191 | * @maxpacket_limit:value of maximum packet size limit |
| 192 | * | 192 | * |
| 193 | * This function shoud be used only in UDC drivers to initialize endpoint | 193 | * This function should be used only in UDC drivers to initialize endpoint |
| 194 | * (usually in probe function). | 194 | * (usually in probe function). |
| 195 | */ | 195 | */ |
| 196 | static inline void usb_ep_set_maxpacket_limit(struct usb_ep *ep, | 196 | static inline void usb_ep_set_maxpacket_limit(struct usb_ep *ep, |
| @@ -474,6 +474,7 @@ struct usb_dcd_config_params { | |||
| 474 | 474 | ||
| 475 | struct usb_gadget; | 475 | struct usb_gadget; |
| 476 | struct usb_gadget_driver; | 476 | struct usb_gadget_driver; |
| 477 | struct usb_udc; | ||
| 477 | 478 | ||
| 478 | /* the rest of the api to the controller hardware: device operations, | 479 | /* the rest of the api to the controller hardware: device operations, |
| 479 | * which don't involve endpoints (or i/o). | 480 | * which don't involve endpoints (or i/o). |
| @@ -496,6 +497,7 @@ struct usb_gadget_ops { | |||
| 496 | /** | 497 | /** |
| 497 | * struct usb_gadget - represents a usb slave device | 498 | * struct usb_gadget - represents a usb slave device |
| 498 | * @work: (internal use) Workqueue to be used for sysfs_notify() | 499 | * @work: (internal use) Workqueue to be used for sysfs_notify() |
| 500 | * @udc: struct usb_udc pointer for this gadget | ||
| 499 | * @ops: Function pointers used to access hardware-specific operations. | 501 | * @ops: Function pointers used to access hardware-specific operations. |
| 500 | * @ep0: Endpoint zero, used when reading or writing responses to | 502 | * @ep0: Endpoint zero, used when reading or writing responses to |
| 501 | * driver setup() requests | 503 | * driver setup() requests |
| @@ -545,6 +547,7 @@ struct usb_gadget_ops { | |||
| 545 | */ | 547 | */ |
| 546 | struct usb_gadget { | 548 | struct usb_gadget { |
| 547 | struct work_struct work; | 549 | struct work_struct work; |
| 550 | struct usb_udc *udc; | ||
| 548 | /* readonly to gadget driver */ | 551 | /* readonly to gadget driver */ |
| 549 | const struct usb_gadget_ops *ops; | 552 | const struct usb_gadget_ops *ops; |
| 550 | struct usb_ep *ep0; | 553 | struct usb_ep *ep0; |
| @@ -1029,6 +1032,10 @@ extern void usb_gadget_udc_reset(struct usb_gadget *gadget, | |||
| 1029 | extern void usb_gadget_giveback_request(struct usb_ep *ep, | 1032 | extern void usb_gadget_giveback_request(struct usb_ep *ep, |
| 1030 | struct usb_request *req); | 1033 | struct usb_request *req); |
| 1031 | 1034 | ||
| 1035 | /*-------------------------------------------------------------------------*/ | ||
| 1036 | |||
| 1037 | /* utility to update vbus status for udc core, it may be scheduled */ | ||
| 1038 | extern void usb_udc_vbus_handler(struct usb_gadget *gadget, bool status); | ||
| 1032 | 1039 | ||
| 1033 | /*-------------------------------------------------------------------------*/ | 1040 | /*-------------------------------------------------------------------------*/ |
| 1034 | 1041 | ||
diff --git a/include/linux/usb/msm_hsusb.h b/include/linux/usb/msm_hsusb.h index b0a39243295a..7dbecf9a4656 100644 --- a/include/linux/usb/msm_hsusb.h +++ b/include/linux/usb/msm_hsusb.h | |||
| @@ -117,8 +117,6 @@ struct msm_otg_platform_data { | |||
| 117 | enum otg_control_type otg_control; | 117 | enum otg_control_type otg_control; |
| 118 | enum msm_usb_phy_type phy_type; | 118 | enum msm_usb_phy_type phy_type; |
| 119 | void (*setup_gpio)(enum usb_otg_state state); | 119 | void (*setup_gpio)(enum usb_otg_state state); |
| 120 | int (*link_clk_reset)(struct clk *link_clk, bool assert); | ||
| 121 | int (*phy_clk_reset)(struct clk *phy_clk); | ||
| 122 | }; | 120 | }; |
| 123 | 121 | ||
| 124 | /** | 122 | /** |
| @@ -128,7 +126,6 @@ struct msm_otg_platform_data { | |||
| 128 | * @irq: IRQ number assigned for HSUSB controller. | 126 | * @irq: IRQ number assigned for HSUSB controller. |
| 129 | * @clk: clock struct of usb_hs_clk. | 127 | * @clk: clock struct of usb_hs_clk. |
| 130 | * @pclk: clock struct of usb_hs_pclk. | 128 | * @pclk: clock struct of usb_hs_pclk. |
| 131 | * @phy_reset_clk: clock struct of usb_phy_clk. | ||
| 132 | * @core_clk: clock struct of usb_hs_core_clk. | 129 | * @core_clk: clock struct of usb_hs_core_clk. |
| 133 | * @regs: ioremapped register base address. | 130 | * @regs: ioremapped register base address. |
| 134 | * @inputs: OTG state machine inputs(Id, SessValid etc). | 131 | * @inputs: OTG state machine inputs(Id, SessValid etc). |
| @@ -148,7 +145,6 @@ struct msm_otg { | |||
| 148 | int irq; | 145 | int irq; |
| 149 | struct clk *clk; | 146 | struct clk *clk; |
| 150 | struct clk *pclk; | 147 | struct clk *pclk; |
| 151 | struct clk *phy_reset_clk; | ||
| 152 | struct clk *core_clk; | 148 | struct clk *core_clk; |
| 153 | void __iomem *regs; | 149 | void __iomem *regs; |
| 154 | #define ID 0 | 150 | #define ID 0 |
diff --git a/include/linux/usb/otg-fsm.h b/include/linux/usb/otg-fsm.h index b6ba1bfb86f2..f728f1854829 100644 --- a/include/linux/usb/otg-fsm.h +++ b/include/linux/usb/otg-fsm.h | |||
| @@ -53,6 +53,8 @@ enum otg_fsm_timer { | |||
| 53 | B_SE0_SRP, | 53 | B_SE0_SRP, |
| 54 | B_SRP_FAIL, | 54 | B_SRP_FAIL, |
| 55 | A_WAIT_ENUM, | 55 | A_WAIT_ENUM, |
| 56 | B_DATA_PLS, | ||
| 57 | B_SSEND_SRP, | ||
| 56 | 58 | ||
| 57 | NUM_OTG_FSM_TIMERS, | 59 | NUM_OTG_FSM_TIMERS, |
| 58 | }; | 60 | }; |
diff --git a/include/linux/usb/renesas_usbhs.h b/include/linux/usb/renesas_usbhs.h index 9fd9e481ea98..f06529c14141 100644 --- a/include/linux/usb/renesas_usbhs.h +++ b/include/linux/usb/renesas_usbhs.h | |||
| @@ -165,6 +165,8 @@ struct renesas_usbhs_driver_param { | |||
| 165 | */ | 165 | */ |
| 166 | u32 has_otg:1; /* for controlling PWEN/EXTLP */ | 166 | u32 has_otg:1; /* for controlling PWEN/EXTLP */ |
| 167 | u32 has_sudmac:1; /* for SUDMAC */ | 167 | u32 has_sudmac:1; /* for SUDMAC */ |
| 168 | u32 has_usb_dmac:1; /* for USB-DMAC */ | ||
| 169 | #define USBHS_USB_DMAC_XFER_SIZE 32 /* hardcode the xfer size */ | ||
| 168 | }; | 170 | }; |
| 169 | 171 | ||
| 170 | #define USBHS_TYPE_R8A7790 1 | 172 | #define USBHS_TYPE_R8A7790 1 |
diff --git a/include/linux/uwb/umc.h b/include/linux/uwb/umc.h index ba82f03d8287..02112299a1d3 100644 --- a/include/linux/uwb/umc.h +++ b/include/linux/uwb/umc.h | |||
| @@ -87,8 +87,6 @@ struct umc_driver { | |||
| 87 | 87 | ||
| 88 | int (*probe)(struct umc_dev *); | 88 | int (*probe)(struct umc_dev *); |
| 89 | void (*remove)(struct umc_dev *); | 89 | void (*remove)(struct umc_dev *); |
| 90 | int (*suspend)(struct umc_dev *, pm_message_t state); | ||
| 91 | int (*resume)(struct umc_dev *); | ||
| 92 | int (*pre_reset)(struct umc_dev *); | 90 | int (*pre_reset)(struct umc_dev *); |
| 93 | int (*post_reset)(struct umc_dev *); | 91 | int (*post_reset)(struct umc_dev *); |
| 94 | 92 | ||
diff --git a/include/linux/vfio.h b/include/linux/vfio.h index 2d67b8998fd8..ddb440975382 100644 --- a/include/linux/vfio.h +++ b/include/linux/vfio.h | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | 14 | ||
| 15 | #include <linux/iommu.h> | 15 | #include <linux/iommu.h> |
| 16 | #include <linux/mm.h> | 16 | #include <linux/mm.h> |
| 17 | #include <linux/workqueue.h> | ||
| 18 | #include <linux/poll.h> | ||
| 17 | #include <uapi/linux/vfio.h> | 19 | #include <uapi/linux/vfio.h> |
| 18 | 20 | ||
| 19 | /** | 21 | /** |
| @@ -78,19 +80,6 @@ extern int vfio_register_iommu_driver(const struct vfio_iommu_driver_ops *ops); | |||
| 78 | extern void vfio_unregister_iommu_driver( | 80 | extern void vfio_unregister_iommu_driver( |
| 79 | const struct vfio_iommu_driver_ops *ops); | 81 | const struct vfio_iommu_driver_ops *ops); |
| 80 | 82 | ||
| 81 | /** | ||
| 82 | * offsetofend(TYPE, MEMBER) | ||
| 83 | * | ||
| 84 | * @TYPE: The type of the structure | ||
| 85 | * @MEMBER: The member within the structure to get the end offset of | ||
| 86 | * | ||
| 87 | * Simple helper macro for dealing with variable sized structures passed | ||
| 88 | * from user space. This allows us to easily determine if the provided | ||
| 89 | * structure is sized to include various fields. | ||
| 90 | */ | ||
| 91 | #define offsetofend(TYPE, MEMBER) \ | ||
| 92 | (offsetof(TYPE, MEMBER) + sizeof(((TYPE *)0)->MEMBER)) | ||
| 93 | |||
| 94 | /* | 83 | /* |
| 95 | * External user API | 84 | * External user API |
| 96 | */ | 85 | */ |
| @@ -123,4 +112,27 @@ static inline long vfio_spapr_iommu_eeh_ioctl(struct iommu_group *group, | |||
| 123 | return -ENOTTY; | 112 | return -ENOTTY; |
| 124 | } | 113 | } |
| 125 | #endif /* CONFIG_EEH */ | 114 | #endif /* CONFIG_EEH */ |
| 115 | |||
| 116 | /* | ||
| 117 | * IRQfd - generic | ||
| 118 | */ | ||
| 119 | struct virqfd { | ||
| 120 | void *opaque; | ||
| 121 | struct eventfd_ctx *eventfd; | ||
| 122 | int (*handler)(void *, void *); | ||
| 123 | void (*thread)(void *, void *); | ||
| 124 | void *data; | ||
| 125 | struct work_struct inject; | ||
| 126 | wait_queue_t wait; | ||
| 127 | poll_table pt; | ||
| 128 | struct work_struct shutdown; | ||
| 129 | struct virqfd **pvirqfd; | ||
| 130 | }; | ||
| 131 | |||
| 132 | extern int vfio_virqfd_enable(void *opaque, | ||
| 133 | int (*handler)(void *, void *), | ||
| 134 | void (*thread)(void *, void *), | ||
| 135 | void *data, struct virqfd **pvirqfd, int fd); | ||
| 136 | extern void vfio_virqfd_disable(struct virqfd **pvirqfd); | ||
| 137 | |||
| 126 | #endif /* VFIO_H */ | 138 | #endif /* VFIO_H */ |
diff --git a/include/linux/vgaarb.h b/include/linux/vgaarb.h index c37bd4d06739..8c3b412d84df 100644 --- a/include/linux/vgaarb.h +++ b/include/linux/vgaarb.h | |||
| @@ -65,8 +65,13 @@ struct pci_dev; | |||
| 65 | * out of the arbitration process (and can be safe to take | 65 | * out of the arbitration process (and can be safe to take |
| 66 | * interrupts at any time. | 66 | * interrupts at any time. |
| 67 | */ | 67 | */ |
| 68 | #if defined(CONFIG_VGA_ARB) | ||
| 68 | extern void vga_set_legacy_decoding(struct pci_dev *pdev, | 69 | extern void vga_set_legacy_decoding(struct pci_dev *pdev, |
| 69 | unsigned int decodes); | 70 | unsigned int decodes); |
| 71 | #else | ||
| 72 | static inline void vga_set_legacy_decoding(struct pci_dev *pdev, | ||
| 73 | unsigned int decodes) { }; | ||
| 74 | #endif | ||
| 70 | 75 | ||
| 71 | /** | 76 | /** |
| 72 | * vga_get - acquire & locks VGA resources | 77 | * vga_get - acquire & locks VGA resources |
diff --git a/include/linux/vme.h b/include/linux/vme.h index 8cd6f19ca518..79242e9c06b8 100644 --- a/include/linux/vme.h +++ b/include/linux/vme.h | |||
| @@ -137,6 +137,7 @@ ssize_t vme_master_read(struct vme_resource *, void *, size_t, loff_t); | |||
| 137 | ssize_t vme_master_write(struct vme_resource *, void *, size_t, loff_t); | 137 | ssize_t vme_master_write(struct vme_resource *, void *, size_t, loff_t); |
| 138 | unsigned int vme_master_rmw(struct vme_resource *, unsigned int, unsigned int, | 138 | unsigned int vme_master_rmw(struct vme_resource *, unsigned int, unsigned int, |
| 139 | unsigned int, loff_t); | 139 | unsigned int, loff_t); |
| 140 | int vme_master_mmap(struct vme_resource *resource, struct vm_area_struct *vma); | ||
| 140 | void vme_master_free(struct vme_resource *); | 141 | void vme_master_free(struct vme_resource *); |
| 141 | 142 | ||
| 142 | struct vme_resource *vme_dma_request(struct vme_dev *, u32); | 143 | struct vme_resource *vme_dma_request(struct vme_dev *, u32); |
diff --git a/include/linux/watchdog.h b/include/linux/watchdog.h index 395b70e0eccf..a746bf5216f8 100644 --- a/include/linux/watchdog.h +++ b/include/linux/watchdog.h | |||
| @@ -137,4 +137,12 @@ extern int watchdog_init_timeout(struct watchdog_device *wdd, | |||
| 137 | extern int watchdog_register_device(struct watchdog_device *); | 137 | extern int watchdog_register_device(struct watchdog_device *); |
| 138 | extern void watchdog_unregister_device(struct watchdog_device *); | 138 | extern void watchdog_unregister_device(struct watchdog_device *); |
| 139 | 139 | ||
| 140 | #ifdef CONFIG_HARDLOCKUP_DETECTOR | ||
| 141 | void watchdog_nmi_disable_all(void); | ||
| 142 | void watchdog_nmi_enable_all(void); | ||
| 143 | #else | ||
| 144 | static inline void watchdog_nmi_disable_all(void) {} | ||
| 145 | static inline void watchdog_nmi_enable_all(void) {} | ||
| 146 | #endif | ||
| 147 | |||
| 140 | #endif /* ifndef _LINUX_WATCHDOG_H */ | 148 | #endif /* ifndef _LINUX_WATCHDOG_H */ |
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h index f597846ff605..deee212af8e0 100644 --- a/include/linux/workqueue.h +++ b/include/linux/workqueue.h | |||
| @@ -454,6 +454,7 @@ extern bool workqueue_congested(int cpu, struct workqueue_struct *wq); | |||
| 454 | extern unsigned int work_busy(struct work_struct *work); | 454 | extern unsigned int work_busy(struct work_struct *work); |
| 455 | extern __printf(1, 2) void set_worker_desc(const char *fmt, ...); | 455 | extern __printf(1, 2) void set_worker_desc(const char *fmt, ...); |
| 456 | extern void print_worker_info(const char *log_lvl, struct task_struct *task); | 456 | extern void print_worker_info(const char *log_lvl, struct task_struct *task); |
| 457 | extern void show_workqueue_state(void); | ||
| 457 | 458 | ||
| 458 | /** | 459 | /** |
| 459 | * queue_work - queue work on a workqueue | 460 | * queue_work - queue work on a workqueue |
