diff options
Diffstat (limited to 'include/linux')
103 files changed, 1725 insertions, 667 deletions
diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 7a8f2cd66c8b..358c01b971db 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h | |||
| @@ -37,6 +37,7 @@ | |||
| 37 | 37 | ||
| 38 | #include <linux/list.h> | 38 | #include <linux/list.h> |
| 39 | #include <linux/mod_devicetable.h> | 39 | #include <linux/mod_devicetable.h> |
| 40 | #include <linux/dynamic_debug.h> | ||
| 40 | 41 | ||
| 41 | #include <acpi/acpi.h> | 42 | #include <acpi/acpi.h> |
| 42 | #include <acpi/acpi_bus.h> | 43 | #include <acpi/acpi_bus.h> |
| @@ -184,6 +185,8 @@ extern int ec_transaction(u8 command, | |||
| 184 | u8 *rdata, unsigned rdata_len); | 185 | u8 *rdata, unsigned rdata_len); |
| 185 | extern acpi_handle ec_get_handle(void); | 186 | extern acpi_handle ec_get_handle(void); |
| 186 | 187 | ||
| 188 | extern bool acpi_is_pnp_device(struct acpi_device *); | ||
| 189 | |||
| 187 | #if defined(CONFIG_ACPI_WMI) || defined(CONFIG_ACPI_WMI_MODULE) | 190 | #if defined(CONFIG_ACPI_WMI) || defined(CONFIG_ACPI_WMI_MODULE) |
| 188 | 191 | ||
| 189 | typedef void (*wmi_notify_handler) (u32 value, void *context); | 192 | typedef void (*wmi_notify_handler) (u32 value, void *context); |
| @@ -554,14 +557,20 @@ static inline int acpi_subsys_runtime_resume(struct device *dev) { return 0; } | |||
| 554 | int acpi_dev_suspend_late(struct device *dev); | 557 | int acpi_dev_suspend_late(struct device *dev); |
| 555 | int acpi_dev_resume_early(struct device *dev); | 558 | int acpi_dev_resume_early(struct device *dev); |
| 556 | int acpi_subsys_prepare(struct device *dev); | 559 | int acpi_subsys_prepare(struct device *dev); |
| 560 | void acpi_subsys_complete(struct device *dev); | ||
| 557 | int acpi_subsys_suspend_late(struct device *dev); | 561 | int acpi_subsys_suspend_late(struct device *dev); |
| 558 | int acpi_subsys_resume_early(struct device *dev); | 562 | int acpi_subsys_resume_early(struct device *dev); |
| 563 | int acpi_subsys_suspend(struct device *dev); | ||
| 564 | int acpi_subsys_freeze(struct device *dev); | ||
| 559 | #else | 565 | #else |
| 560 | static inline int acpi_dev_suspend_late(struct device *dev) { return 0; } | 566 | static inline int acpi_dev_suspend_late(struct device *dev) { return 0; } |
| 561 | static inline int acpi_dev_resume_early(struct device *dev) { return 0; } | 567 | static inline int acpi_dev_resume_early(struct device *dev) { return 0; } |
| 562 | static inline int acpi_subsys_prepare(struct device *dev) { return 0; } | 568 | static inline int acpi_subsys_prepare(struct device *dev) { return 0; } |
| 569 | static inline void acpi_subsys_complete(struct device *dev) {} | ||
| 563 | static inline int acpi_subsys_suspend_late(struct device *dev) { return 0; } | 570 | static inline int acpi_subsys_suspend_late(struct device *dev) { return 0; } |
| 564 | static inline int acpi_subsys_resume_early(struct device *dev) { return 0; } | 571 | static inline int acpi_subsys_resume_early(struct device *dev) { return 0; } |
| 572 | static inline int acpi_subsys_suspend(struct device *dev) { return 0; } | ||
| 573 | static inline int acpi_subsys_freeze(struct device *dev) { return 0; } | ||
| 565 | #endif | 574 | #endif |
| 566 | 575 | ||
| 567 | #if defined(CONFIG_ACPI) && defined(CONFIG_PM) | 576 | #if defined(CONFIG_ACPI) && defined(CONFIG_PM) |
| @@ -589,6 +598,14 @@ static inline __printf(3, 4) void | |||
| 589 | acpi_handle_printk(const char *level, void *handle, const char *fmt, ...) {} | 598 | acpi_handle_printk(const char *level, void *handle, const char *fmt, ...) {} |
| 590 | #endif /* !CONFIG_ACPI */ | 599 | #endif /* !CONFIG_ACPI */ |
| 591 | 600 | ||
| 601 | #if defined(CONFIG_ACPI) && defined(CONFIG_DYNAMIC_DEBUG) | ||
| 602 | __printf(3, 4) | ||
| 603 | void __acpi_handle_debug(struct _ddebug *descriptor, acpi_handle handle, const char *fmt, ...); | ||
| 604 | #else | ||
| 605 | #define __acpi_handle_debug(descriptor, handle, fmt, ...) \ | ||
| 606 | acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__); | ||
| 607 | #endif | ||
| 608 | |||
| 592 | /* | 609 | /* |
| 593 | * acpi_handle_<level>: Print message with ACPI prefix and object path | 610 | * acpi_handle_<level>: Print message with ACPI prefix and object path |
| 594 | * | 611 | * |
| @@ -610,11 +627,19 @@ acpi_handle_printk(const char *level, void *handle, const char *fmt, ...) {} | |||
| 610 | #define acpi_handle_info(handle, fmt, ...) \ | 627 | #define acpi_handle_info(handle, fmt, ...) \ |
| 611 | acpi_handle_printk(KERN_INFO, handle, fmt, ##__VA_ARGS__) | 628 | acpi_handle_printk(KERN_INFO, handle, fmt, ##__VA_ARGS__) |
| 612 | 629 | ||
| 613 | /* REVISIT: Support CONFIG_DYNAMIC_DEBUG when necessary */ | 630 | #if defined(DEBUG) |
| 614 | #if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG) | ||
| 615 | #define acpi_handle_debug(handle, fmt, ...) \ | 631 | #define acpi_handle_debug(handle, fmt, ...) \ |
| 616 | acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__) | 632 | acpi_handle_printk(KERN_DEBUG, handle, fmt, ##__VA_ARGS__) |
| 617 | #else | 633 | #else |
| 634 | #if defined(CONFIG_DYNAMIC_DEBUG) | ||
| 635 | #define acpi_handle_debug(handle, fmt, ...) \ | ||
| 636 | do { \ | ||
| 637 | DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ | ||
| 638 | if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) \ | ||
| 639 | __acpi_handle_debug(&descriptor, handle, pr_fmt(fmt), \ | ||
| 640 | ##__VA_ARGS__); \ | ||
| 641 | } while (0) | ||
| 642 | #else | ||
| 618 | #define acpi_handle_debug(handle, fmt, ...) \ | 643 | #define acpi_handle_debug(handle, fmt, ...) \ |
| 619 | ({ \ | 644 | ({ \ |
| 620 | if (0) \ | 645 | if (0) \ |
| @@ -622,5 +647,6 @@ acpi_handle_printk(const char *level, void *handle, const char *fmt, ...) {} | |||
| 622 | 0; \ | 647 | 0; \ |
| 623 | }) | 648 | }) |
| 624 | #endif | 649 | #endif |
| 650 | #endif | ||
| 625 | 651 | ||
| 626 | #endif /*_LINUX_ACPI_H*/ | 652 | #endif /*_LINUX_ACPI_H*/ |
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h index 63b5eff0a80f..fdd7e1b61f60 100644 --- a/include/linux/amba/bus.h +++ b/include/linux/amba/bus.h | |||
| @@ -47,6 +47,7 @@ struct amba_driver { | |||
| 47 | enum amba_vendor { | 47 | enum amba_vendor { |
| 48 | AMBA_VENDOR_ARM = 0x41, | 48 | AMBA_VENDOR_ARM = 0x41, |
| 49 | AMBA_VENDOR_ST = 0x80, | 49 | AMBA_VENDOR_ST = 0x80, |
| 50 | AMBA_VENDOR_QCOM = 0x51, | ||
| 50 | }; | 51 | }; |
| 51 | 52 | ||
| 52 | extern struct bus_type amba_bustype; | 53 | extern struct bus_type amba_bustype; |
diff --git a/include/linux/amba/mmci.h b/include/linux/amba/mmci.h index 32a89cf5ec45..8c98113069ce 100644 --- a/include/linux/amba/mmci.h +++ b/include/linux/amba/mmci.h | |||
| @@ -6,28 +6,9 @@ | |||
| 6 | 6 | ||
| 7 | #include <linux/mmc/host.h> | 7 | #include <linux/mmc/host.h> |
| 8 | 8 | ||
| 9 | |||
| 10 | /* | ||
| 11 | * These defines is places here due to access is needed from machine | ||
| 12 | * configuration files. The ST Micro version does not have ROD and | ||
| 13 | * reuse the voltage registers for direction settings. | ||
| 14 | */ | ||
| 15 | #define MCI_ST_DATA2DIREN (1 << 2) | ||
| 16 | #define MCI_ST_CMDDIREN (1 << 3) | ||
| 17 | #define MCI_ST_DATA0DIREN (1 << 4) | ||
| 18 | #define MCI_ST_DATA31DIREN (1 << 5) | ||
| 19 | #define MCI_ST_FBCLKEN (1 << 7) | ||
| 20 | #define MCI_ST_DATA74DIREN (1 << 8) | ||
| 21 | |||
| 22 | /* Just some dummy forwarding */ | ||
| 23 | struct dma_chan; | ||
| 24 | |||
| 25 | /** | 9 | /** |
| 26 | * struct mmci_platform_data - platform configuration for the MMCI | 10 | * struct mmci_platform_data - platform configuration for the MMCI |
| 27 | * (also known as PL180) block. | 11 | * (also known as PL180) block. |
| 28 | * @f_max: the maximum operational frequency for this host in this | ||
| 29 | * platform configuration. When this is specified it takes precedence | ||
| 30 | * over the module parameter for the same frequency. | ||
| 31 | * @ocr_mask: available voltages on the 4 pins from the block, this | 12 | * @ocr_mask: available voltages on the 4 pins from the block, this |
| 32 | * is ignored if a regulator is used, see the MMC_VDD_* masks in | 13 | * is ignored if a regulator is used, see the MMC_VDD_* masks in |
| 33 | * mmc/host.h | 14 | * mmc/host.h |
| @@ -42,37 +23,14 @@ struct dma_chan; | |||
| 42 | * @gpio_wp: read this GPIO pin to see if the card is write protected | 23 | * @gpio_wp: read this GPIO pin to see if the card is write protected |
| 43 | * @gpio_cd: read this GPIO pin to detect card insertion | 24 | * @gpio_cd: read this GPIO pin to detect card insertion |
| 44 | * @cd_invert: true if the gpio_cd pin value is active low | 25 | * @cd_invert: true if the gpio_cd pin value is active low |
| 45 | * @capabilities: the capabilities of the block as implemented in | ||
| 46 | * this platform, signify anything MMC_CAP_* from mmc/host.h | ||
| 47 | * @capabilities2: more capabilities, MMC_CAP2_* from mmc/host.h | ||
| 48 | * @sigdir: a bit field indicating for what bits in the MMC bus the host | ||
| 49 | * should enable signal direction indication. | ||
| 50 | * @dma_filter: function used to select an appropriate RX and TX | ||
| 51 | * DMA channel to be used for DMA, if and only if you're deploying the | ||
| 52 | * generic DMA engine | ||
| 53 | * @dma_rx_param: parameter passed to the DMA allocation | ||
| 54 | * filter in order to select an appropriate RX channel. If | ||
| 55 | * there is a bidirectional RX+TX channel, then just specify | ||
| 56 | * this and leave dma_tx_param set to NULL | ||
| 57 | * @dma_tx_param: parameter passed to the DMA allocation | ||
| 58 | * filter in order to select an appropriate TX channel. If this | ||
| 59 | * is NULL the driver will attempt to use the RX channel as a | ||
| 60 | * bidirectional channel | ||
| 61 | */ | 26 | */ |
| 62 | struct mmci_platform_data { | 27 | struct mmci_platform_data { |
| 63 | unsigned int f_max; | ||
| 64 | unsigned int ocr_mask; | 28 | unsigned int ocr_mask; |
| 65 | int (*ios_handler)(struct device *, struct mmc_ios *); | 29 | int (*ios_handler)(struct device *, struct mmc_ios *); |
| 66 | unsigned int (*status)(struct device *); | 30 | unsigned int (*status)(struct device *); |
| 67 | int gpio_wp; | 31 | int gpio_wp; |
| 68 | int gpio_cd; | 32 | int gpio_cd; |
| 69 | bool cd_invert; | 33 | bool cd_invert; |
| 70 | unsigned long capabilities; | ||
| 71 | unsigned long capabilities2; | ||
| 72 | u32 sigdir; | ||
| 73 | bool (*dma_filter)(struct dma_chan *chan, void *filter_param); | ||
| 74 | void *dma_rx_param; | ||
| 75 | void *dma_tx_param; | ||
| 76 | }; | 34 | }; |
| 77 | 35 | ||
| 78 | #endif | 36 | #endif |
diff --git a/include/linux/atomic.h b/include/linux/atomic.h index 5b08a8540ecf..fef3a809e7cf 100644 --- a/include/linux/atomic.h +++ b/include/linux/atomic.h | |||
| @@ -3,6 +3,42 @@ | |||
| 3 | #define _LINUX_ATOMIC_H | 3 | #define _LINUX_ATOMIC_H |
| 4 | #include <asm/atomic.h> | 4 | #include <asm/atomic.h> |
| 5 | 5 | ||
| 6 | /* | ||
| 7 | * Provide __deprecated wrappers for the new interface, avoid flag day changes. | ||
| 8 | * We need the ugly external functions to break header recursion hell. | ||
| 9 | */ | ||
| 10 | #ifndef smp_mb__before_atomic_inc | ||
| 11 | static inline void __deprecated smp_mb__before_atomic_inc(void) | ||
| 12 | { | ||
| 13 | extern void __smp_mb__before_atomic(void); | ||
| 14 | __smp_mb__before_atomic(); | ||
| 15 | } | ||
| 16 | #endif | ||
| 17 | |||
| 18 | #ifndef smp_mb__after_atomic_inc | ||
| 19 | static inline void __deprecated smp_mb__after_atomic_inc(void) | ||
| 20 | { | ||
| 21 | extern void __smp_mb__after_atomic(void); | ||
| 22 | __smp_mb__after_atomic(); | ||
| 23 | } | ||
| 24 | #endif | ||
| 25 | |||
| 26 | #ifndef smp_mb__before_atomic_dec | ||
| 27 | static inline void __deprecated smp_mb__before_atomic_dec(void) | ||
| 28 | { | ||
| 29 | extern void __smp_mb__before_atomic(void); | ||
| 30 | __smp_mb__before_atomic(); | ||
| 31 | } | ||
| 32 | #endif | ||
| 33 | |||
| 34 | #ifndef smp_mb__after_atomic_dec | ||
| 35 | static inline void __deprecated smp_mb__after_atomic_dec(void) | ||
| 36 | { | ||
| 37 | extern void __smp_mb__after_atomic(void); | ||
| 38 | __smp_mb__after_atomic(); | ||
| 39 | } | ||
| 40 | #endif | ||
| 41 | |||
| 6 | /** | 42 | /** |
| 7 | * atomic_add_unless - add unless the number is already a given value | 43 | * atomic_add_unless - add unless the number is already a given value |
| 8 | * @v: pointer of type atomic_t | 44 | * @v: pointer of type atomic_t |
diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 72647429adf6..adb14a8616df 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h | |||
| @@ -40,6 +40,11 @@ enum backlight_type { | |||
| 40 | BACKLIGHT_TYPE_MAX, | 40 | BACKLIGHT_TYPE_MAX, |
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | enum backlight_notification { | ||
| 44 | BACKLIGHT_REGISTERED, | ||
| 45 | BACKLIGHT_UNREGISTERED, | ||
| 46 | }; | ||
| 47 | |||
| 43 | struct backlight_device; | 48 | struct backlight_device; |
| 44 | struct fb_info; | 49 | struct fb_info; |
| 45 | 50 | ||
| @@ -133,6 +138,8 @@ extern void devm_backlight_device_unregister(struct device *dev, | |||
| 133 | extern void backlight_force_update(struct backlight_device *bd, | 138 | extern void backlight_force_update(struct backlight_device *bd, |
| 134 | enum backlight_update_reason reason); | 139 | enum backlight_update_reason reason); |
| 135 | extern bool backlight_device_registered(enum backlight_type type); | 140 | extern bool backlight_device_registered(enum backlight_type type); |
| 141 | extern int backlight_register_notifier(struct notifier_block *nb); | ||
| 142 | extern int backlight_unregister_notifier(struct notifier_block *nb); | ||
| 136 | 143 | ||
| 137 | #define to_backlight_device(obj) container_of(obj, struct backlight_device, dev) | 144 | #define to_backlight_device(obj) container_of(obj, struct backlight_device, dev) |
| 138 | 145 | ||
diff --git a/include/linux/bio.h b/include/linux/bio.h index bba550826921..5a645769f020 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -333,7 +333,7 @@ static inline struct bio *bio_next_split(struct bio *bio, int sectors, | |||
| 333 | 333 | ||
| 334 | extern struct bio_set *bioset_create(unsigned int, unsigned int); | 334 | extern struct bio_set *bioset_create(unsigned int, unsigned int); |
| 335 | extern void bioset_free(struct bio_set *); | 335 | extern void bioset_free(struct bio_set *); |
| 336 | extern mempool_t *biovec_create_pool(struct bio_set *bs, int pool_entries); | 336 | extern mempool_t *biovec_create_pool(int pool_entries); |
| 337 | 337 | ||
| 338 | extern struct bio *bio_alloc_bioset(gfp_t, int, struct bio_set *); | 338 | extern struct bio *bio_alloc_bioset(gfp_t, int, struct bio_set *); |
| 339 | extern void bio_put(struct bio *); | 339 | extern void bio_put(struct bio *); |
diff --git a/include/linux/bitops.h b/include/linux/bitops.h index be5fd38bd5a0..cbc5833fb221 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h | |||
| @@ -32,6 +32,26 @@ extern unsigned long __sw_hweight64(__u64 w); | |||
| 32 | */ | 32 | */ |
| 33 | #include <asm/bitops.h> | 33 | #include <asm/bitops.h> |
| 34 | 34 | ||
| 35 | /* | ||
| 36 | * Provide __deprecated wrappers for the new interface, avoid flag day changes. | ||
| 37 | * We need the ugly external functions to break header recursion hell. | ||
| 38 | */ | ||
| 39 | #ifndef smp_mb__before_clear_bit | ||
| 40 | static inline void __deprecated smp_mb__before_clear_bit(void) | ||
| 41 | { | ||
| 42 | extern void __smp_mb__before_atomic(void); | ||
| 43 | __smp_mb__before_atomic(); | ||
| 44 | } | ||
| 45 | #endif | ||
| 46 | |||
| 47 | #ifndef smp_mb__after_clear_bit | ||
| 48 | static inline void __deprecated smp_mb__after_clear_bit(void) | ||
| 49 | { | ||
| 50 | extern void __smp_mb__after_atomic(void); | ||
| 51 | __smp_mb__after_atomic(); | ||
| 52 | } | ||
| 53 | #endif | ||
| 54 | |||
| 35 | #define for_each_set_bit(bit, addr, size) \ | 55 | #define for_each_set_bit(bit, addr, size) \ |
| 36 | for ((bit) = find_first_bit((addr), (size)); \ | 56 | for ((bit) = find_first_bit((addr), (size)); \ |
| 37 | (bit) < (size); \ | 57 | (bit) < (size); \ |
diff --git a/include/linux/blk-mq.h b/include/linux/blk-mq.h index 0120451545d8..c15128833100 100644 --- a/include/linux/blk-mq.h +++ b/include/linux/blk-mq.h | |||
| @@ -8,7 +8,13 @@ struct blk_mq_tags; | |||
| 8 | struct blk_mq_cpu_notifier { | 8 | struct blk_mq_cpu_notifier { |
| 9 | struct list_head list; | 9 | struct list_head list; |
| 10 | void *data; | 10 | void *data; |
| 11 | void (*notify)(void *data, unsigned long action, unsigned int cpu); | 11 | int (*notify)(void *data, unsigned long action, unsigned int cpu); |
| 12 | }; | ||
| 13 | |||
| 14 | struct blk_mq_ctxmap { | ||
| 15 | unsigned int map_size; | ||
| 16 | unsigned int bits_per_word; | ||
| 17 | struct blk_align_bitmap *map; | ||
| 12 | }; | 18 | }; |
| 13 | 19 | ||
| 14 | struct blk_mq_hw_ctx { | 20 | struct blk_mq_hw_ctx { |
| @@ -18,7 +24,11 @@ struct blk_mq_hw_ctx { | |||
| 18 | } ____cacheline_aligned_in_smp; | 24 | } ____cacheline_aligned_in_smp; |
| 19 | 25 | ||
| 20 | unsigned long state; /* BLK_MQ_S_* flags */ | 26 | unsigned long state; /* BLK_MQ_S_* flags */ |
| 21 | struct delayed_work delayed_work; | 27 | struct delayed_work run_work; |
| 28 | struct delayed_work delay_work; | ||
| 29 | cpumask_var_t cpumask; | ||
| 30 | int next_cpu; | ||
| 31 | int next_cpu_batch; | ||
| 22 | 32 | ||
| 23 | unsigned long flags; /* BLK_MQ_F_* flags */ | 33 | unsigned long flags; /* BLK_MQ_F_* flags */ |
| 24 | 34 | ||
| @@ -27,13 +37,13 @@ struct blk_mq_hw_ctx { | |||
| 27 | 37 | ||
| 28 | void *driver_data; | 38 | void *driver_data; |
| 29 | 39 | ||
| 40 | struct blk_mq_ctxmap ctx_map; | ||
| 41 | |||
| 30 | unsigned int nr_ctx; | 42 | unsigned int nr_ctx; |
| 31 | struct blk_mq_ctx **ctxs; | 43 | struct blk_mq_ctx **ctxs; |
| 32 | unsigned int nr_ctx_map; | ||
| 33 | unsigned long *ctx_map; | ||
| 34 | 44 | ||
| 35 | struct request **rqs; | 45 | unsigned int wait_index; |
| 36 | struct list_head page_list; | 46 | |
| 37 | struct blk_mq_tags *tags; | 47 | struct blk_mq_tags *tags; |
| 38 | 48 | ||
| 39 | unsigned long queued; | 49 | unsigned long queued; |
| @@ -41,31 +51,40 @@ struct blk_mq_hw_ctx { | |||
| 41 | #define BLK_MQ_MAX_DISPATCH_ORDER 10 | 51 | #define BLK_MQ_MAX_DISPATCH_ORDER 10 |
| 42 | unsigned long dispatched[BLK_MQ_MAX_DISPATCH_ORDER]; | 52 | unsigned long dispatched[BLK_MQ_MAX_DISPATCH_ORDER]; |
| 43 | 53 | ||
| 44 | unsigned int queue_depth; | ||
| 45 | unsigned int numa_node; | 54 | unsigned int numa_node; |
| 46 | unsigned int cmd_size; /* per-request extra data */ | 55 | unsigned int cmd_size; /* per-request extra data */ |
| 47 | 56 | ||
| 57 | atomic_t nr_active; | ||
| 58 | |||
| 48 | struct blk_mq_cpu_notifier cpu_notifier; | 59 | struct blk_mq_cpu_notifier cpu_notifier; |
| 49 | struct kobject kobj; | 60 | struct kobject kobj; |
| 50 | }; | 61 | }; |
| 51 | 62 | ||
| 52 | struct blk_mq_reg { | 63 | struct blk_mq_tag_set { |
| 53 | struct blk_mq_ops *ops; | 64 | struct blk_mq_ops *ops; |
| 54 | unsigned int nr_hw_queues; | 65 | unsigned int nr_hw_queues; |
| 55 | unsigned int queue_depth; | 66 | unsigned int queue_depth; /* max hw supported */ |
| 56 | unsigned int reserved_tags; | 67 | unsigned int reserved_tags; |
| 57 | unsigned int cmd_size; /* per-request extra data */ | 68 | unsigned int cmd_size; /* per-request extra data */ |
| 58 | int numa_node; | 69 | int numa_node; |
| 59 | unsigned int timeout; | 70 | unsigned int timeout; |
| 60 | unsigned int flags; /* BLK_MQ_F_* */ | 71 | unsigned int flags; /* BLK_MQ_F_* */ |
| 72 | void *driver_data; | ||
| 73 | |||
| 74 | struct blk_mq_tags **tags; | ||
| 75 | |||
| 76 | struct mutex tag_list_lock; | ||
| 77 | struct list_head tag_list; | ||
| 61 | }; | 78 | }; |
| 62 | 79 | ||
| 63 | typedef int (queue_rq_fn)(struct blk_mq_hw_ctx *, struct request *); | 80 | typedef int (queue_rq_fn)(struct blk_mq_hw_ctx *, struct request *); |
| 64 | typedef struct blk_mq_hw_ctx *(map_queue_fn)(struct request_queue *, const int); | 81 | typedef struct blk_mq_hw_ctx *(map_queue_fn)(struct request_queue *, const int); |
| 65 | typedef struct blk_mq_hw_ctx *(alloc_hctx_fn)(struct blk_mq_reg *,unsigned int); | ||
| 66 | typedef void (free_hctx_fn)(struct blk_mq_hw_ctx *, unsigned int); | ||
| 67 | typedef int (init_hctx_fn)(struct blk_mq_hw_ctx *, void *, unsigned int); | 82 | typedef int (init_hctx_fn)(struct blk_mq_hw_ctx *, void *, unsigned int); |
| 68 | typedef void (exit_hctx_fn)(struct blk_mq_hw_ctx *, unsigned int); | 83 | typedef void (exit_hctx_fn)(struct blk_mq_hw_ctx *, unsigned int); |
| 84 | typedef int (init_request_fn)(void *, struct request *, unsigned int, | ||
| 85 | unsigned int, unsigned int); | ||
| 86 | typedef void (exit_request_fn)(void *, struct request *, unsigned int, | ||
| 87 | unsigned int); | ||
| 69 | 88 | ||
| 70 | struct blk_mq_ops { | 89 | struct blk_mq_ops { |
| 71 | /* | 90 | /* |
| @@ -86,18 +105,20 @@ struct blk_mq_ops { | |||
| 86 | softirq_done_fn *complete; | 105 | softirq_done_fn *complete; |
| 87 | 106 | ||
| 88 | /* | 107 | /* |
| 89 | * Override for hctx allocations (should probably go) | ||
| 90 | */ | ||
| 91 | alloc_hctx_fn *alloc_hctx; | ||
| 92 | free_hctx_fn *free_hctx; | ||
| 93 | |||
| 94 | /* | ||
| 95 | * Called when the block layer side of a hardware queue has been | 108 | * Called when the block layer side of a hardware queue has been |
| 96 | * set up, allowing the driver to allocate/init matching structures. | 109 | * set up, allowing the driver to allocate/init matching structures. |
| 97 | * Ditto for exit/teardown. | 110 | * Ditto for exit/teardown. |
| 98 | */ | 111 | */ |
| 99 | init_hctx_fn *init_hctx; | 112 | init_hctx_fn *init_hctx; |
| 100 | exit_hctx_fn *exit_hctx; | 113 | exit_hctx_fn *exit_hctx; |
| 114 | |||
| 115 | /* | ||
| 116 | * Called for every command allocated by the block layer to allow | ||
| 117 | * the driver to set up driver specific data. | ||
| 118 | * Ditto for exit/teardown. | ||
| 119 | */ | ||
| 120 | init_request_fn *init_request; | ||
| 121 | exit_request_fn *exit_request; | ||
| 101 | }; | 122 | }; |
| 102 | 123 | ||
| 103 | enum { | 124 | enum { |
| @@ -107,18 +128,24 @@ enum { | |||
| 107 | 128 | ||
| 108 | BLK_MQ_F_SHOULD_MERGE = 1 << 0, | 129 | BLK_MQ_F_SHOULD_MERGE = 1 << 0, |
| 109 | BLK_MQ_F_SHOULD_SORT = 1 << 1, | 130 | BLK_MQ_F_SHOULD_SORT = 1 << 1, |
| 110 | BLK_MQ_F_SHOULD_IPI = 1 << 2, | 131 | BLK_MQ_F_TAG_SHARED = 1 << 2, |
| 132 | BLK_MQ_F_SG_MERGE = 1 << 3, | ||
| 133 | BLK_MQ_F_SYSFS_UP = 1 << 4, | ||
| 111 | 134 | ||
| 112 | BLK_MQ_S_STOPPED = 0, | 135 | BLK_MQ_S_STOPPED = 0, |
| 136 | BLK_MQ_S_TAG_ACTIVE = 1, | ||
| 113 | 137 | ||
| 114 | BLK_MQ_MAX_DEPTH = 2048, | 138 | BLK_MQ_MAX_DEPTH = 2048, |
| 139 | |||
| 140 | BLK_MQ_CPU_WORK_BATCH = 8, | ||
| 115 | }; | 141 | }; |
| 116 | 142 | ||
| 117 | struct request_queue *blk_mq_init_queue(struct blk_mq_reg *, void *); | 143 | struct request_queue *blk_mq_init_queue(struct blk_mq_tag_set *); |
| 118 | int blk_mq_register_disk(struct gendisk *); | 144 | int blk_mq_register_disk(struct gendisk *); |
| 119 | void blk_mq_unregister_disk(struct gendisk *); | 145 | void blk_mq_unregister_disk(struct gendisk *); |
| 120 | int blk_mq_init_commands(struct request_queue *, int (*init)(void *data, struct blk_mq_hw_ctx *, struct request *, unsigned int), void *data); | 146 | |
| 121 | void blk_mq_free_commands(struct request_queue *, void (*free)(void *data, struct blk_mq_hw_ctx *, struct request *, unsigned int), void *data); | 147 | int blk_mq_alloc_tag_set(struct blk_mq_tag_set *set); |
| 148 | void blk_mq_free_tag_set(struct blk_mq_tag_set *set); | ||
| 122 | 149 | ||
| 123 | void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule); | 150 | void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule); |
| 124 | 151 | ||
| @@ -126,28 +153,28 @@ void blk_mq_insert_request(struct request *, bool, bool, bool); | |||
| 126 | void blk_mq_run_queues(struct request_queue *q, bool async); | 153 | void blk_mq_run_queues(struct request_queue *q, bool async); |
| 127 | void blk_mq_free_request(struct request *rq); | 154 | void blk_mq_free_request(struct request *rq); |
| 128 | bool blk_mq_can_queue(struct blk_mq_hw_ctx *); | 155 | bool blk_mq_can_queue(struct blk_mq_hw_ctx *); |
| 129 | struct request *blk_mq_alloc_request(struct request_queue *q, int rw, gfp_t gfp); | 156 | struct request *blk_mq_alloc_request(struct request_queue *q, int rw, |
| 130 | struct request *blk_mq_alloc_reserved_request(struct request_queue *q, int rw, gfp_t gfp); | 157 | gfp_t gfp, bool reserved); |
| 131 | struct request *blk_mq_rq_from_tag(struct request_queue *q, unsigned int tag); | 158 | struct request *blk_mq_tag_to_rq(struct blk_mq_hw_ctx *hctx, unsigned int tag); |
| 132 | 159 | ||
| 133 | struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *, const int ctx_index); | 160 | struct blk_mq_hw_ctx *blk_mq_map_queue(struct request_queue *, const int ctx_index); |
| 134 | struct blk_mq_hw_ctx *blk_mq_alloc_single_hw_queue(struct blk_mq_reg *, unsigned int); | 161 | struct blk_mq_hw_ctx *blk_mq_alloc_single_hw_queue(struct blk_mq_tag_set *, unsigned int, int); |
| 135 | void blk_mq_free_single_hw_queue(struct blk_mq_hw_ctx *, unsigned int); | ||
| 136 | 162 | ||
| 137 | bool blk_mq_end_io_partial(struct request *rq, int error, | 163 | void blk_mq_end_io(struct request *rq, int error); |
| 138 | unsigned int nr_bytes); | 164 | void __blk_mq_end_io(struct request *rq, int error); |
| 139 | static inline void blk_mq_end_io(struct request *rq, int error) | ||
| 140 | { | ||
| 141 | bool done = !blk_mq_end_io_partial(rq, error, blk_rq_bytes(rq)); | ||
| 142 | BUG_ON(!done); | ||
| 143 | } | ||
| 144 | 165 | ||
| 166 | void blk_mq_requeue_request(struct request *rq); | ||
| 167 | void blk_mq_add_to_requeue_list(struct request *rq, bool at_head); | ||
| 168 | void blk_mq_kick_requeue_list(struct request_queue *q); | ||
| 145 | void blk_mq_complete_request(struct request *rq); | 169 | void blk_mq_complete_request(struct request *rq); |
| 146 | 170 | ||
| 147 | void blk_mq_stop_hw_queue(struct blk_mq_hw_ctx *hctx); | 171 | void blk_mq_stop_hw_queue(struct blk_mq_hw_ctx *hctx); |
| 148 | void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx); | 172 | void blk_mq_start_hw_queue(struct blk_mq_hw_ctx *hctx); |
| 149 | void blk_mq_stop_hw_queues(struct request_queue *q); | 173 | void blk_mq_stop_hw_queues(struct request_queue *q); |
| 150 | void blk_mq_start_stopped_hw_queues(struct request_queue *q); | 174 | void blk_mq_start_hw_queues(struct request_queue *q); |
| 175 | void blk_mq_start_stopped_hw_queues(struct request_queue *q, bool async); | ||
| 176 | void blk_mq_delay_queue(struct blk_mq_hw_ctx *hctx, unsigned long msecs); | ||
| 177 | void blk_mq_tag_busy_iter(struct blk_mq_tags *tags, void (*fn)(void *data, unsigned long *), void *data); | ||
| 151 | 178 | ||
| 152 | /* | 179 | /* |
| 153 | * Driver command data is immediately after the request. So subtract request | 180 | * Driver command data is immediately after the request. So subtract request |
| @@ -162,12 +189,6 @@ static inline void *blk_mq_rq_to_pdu(struct request *rq) | |||
| 162 | return (void *) rq + sizeof(*rq); | 189 | return (void *) rq + sizeof(*rq); |
| 163 | } | 190 | } |
| 164 | 191 | ||
| 165 | static inline struct request *blk_mq_tag_to_rq(struct blk_mq_hw_ctx *hctx, | ||
| 166 | unsigned int tag) | ||
| 167 | { | ||
| 168 | return hctx->rqs[tag]; | ||
| 169 | } | ||
| 170 | |||
| 171 | #define queue_for_each_hw_ctx(q, hctx, i) \ | 192 | #define queue_for_each_hw_ctx(q, hctx, i) \ |
| 172 | for ((i) = 0; (i) < (q)->nr_hw_queues && \ | 193 | for ((i) = 0; (i) < (q)->nr_hw_queues && \ |
| 173 | ({ hctx = (q)->queue_hw_ctx[i]; 1; }); (i)++) | 194 | ({ hctx = (q)->queue_hw_ctx[i]; 1; }); (i)++) |
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index aa0eaa2d0bd8..d8e4cea23a25 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h | |||
| @@ -190,6 +190,7 @@ enum rq_flag_bits { | |||
| 190 | __REQ_PM, /* runtime pm request */ | 190 | __REQ_PM, /* runtime pm request */ |
| 191 | __REQ_END, /* last of chain of requests */ | 191 | __REQ_END, /* last of chain of requests */ |
| 192 | __REQ_HASHED, /* on IO scheduler merge hash */ | 192 | __REQ_HASHED, /* on IO scheduler merge hash */ |
| 193 | __REQ_MQ_INFLIGHT, /* track inflight for MQ */ | ||
| 193 | __REQ_NR_BITS, /* stops here */ | 194 | __REQ_NR_BITS, /* stops here */ |
| 194 | }; | 195 | }; |
| 195 | 196 | ||
| @@ -243,5 +244,6 @@ enum rq_flag_bits { | |||
| 243 | #define REQ_PM (1ULL << __REQ_PM) | 244 | #define REQ_PM (1ULL << __REQ_PM) |
| 244 | #define REQ_END (1ULL << __REQ_END) | 245 | #define REQ_END (1ULL << __REQ_END) |
| 245 | #define REQ_HASHED (1ULL << __REQ_HASHED) | 246 | #define REQ_HASHED (1ULL << __REQ_HASHED) |
| 247 | #define REQ_MQ_INFLIGHT (1ULL << __REQ_MQ_INFLIGHT) | ||
| 246 | 248 | ||
| 247 | #endif /* __LINUX_BLK_TYPES_H */ | 249 | #endif /* __LINUX_BLK_TYPES_H */ |
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 0d84981ee03f..8aba35f46f87 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h | |||
| @@ -90,15 +90,15 @@ enum rq_cmd_type_bits { | |||
| 90 | #define BLK_MAX_CDB 16 | 90 | #define BLK_MAX_CDB 16 |
| 91 | 91 | ||
| 92 | /* | 92 | /* |
| 93 | * try to put the fields that are referenced together in the same cacheline. | 93 | * Try to put the fields that are referenced together in the same cacheline. |
| 94 | * if you modify this structure, be sure to check block/blk-core.c:blk_rq_init() | 94 | * |
| 95 | * as well! | 95 | * If you modify this structure, make sure to update blk_rq_init() and |
| 96 | * especially blk_mq_rq_ctx_init() to take care of the added fields. | ||
| 96 | */ | 97 | */ |
| 97 | struct request { | 98 | struct request { |
| 98 | struct list_head queuelist; | 99 | struct list_head queuelist; |
| 99 | union { | 100 | union { |
| 100 | struct call_single_data csd; | 101 | struct call_single_data csd; |
| 101 | struct work_struct mq_flush_work; | ||
| 102 | unsigned long fifo_time; | 102 | unsigned long fifo_time; |
| 103 | }; | 103 | }; |
| 104 | 104 | ||
| @@ -178,7 +178,6 @@ struct request { | |||
| 178 | unsigned short ioprio; | 178 | unsigned short ioprio; |
| 179 | 179 | ||
| 180 | void *special; /* opaque pointer available for LLD use */ | 180 | void *special; /* opaque pointer available for LLD use */ |
| 181 | char *buffer; /* kaddr of the current segment if available */ | ||
| 182 | 181 | ||
| 183 | int tag; | 182 | int tag; |
| 184 | int errors; | 183 | int errors; |
| @@ -463,6 +462,10 @@ struct request_queue { | |||
| 463 | struct request *flush_rq; | 462 | struct request *flush_rq; |
| 464 | spinlock_t mq_flush_lock; | 463 | spinlock_t mq_flush_lock; |
| 465 | 464 | ||
| 465 | struct list_head requeue_list; | ||
| 466 | spinlock_t requeue_lock; | ||
| 467 | struct work_struct requeue_work; | ||
| 468 | |||
| 466 | struct mutex sysfs_lock; | 469 | struct mutex sysfs_lock; |
| 467 | 470 | ||
| 468 | int bypass_depth; | 471 | int bypass_depth; |
| @@ -481,6 +484,9 @@ struct request_queue { | |||
| 481 | wait_queue_head_t mq_freeze_wq; | 484 | wait_queue_head_t mq_freeze_wq; |
| 482 | struct percpu_counter mq_usage_counter; | 485 | struct percpu_counter mq_usage_counter; |
| 483 | struct list_head all_q_node; | 486 | struct list_head all_q_node; |
| 487 | |||
| 488 | struct blk_mq_tag_set *tag_set; | ||
| 489 | struct list_head tag_set_list; | ||
| 484 | }; | 490 | }; |
| 485 | 491 | ||
| 486 | #define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */ | 492 | #define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */ |
| @@ -504,6 +510,7 @@ struct request_queue { | |||
| 504 | #define QUEUE_FLAG_SAME_FORCE 18 /* force complete on same CPU */ | 510 | #define QUEUE_FLAG_SAME_FORCE 18 /* force complete on same CPU */ |
| 505 | #define QUEUE_FLAG_DEAD 19 /* queue tear-down finished */ | 511 | #define QUEUE_FLAG_DEAD 19 /* queue tear-down finished */ |
| 506 | #define QUEUE_FLAG_INIT_DONE 20 /* queue is initialized */ | 512 | #define QUEUE_FLAG_INIT_DONE 20 /* queue is initialized */ |
| 513 | #define QUEUE_FLAG_NO_SG_MERGE 21 /* don't attempt to merge SG segments*/ | ||
| 507 | 514 | ||
| 508 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ | 515 | #define QUEUE_FLAG_DEFAULT ((1 << QUEUE_FLAG_IO_STAT) | \ |
| 509 | (1 << QUEUE_FLAG_STACKABLE) | \ | 516 | (1 << QUEUE_FLAG_STACKABLE) | \ |
| @@ -613,6 +620,15 @@ static inline void queue_flag_clear(unsigned int flag, struct request_queue *q) | |||
| 613 | 620 | ||
| 614 | #define rq_data_dir(rq) (((rq)->cmd_flags & 1) != 0) | 621 | #define rq_data_dir(rq) (((rq)->cmd_flags & 1) != 0) |
| 615 | 622 | ||
| 623 | /* | ||
| 624 | * Driver can handle struct request, if it either has an old style | ||
| 625 | * request_fn defined, or is blk-mq based. | ||
| 626 | */ | ||
| 627 | static inline bool queue_is_rq_based(struct request_queue *q) | ||
| 628 | { | ||
| 629 | return q->request_fn || q->mq_ops; | ||
| 630 | } | ||
| 631 | |||
| 616 | static inline unsigned int blk_queue_cluster(struct request_queue *q) | 632 | static inline unsigned int blk_queue_cluster(struct request_queue *q) |
| 617 | { | 633 | { |
| 618 | return q->limits.cluster; | 634 | return q->limits.cluster; |
| @@ -937,6 +953,7 @@ extern struct request *blk_fetch_request(struct request_queue *q); | |||
| 937 | */ | 953 | */ |
| 938 | extern bool blk_update_request(struct request *rq, int error, | 954 | extern bool blk_update_request(struct request *rq, int error, |
| 939 | unsigned int nr_bytes); | 955 | unsigned int nr_bytes); |
| 956 | extern void blk_finish_request(struct request *rq, int error); | ||
| 940 | extern bool blk_end_request(struct request *rq, int error, | 957 | extern bool blk_end_request(struct request *rq, int error, |
| 941 | unsigned int nr_bytes); | 958 | unsigned int nr_bytes); |
| 942 | extern void blk_end_request_all(struct request *rq, int error); | 959 | extern void blk_end_request_all(struct request *rq, int error); |
| @@ -1053,7 +1070,6 @@ static inline void blk_post_runtime_resume(struct request_queue *q, int err) {} | |||
| 1053 | * schedule() where blk_schedule_flush_plug() is called. | 1070 | * schedule() where blk_schedule_flush_plug() is called. |
| 1054 | */ | 1071 | */ |
| 1055 | struct blk_plug { | 1072 | struct blk_plug { |
| 1056 | unsigned long magic; /* detect uninitialized use-cases */ | ||
| 1057 | struct list_head list; /* requests */ | 1073 | struct list_head list; /* requests */ |
| 1058 | struct list_head mq_list; /* blk-mq requests */ | 1074 | struct list_head mq_list; /* blk-mq requests */ |
| 1059 | struct list_head cb_list; /* md requires an unplug callback */ | 1075 | struct list_head cb_list; /* md requires an unplug callback */ |
| @@ -1102,7 +1118,8 @@ static inline bool blk_needs_flush_plug(struct task_struct *tsk) | |||
| 1102 | /* | 1118 | /* |
| 1103 | * tag stuff | 1119 | * tag stuff |
| 1104 | */ | 1120 | */ |
| 1105 | #define blk_rq_tagged(rq) ((rq)->cmd_flags & REQ_QUEUED) | 1121 | #define blk_rq_tagged(rq) \ |
| 1122 | ((rq)->mq_ctx || ((rq)->cmd_flags & REQ_QUEUED)) | ||
| 1106 | extern int blk_queue_start_tag(struct request_queue *, struct request *); | 1123 | extern int blk_queue_start_tag(struct request_queue *, struct request *); |
| 1107 | extern struct request *blk_queue_find_tag(struct request_queue *, int); | 1124 | extern struct request *blk_queue_find_tag(struct request_queue *, int); |
| 1108 | extern void blk_queue_end_tag(struct request_queue *, struct request *); | 1125 | extern void blk_queue_end_tag(struct request_queue *, struct request *); |
| @@ -1370,8 +1387,9 @@ static inline void put_dev_sector(Sector p) | |||
| 1370 | } | 1387 | } |
| 1371 | 1388 | ||
| 1372 | struct work_struct; | 1389 | struct work_struct; |
| 1373 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work); | 1390 | int kblockd_schedule_work(struct work_struct *work); |
| 1374 | int kblockd_schedule_delayed_work(struct request_queue *q, struct delayed_work *dwork, unsigned long delay); | 1391 | int kblockd_schedule_delayed_work(struct delayed_work *dwork, unsigned long delay); |
| 1392 | int kblockd_schedule_delayed_work_on(int cpu, struct delayed_work *dwork, unsigned long delay); | ||
| 1375 | 1393 | ||
| 1376 | #ifdef CONFIG_BLK_CGROUP | 1394 | #ifdef CONFIG_BLK_CGROUP |
| 1377 | /* | 1395 | /* |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index c40302f909ce..7cbf837a279c 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
| @@ -278,7 +278,7 @@ static inline void get_bh(struct buffer_head *bh) | |||
| 278 | 278 | ||
| 279 | static inline void put_bh(struct buffer_head *bh) | 279 | static inline void put_bh(struct buffer_head *bh) |
| 280 | { | 280 | { |
| 281 | smp_mb__before_atomic_dec(); | 281 | smp_mb__before_atomic(); |
| 282 | atomic_dec(&bh->b_count); | 282 | atomic_dec(&bh->b_count); |
| 283 | } | 283 | } |
| 284 | 284 | ||
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index 511917416fb0..fb4eca6907cd 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h | |||
| @@ -413,6 +413,37 @@ struct clk *clk_register_fixed_factor(struct device *dev, const char *name, | |||
| 413 | const char *parent_name, unsigned long flags, | 413 | const char *parent_name, unsigned long flags, |
| 414 | unsigned int mult, unsigned int div); | 414 | unsigned int mult, unsigned int div); |
| 415 | 415 | ||
| 416 | /** | ||
| 417 | * struct clk_fractional_divider - adjustable fractional divider clock | ||
| 418 | * | ||
| 419 | * @hw: handle between common and hardware-specific interfaces | ||
| 420 | * @reg: register containing the divider | ||
| 421 | * @mshift: shift to the numerator bit field | ||
| 422 | * @mwidth: width of the numerator bit field | ||
| 423 | * @nshift: shift to the denominator bit field | ||
| 424 | * @nwidth: width of the denominator bit field | ||
| 425 | * @lock: register lock | ||
| 426 | * | ||
| 427 | * Clock with adjustable fractional divider affecting its output frequency. | ||
| 428 | */ | ||
| 429 | |||
| 430 | struct clk_fractional_divider { | ||
| 431 | struct clk_hw hw; | ||
| 432 | void __iomem *reg; | ||
| 433 | u8 mshift; | ||
| 434 | u32 mmask; | ||
| 435 | u8 nshift; | ||
| 436 | u32 nmask; | ||
| 437 | u8 flags; | ||
| 438 | spinlock_t *lock; | ||
| 439 | }; | ||
| 440 | |||
| 441 | extern const struct clk_ops clk_fractional_divider_ops; | ||
| 442 | struct clk *clk_register_fractional_divider(struct device *dev, | ||
| 443 | const char *name, const char *parent_name, unsigned long flags, | ||
| 444 | void __iomem *reg, u8 mshift, u8 mwidth, u8 nshift, u8 nwidth, | ||
| 445 | u8 clk_divider_flags, spinlock_t *lock); | ||
| 446 | |||
| 416 | /*** | 447 | /*** |
| 417 | * struct clk_composite - aggregate clock of mux, divider and gate clocks | 448 | * struct clk_composite - aggregate clock of mux, divider and gate clocks |
| 418 | * | 449 | * |
diff --git a/include/linux/clk/at91_pmc.h b/include/linux/clk/at91_pmc.h index a6911ebbd02a..de4268d4987a 100644 --- a/include/linux/clk/at91_pmc.h +++ b/include/linux/clk/at91_pmc.h | |||
| @@ -155,6 +155,7 @@ extern void __iomem *at91_pmc_base; | |||
| 155 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ | 155 | #define AT91_PMC_LOCKB (1 << 2) /* PLLB Lock */ |
| 156 | #define AT91_PMC_MCKRDY (1 << 3) /* Master Clock */ | 156 | #define AT91_PMC_MCKRDY (1 << 3) /* Master Clock */ |
| 157 | #define AT91_PMC_LOCKU (1 << 6) /* UPLL Lock [some SAM9] */ | 157 | #define AT91_PMC_LOCKU (1 << 6) /* UPLL Lock [some SAM9] */ |
| 158 | #define AT91_PMC_OSCSEL (1 << 7) /* Slow Oscillator Selection [some SAM9] */ | ||
| 158 | #define AT91_PMC_PCK0RDY (1 << 8) /* Programmable Clock 0 */ | 159 | #define AT91_PMC_PCK0RDY (1 << 8) /* Programmable Clock 0 */ |
| 159 | #define AT91_PMC_PCK1RDY (1 << 9) /* Programmable Clock 1 */ | 160 | #define AT91_PMC_PCK1RDY (1 << 9) /* Programmable Clock 1 */ |
| 160 | #define AT91_PMC_PCK2RDY (1 << 10) /* Programmable Clock 2 */ | 161 | #define AT91_PMC_PCK2RDY (1 << 10) /* Programmable Clock 2 */ |
diff --git a/include/linux/compiler-intel.h b/include/linux/compiler-intel.h index 5529c5239421..ba147a1727e6 100644 --- a/include/linux/compiler-intel.h +++ b/include/linux/compiler-intel.h | |||
| @@ -13,12 +13,9 @@ | |||
| 13 | /* Intel ECC compiler doesn't support gcc specific asm stmts. | 13 | /* Intel ECC compiler doesn't support gcc specific asm stmts. |
| 14 | * It uses intrinsics to do the equivalent things. | 14 | * It uses intrinsics to do the equivalent things. |
| 15 | */ | 15 | */ |
| 16 | #undef barrier | ||
| 17 | #undef RELOC_HIDE | 16 | #undef RELOC_HIDE |
| 18 | #undef OPTIMIZER_HIDE_VAR | 17 | #undef OPTIMIZER_HIDE_VAR |
| 19 | 18 | ||
| 20 | #define barrier() __memory_barrier() | ||
| 21 | |||
| 22 | #define RELOC_HIDE(ptr, off) \ | 19 | #define RELOC_HIDE(ptr, off) \ |
| 23 | ({ unsigned long __ptr; \ | 20 | ({ unsigned long __ptr; \ |
| 24 | __ptr = (unsigned long) (ptr); \ | 21 | __ptr = (unsigned long) (ptr); \ |
diff --git a/include/linux/connector.h b/include/linux/connector.h index be9c4747d511..f8fe8637d771 100644 --- a/include/linux/connector.h +++ b/include/linux/connector.h | |||
| @@ -71,6 +71,7 @@ struct cn_dev { | |||
| 71 | int cn_add_callback(struct cb_id *id, const char *name, | 71 | int cn_add_callback(struct cb_id *id, const char *name, |
| 72 | void (*callback)(struct cn_msg *, struct netlink_skb_parms *)); | 72 | void (*callback)(struct cn_msg *, struct netlink_skb_parms *)); |
| 73 | void cn_del_callback(struct cb_id *); | 73 | void cn_del_callback(struct cb_id *); |
| 74 | int cn_netlink_send_mult(struct cn_msg *msg, u16 len, u32 portid, u32 group, gfp_t gfp_mask); | ||
| 74 | int cn_netlink_send(struct cn_msg *msg, u32 portid, u32 group, gfp_t gfp_mask); | 75 | int cn_netlink_send(struct cn_msg *msg, u32 portid, u32 group, gfp_t gfp_mask); |
| 75 | 76 | ||
| 76 | int cn_queue_add_callback(struct cn_queue_dev *dev, const char *name, | 77 | int cn_queue_add_callback(struct cn_queue_dev *dev, const char *name, |
diff --git a/include/linux/console_struct.h b/include/linux/console_struct.h index 7f0c32908568..e859c98d1767 100644 --- a/include/linux/console_struct.h +++ b/include/linux/console_struct.h | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/workqueue.h> | 17 | #include <linux/workqueue.h> |
| 18 | 18 | ||
| 19 | struct vt_struct; | 19 | struct vt_struct; |
| 20 | struct uni_pagedir; | ||
| 20 | 21 | ||
| 21 | #define NPAR 16 | 22 | #define NPAR 16 |
| 22 | 23 | ||
| @@ -104,8 +105,8 @@ struct vc_data { | |||
| 104 | unsigned int vc_bell_pitch; /* Console bell pitch */ | 105 | unsigned int vc_bell_pitch; /* Console bell pitch */ |
| 105 | unsigned int vc_bell_duration; /* Console bell duration */ | 106 | unsigned int vc_bell_duration; /* Console bell duration */ |
| 106 | struct vc_data **vc_display_fg; /* [!] Ptr to var holding fg console for this display */ | 107 | struct vc_data **vc_display_fg; /* [!] Ptr to var holding fg console for this display */ |
| 107 | unsigned long vc_uni_pagedir; | 108 | struct uni_pagedir *vc_uni_pagedir; |
| 108 | unsigned long *vc_uni_pagedir_loc; /* [!] Location of uni_pagedir variable for this console */ | 109 | struct uni_pagedir **vc_uni_pagedir_loc; /* [!] Location of uni_pagedir variable for this console */ |
| 109 | bool vc_panic_force_write; /* when oops/panic this VC can accept forced output/blanking */ | 110 | bool vc_panic_force_write; /* when oops/panic this VC can accept forced output/blanking */ |
| 110 | /* additional information is in vt_kern.h */ | 111 | /* additional information is in vt_kern.h */ |
| 111 | }; | 112 | }; |
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h index 5ae5100c1f24..3f458896d45c 100644 --- a/include/linux/cpufreq.h +++ b/include/linux/cpufreq.h | |||
| @@ -110,6 +110,7 @@ struct cpufreq_policy { | |||
| 110 | bool transition_ongoing; /* Tracks transition status */ | 110 | bool transition_ongoing; /* Tracks transition status */ |
| 111 | spinlock_t transition_lock; | 111 | spinlock_t transition_lock; |
| 112 | wait_queue_head_t transition_wait; | 112 | wait_queue_head_t transition_wait; |
| 113 | struct task_struct *transition_task; /* Task which is doing the transition */ | ||
| 113 | }; | 114 | }; |
| 114 | 115 | ||
| 115 | /* Only for ACPI */ | 116 | /* Only for ACPI */ |
| @@ -468,6 +469,55 @@ struct cpufreq_frequency_table { | |||
| 468 | * order */ | 469 | * order */ |
| 469 | }; | 470 | }; |
| 470 | 471 | ||
| 472 | #if defined(CONFIG_CPU_FREQ) && defined(CONFIG_PM_OPP) | ||
| 473 | int dev_pm_opp_init_cpufreq_table(struct device *dev, | ||
| 474 | struct cpufreq_frequency_table **table); | ||
| 475 | void dev_pm_opp_free_cpufreq_table(struct device *dev, | ||
| 476 | struct cpufreq_frequency_table **table); | ||
| 477 | #else | ||
| 478 | static inline int dev_pm_opp_init_cpufreq_table(struct device *dev, | ||
| 479 | struct cpufreq_frequency_table | ||
| 480 | **table) | ||
| 481 | { | ||
| 482 | return -EINVAL; | ||
| 483 | } | ||
| 484 | |||
| 485 | static inline void dev_pm_opp_free_cpufreq_table(struct device *dev, | ||
| 486 | struct cpufreq_frequency_table | ||
| 487 | **table) | ||
| 488 | { | ||
| 489 | } | ||
| 490 | #endif | ||
| 491 | |||
| 492 | static inline bool cpufreq_next_valid(struct cpufreq_frequency_table **pos) | ||
| 493 | { | ||
| 494 | while ((*pos)->frequency != CPUFREQ_TABLE_END) | ||
| 495 | if ((*pos)->frequency != CPUFREQ_ENTRY_INVALID) | ||
| 496 | return true; | ||
| 497 | else | ||
| 498 | (*pos)++; | ||
| 499 | return false; | ||
| 500 | } | ||
| 501 | |||
| 502 | /* | ||
| 503 | * cpufreq_for_each_entry - iterate over a cpufreq_frequency_table | ||
| 504 | * @pos: the cpufreq_frequency_table * to use as a loop cursor. | ||
| 505 | * @table: the cpufreq_frequency_table * to iterate over. | ||
| 506 | */ | ||
| 507 | |||
| 508 | #define cpufreq_for_each_entry(pos, table) \ | ||
| 509 | for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++) | ||
| 510 | |||
| 511 | /* | ||
| 512 | * cpufreq_for_each_valid_entry - iterate over a cpufreq_frequency_table | ||
| 513 | * excluding CPUFREQ_ENTRY_INVALID frequencies. | ||
| 514 | * @pos: the cpufreq_frequency_table * to use as a loop cursor. | ||
| 515 | * @table: the cpufreq_frequency_table * to iterate over. | ||
| 516 | */ | ||
| 517 | |||
| 518 | #define cpufreq_for_each_valid_entry(pos, table) \ | ||
| 519 | for (pos = table; cpufreq_next_valid(&pos); pos++) | ||
| 520 | |||
| 471 | int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy, | 521 | int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy, |
| 472 | struct cpufreq_frequency_table *table); | 522 | struct cpufreq_frequency_table *table); |
| 473 | 523 | ||
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index b0238cba440b..c51a436135c4 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h | |||
| @@ -120,8 +120,6 @@ struct cpuidle_driver { | |||
| 120 | #ifdef CONFIG_CPU_IDLE | 120 | #ifdef CONFIG_CPU_IDLE |
| 121 | extern void disable_cpuidle(void); | 121 | extern void disable_cpuidle(void); |
| 122 | 122 | ||
| 123 | extern int cpuidle_enabled(struct cpuidle_driver *drv, | ||
| 124 | struct cpuidle_device *dev); | ||
| 125 | extern int cpuidle_select(struct cpuidle_driver *drv, | 123 | extern int cpuidle_select(struct cpuidle_driver *drv, |
| 126 | struct cpuidle_device *dev); | 124 | struct cpuidle_device *dev); |
| 127 | extern int cpuidle_enter(struct cpuidle_driver *drv, | 125 | extern int cpuidle_enter(struct cpuidle_driver *drv, |
| @@ -145,13 +143,11 @@ extern void cpuidle_resume(void); | |||
| 145 | extern int cpuidle_enable_device(struct cpuidle_device *dev); | 143 | extern int cpuidle_enable_device(struct cpuidle_device *dev); |
| 146 | extern void cpuidle_disable_device(struct cpuidle_device *dev); | 144 | extern void cpuidle_disable_device(struct cpuidle_device *dev); |
| 147 | extern int cpuidle_play_dead(void); | 145 | extern int cpuidle_play_dead(void); |
| 146 | extern void cpuidle_use_deepest_state(bool enable); | ||
| 148 | 147 | ||
| 149 | extern struct cpuidle_driver *cpuidle_get_cpu_driver(struct cpuidle_device *dev); | 148 | extern struct cpuidle_driver *cpuidle_get_cpu_driver(struct cpuidle_device *dev); |
| 150 | #else | 149 | #else |
| 151 | static inline void disable_cpuidle(void) { } | 150 | static inline void disable_cpuidle(void) { } |
| 152 | static inline int cpuidle_enabled(struct cpuidle_driver *drv, | ||
| 153 | struct cpuidle_device *dev) | ||
| 154 | {return -ENODEV; } | ||
| 155 | static inline int cpuidle_select(struct cpuidle_driver *drv, | 151 | static inline int cpuidle_select(struct cpuidle_driver *drv, |
| 156 | struct cpuidle_device *dev) | 152 | struct cpuidle_device *dev) |
| 157 | {return -ENODEV; } | 153 | {return -ENODEV; } |
| @@ -180,6 +176,7 @@ static inline int cpuidle_enable_device(struct cpuidle_device *dev) | |||
| 180 | {return -ENODEV; } | 176 | {return -ENODEV; } |
| 181 | static inline void cpuidle_disable_device(struct cpuidle_device *dev) { } | 177 | static inline void cpuidle_disable_device(struct cpuidle_device *dev) { } |
| 182 | static inline int cpuidle_play_dead(void) {return -ENODEV; } | 178 | static inline int cpuidle_play_dead(void) {return -ENODEV; } |
| 179 | static inline void cpuidle_use_deepest_state(bool enable) {} | ||
| 183 | static inline struct cpuidle_driver *cpuidle_get_cpu_driver( | 180 | static inline struct cpuidle_driver *cpuidle_get_cpu_driver( |
| 184 | struct cpuidle_device *dev) {return NULL; } | 181 | struct cpuidle_device *dev) {return NULL; } |
| 185 | #endif | 182 | #endif |
diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h index d48dc00232a4..f1863dcd83ea 100644 --- a/include/linux/devfreq.h +++ b/include/linux/devfreq.h | |||
| @@ -181,6 +181,12 @@ extern struct devfreq *devfreq_add_device(struct device *dev, | |||
| 181 | const char *governor_name, | 181 | const char *governor_name, |
| 182 | void *data); | 182 | void *data); |
| 183 | extern int devfreq_remove_device(struct devfreq *devfreq); | 183 | extern int devfreq_remove_device(struct devfreq *devfreq); |
| 184 | extern struct devfreq *devm_devfreq_add_device(struct device *dev, | ||
| 185 | struct devfreq_dev_profile *profile, | ||
| 186 | const char *governor_name, | ||
| 187 | void *data); | ||
| 188 | extern void devm_devfreq_remove_device(struct device *dev, | ||
| 189 | struct devfreq *devfreq); | ||
| 184 | 190 | ||
| 185 | /* Supposed to be called by PM_SLEEP/PM_RUNTIME callbacks */ | 191 | /* Supposed to be called by PM_SLEEP/PM_RUNTIME callbacks */ |
| 186 | extern int devfreq_suspend_device(struct devfreq *devfreq); | 192 | extern int devfreq_suspend_device(struct devfreq *devfreq); |
| @@ -193,6 +199,10 @@ extern int devfreq_register_opp_notifier(struct device *dev, | |||
| 193 | struct devfreq *devfreq); | 199 | struct devfreq *devfreq); |
| 194 | extern int devfreq_unregister_opp_notifier(struct device *dev, | 200 | extern int devfreq_unregister_opp_notifier(struct device *dev, |
| 195 | struct devfreq *devfreq); | 201 | struct devfreq *devfreq); |
| 202 | extern int devm_devfreq_register_opp_notifier(struct device *dev, | ||
| 203 | struct devfreq *devfreq); | ||
| 204 | extern void devm_devfreq_unregister_opp_notifier(struct device *dev, | ||
| 205 | struct devfreq *devfreq); | ||
| 196 | 206 | ||
| 197 | #if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND) | 207 | #if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND) |
| 198 | /** | 208 | /** |
| @@ -220,7 +230,7 @@ static inline struct devfreq *devfreq_add_device(struct device *dev, | |||
| 220 | const char *governor_name, | 230 | const char *governor_name, |
| 221 | void *data) | 231 | void *data) |
| 222 | { | 232 | { |
| 223 | return NULL; | 233 | return ERR_PTR(-ENOSYS); |
| 224 | } | 234 | } |
| 225 | 235 | ||
| 226 | static inline int devfreq_remove_device(struct devfreq *devfreq) | 236 | static inline int devfreq_remove_device(struct devfreq *devfreq) |
| @@ -228,6 +238,19 @@ static inline int devfreq_remove_device(struct devfreq *devfreq) | |||
| 228 | return 0; | 238 | return 0; |
| 229 | } | 239 | } |
| 230 | 240 | ||
| 241 | static inline struct devfreq *devm_devfreq_add_device(struct device *dev, | ||
| 242 | struct devfreq_dev_profile *profile, | ||
| 243 | const char *governor_name, | ||
| 244 | void *data) | ||
| 245 | { | ||
| 246 | return ERR_PTR(-ENOSYS); | ||
| 247 | } | ||
| 248 | |||
| 249 | static inline void devm_devfreq_remove_device(struct device *dev, | ||
| 250 | struct devfreq *devfreq) | ||
| 251 | { | ||
| 252 | } | ||
| 253 | |||
| 231 | static inline int devfreq_suspend_device(struct devfreq *devfreq) | 254 | static inline int devfreq_suspend_device(struct devfreq *devfreq) |
| 232 | { | 255 | { |
| 233 | return 0; | 256 | return 0; |
| @@ -256,6 +279,16 @@ static inline int devfreq_unregister_opp_notifier(struct device *dev, | |||
| 256 | return -EINVAL; | 279 | return -EINVAL; |
| 257 | } | 280 | } |
| 258 | 281 | ||
| 282 | static inline int devm_devfreq_register_opp_notifier(struct device *dev, | ||
| 283 | struct devfreq *devfreq) | ||
| 284 | { | ||
| 285 | return -EINVAL; | ||
| 286 | } | ||
| 287 | |||
| 288 | static inline void devm_devfreq_unregister_opp_notifier(struct device *dev, | ||
| 289 | struct devfreq *devfreq) | ||
| 290 | { | ||
| 291 | } | ||
| 259 | #endif /* CONFIG_PM_DEVFREQ */ | 292 | #endif /* CONFIG_PM_DEVFREQ */ |
| 260 | 293 | ||
| 261 | #endif /* __LINUX_DEVFREQ_H__ */ | 294 | #endif /* __LINUX_DEVFREQ_H__ */ |
diff --git a/include/linux/device.h b/include/linux/device.h index d1d1c055b48e..580e3eed4b78 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -623,6 +623,12 @@ static inline void *devm_kcalloc(struct device *dev, | |||
| 623 | } | 623 | } |
| 624 | extern void devm_kfree(struct device *dev, void *p); | 624 | extern void devm_kfree(struct device *dev, void *p); |
| 625 | extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp); | 625 | extern char *devm_kstrdup(struct device *dev, const char *s, gfp_t gfp); |
| 626 | extern void *devm_kmemdup(struct device *dev, const void *src, size_t len, | ||
| 627 | gfp_t gfp); | ||
| 628 | |||
| 629 | extern unsigned long devm_get_free_pages(struct device *dev, | ||
| 630 | gfp_t gfp_mask, unsigned int order); | ||
| 631 | extern void devm_free_pages(struct device *dev, unsigned long addr); | ||
| 626 | 632 | ||
| 627 | void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res); | 633 | void __iomem *devm_ioremap_resource(struct device *dev, struct resource *res); |
| 628 | void __iomem *devm_request_and_ioremap(struct device *dev, | 634 | void __iomem *devm_request_and_ioremap(struct device *dev, |
| @@ -673,6 +679,7 @@ struct acpi_dev_node { | |||
| 673 | * variants, which GPIO pins act in what additional roles, and so | 679 | * variants, which GPIO pins act in what additional roles, and so |
| 674 | * on. This shrinks the "Board Support Packages" (BSPs) and | 680 | * on. This shrinks the "Board Support Packages" (BSPs) and |
| 675 | * minimizes board-specific #ifdefs in drivers. | 681 | * minimizes board-specific #ifdefs in drivers. |
| 682 | * @driver_data: Private pointer for driver specific info. | ||
| 676 | * @power: For device power management. | 683 | * @power: For device power management. |
| 677 | * See Documentation/power/devices.txt for details. | 684 | * See Documentation/power/devices.txt for details. |
| 678 | * @pm_domain: Provide callbacks that are executed during system suspend, | 685 | * @pm_domain: Provide callbacks that are executed during system suspend, |
| @@ -734,6 +741,8 @@ struct device { | |||
| 734 | device */ | 741 | device */ |
| 735 | void *platform_data; /* Platform specific data, device | 742 | void *platform_data; /* Platform specific data, device |
| 736 | core doesn't touch it */ | 743 | core doesn't touch it */ |
| 744 | void *driver_data; /* Driver data, set and get with | ||
| 745 | dev_set/get_drvdata */ | ||
| 737 | struct dev_pm_info power; | 746 | struct dev_pm_info power; |
| 738 | struct dev_pm_domain *pm_domain; | 747 | struct dev_pm_domain *pm_domain; |
| 739 | 748 | ||
| @@ -823,6 +832,16 @@ static inline void set_dev_node(struct device *dev, int node) | |||
| 823 | } | 832 | } |
| 824 | #endif | 833 | #endif |
| 825 | 834 | ||
| 835 | static inline void *dev_get_drvdata(const struct device *dev) | ||
| 836 | { | ||
| 837 | return dev->driver_data; | ||
| 838 | } | ||
| 839 | |||
| 840 | static inline void dev_set_drvdata(struct device *dev, void *data) | ||
| 841 | { | ||
| 842 | dev->driver_data = data; | ||
| 843 | } | ||
| 844 | |||
| 826 | static inline struct pm_subsys_data *dev_to_psd(struct device *dev) | 845 | static inline struct pm_subsys_data *dev_to_psd(struct device *dev) |
| 827 | { | 846 | { |
| 828 | return dev ? dev->power.subsys_data : NULL; | 847 | return dev ? dev->power.subsys_data : NULL; |
| @@ -907,8 +926,6 @@ extern int device_move(struct device *dev, struct device *new_parent, | |||
| 907 | extern const char *device_get_devnode(struct device *dev, | 926 | extern const char *device_get_devnode(struct device *dev, |
| 908 | umode_t *mode, kuid_t *uid, kgid_t *gid, | 927 | umode_t *mode, kuid_t *uid, kgid_t *gid, |
| 909 | const char **tmp); | 928 | const char **tmp); |
| 910 | extern void *dev_get_drvdata(const struct device *dev); | ||
| 911 | extern int dev_set_drvdata(struct device *dev, void *data); | ||
| 912 | 929 | ||
| 913 | static inline bool device_supports_offline(struct device *dev) | 930 | static inline bool device_supports_offline(struct device *dev) |
| 914 | { | 931 | { |
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index fd4aee29ad10..0c3eab1e39ac 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h | |||
| @@ -8,6 +8,12 @@ | |||
| 8 | #include <linux/dma-direction.h> | 8 | #include <linux/dma-direction.h> |
| 9 | #include <linux/scatterlist.h> | 9 | #include <linux/scatterlist.h> |
| 10 | 10 | ||
| 11 | /* | ||
| 12 | * A dma_addr_t can hold any valid DMA or bus address for the platform. | ||
| 13 | * It can be given to a device to use as a DMA source or target. A CPU cannot | ||
| 14 | * reference a dma_addr_t directly because there may be translation between | ||
| 15 | * its physical address space and the bus address space. | ||
| 16 | */ | ||
| 11 | struct dma_map_ops { | 17 | struct dma_map_ops { |
| 12 | void* (*alloc)(struct device *dev, size_t size, | 18 | void* (*alloc)(struct device *dev, size_t size, |
| 13 | dma_addr_t *dma_handle, gfp_t gfp, | 19 | dma_addr_t *dma_handle, gfp_t gfp, |
| @@ -186,7 +192,7 @@ static inline int dma_get_cache_alignment(void) | |||
| 186 | 192 | ||
| 187 | #ifndef ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY | 193 | #ifndef ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY |
| 188 | static inline int | 194 | static inline int |
| 189 | dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr, | 195 | dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, |
| 190 | dma_addr_t device_addr, size_t size, int flags) | 196 | dma_addr_t device_addr, size_t size, int flags) |
| 191 | { | 197 | { |
| 192 | return 0; | 198 | return 0; |
| @@ -217,13 +223,14 @@ extern void *dmam_alloc_noncoherent(struct device *dev, size_t size, | |||
| 217 | extern void dmam_free_noncoherent(struct device *dev, size_t size, void *vaddr, | 223 | extern void dmam_free_noncoherent(struct device *dev, size_t size, void *vaddr, |
| 218 | dma_addr_t dma_handle); | 224 | dma_addr_t dma_handle); |
| 219 | #ifdef ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY | 225 | #ifdef ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY |
| 220 | extern int dmam_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr, | 226 | extern int dmam_declare_coherent_memory(struct device *dev, |
| 227 | phys_addr_t phys_addr, | ||
| 221 | dma_addr_t device_addr, size_t size, | 228 | dma_addr_t device_addr, size_t size, |
| 222 | int flags); | 229 | int flags); |
| 223 | extern void dmam_release_declared_memory(struct device *dev); | 230 | extern void dmam_release_declared_memory(struct device *dev); |
| 224 | #else /* ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY */ | 231 | #else /* ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY */ |
| 225 | static inline int dmam_declare_coherent_memory(struct device *dev, | 232 | static inline int dmam_declare_coherent_memory(struct device *dev, |
| 226 | dma_addr_t bus_addr, dma_addr_t device_addr, | 233 | phys_addr_t phys_addr, dma_addr_t device_addr, |
| 227 | size_t size, gfp_t gfp) | 234 | size_t size, gfp_t gfp) |
| 228 | { | 235 | { |
| 229 | return 0; | 236 | return 0; |
diff --git a/include/linux/extcon.h b/include/linux/extcon.h index f488145bb2d4..36f49c405dfb 100644 --- a/include/linux/extcon.h +++ b/include/linux/extcon.h | |||
| @@ -185,9 +185,22 @@ struct extcon_specific_cable_nb { | |||
| 185 | */ | 185 | */ |
| 186 | extern int extcon_dev_register(struct extcon_dev *edev); | 186 | extern int extcon_dev_register(struct extcon_dev *edev); |
| 187 | extern void extcon_dev_unregister(struct extcon_dev *edev); | 187 | extern void extcon_dev_unregister(struct extcon_dev *edev); |
| 188 | extern int devm_extcon_dev_register(struct device *dev, | ||
| 189 | struct extcon_dev *edev); | ||
| 190 | extern void devm_extcon_dev_unregister(struct device *dev, | ||
| 191 | struct extcon_dev *edev); | ||
| 188 | extern struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name); | 192 | extern struct extcon_dev *extcon_get_extcon_dev(const char *extcon_name); |
| 189 | 193 | ||
| 190 | /* | 194 | /* |
| 195 | * Following APIs control the memory of extcon device. | ||
| 196 | */ | ||
| 197 | extern struct extcon_dev *extcon_dev_allocate(const char **cables); | ||
| 198 | extern void extcon_dev_free(struct extcon_dev *edev); | ||
| 199 | extern struct extcon_dev *devm_extcon_dev_allocate(struct device *dev, | ||
| 200 | const char **cables); | ||
| 201 | extern void devm_extcon_dev_free(struct device *dev, struct extcon_dev *edev); | ||
| 202 | |||
| 203 | /* | ||
| 191 | * get/set/update_state access the 32b encoded state value, which represents | 204 | * get/set/update_state access the 32b encoded state value, which represents |
| 192 | * states of all possible cables of the multistate port. For example, if one | 205 | * states of all possible cables of the multistate port. For example, if one |
| 193 | * calls extcon_set_state(edev, 0x7), it may mean that all the three cables | 206 | * calls extcon_set_state(edev, 0x7), it may mean that all the three cables |
| @@ -254,6 +267,30 @@ static inline int extcon_dev_register(struct extcon_dev *edev) | |||
| 254 | 267 | ||
| 255 | static inline void extcon_dev_unregister(struct extcon_dev *edev) { } | 268 | static inline void extcon_dev_unregister(struct extcon_dev *edev) { } |
| 256 | 269 | ||
| 270 | static inline int devm_extcon_dev_register(struct device *dev, | ||
| 271 | struct extcon_dev *edev) | ||
| 272 | { | ||
| 273 | return -EINVAL; | ||
| 274 | } | ||
| 275 | |||
| 276 | static inline void devm_extcon_dev_unregister(struct device *dev, | ||
| 277 | struct extcon_dev *edev) { } | ||
| 278 | |||
| 279 | static inline struct extcon_dev *extcon_dev_allocate(const char **cables) | ||
| 280 | { | ||
| 281 | return ERR_PTR(-ENOSYS); | ||
| 282 | } | ||
| 283 | |||
| 284 | static inline void extcon_dev_free(struct extcon_dev *edev) { } | ||
| 285 | |||
| 286 | static inline struct extcon_dev *devm_extcon_dev_allocate(struct device *dev, | ||
| 287 | const char **cables) | ||
| 288 | { | ||
| 289 | return ERR_PTR(-ENOSYS); | ||
| 290 | } | ||
| 291 | |||
| 292 | static inline void devm_extcon_dev_free(struct extcon_dev *edev) { } | ||
| 293 | |||
| 257 | static inline u32 extcon_get_state(struct extcon_dev *edev) | 294 | static inline u32 extcon_get_state(struct extcon_dev *edev) |
| 258 | { | 295 | { |
| 259 | return 0; | 296 | return 0; |
diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 9f3c275e053e..ec274e0f4ed2 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h | |||
| @@ -649,7 +649,7 @@ static inline void hd_ref_init(struct hd_struct *part) | |||
| 649 | static inline void hd_struct_get(struct hd_struct *part) | 649 | static inline void hd_struct_get(struct hd_struct *part) |
| 650 | { | 650 | { |
| 651 | atomic_inc(&part->ref); | 651 | atomic_inc(&part->ref); |
| 652 | smp_mb__after_atomic_inc(); | 652 | smp_mb__after_atomic(); |
| 653 | } | 653 | } |
| 654 | 654 | ||
| 655 | static inline int hd_struct_try_get(struct hd_struct *part) | 655 | static inline int hd_struct_try_get(struct hd_struct *part) |
diff --git a/include/linux/goldfish.h b/include/linux/goldfish.h new file mode 100644 index 000000000000..569236e6b2bc --- /dev/null +++ b/include/linux/goldfish.h | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | #ifndef __LINUX_GOLDFISH_H | ||
| 2 | #define __LINUX_GOLDFISH_H | ||
| 3 | |||
| 4 | /* Helpers for Goldfish virtual platform */ | ||
| 5 | |||
| 6 | static inline void gf_write64(unsigned long data, | ||
| 7 | void __iomem *portl, void __iomem *porth) | ||
| 8 | { | ||
| 9 | writel((u32)data, portl); | ||
| 10 | #ifdef CONFIG_64BIT | ||
| 11 | writel(data>>32, porth); | ||
| 12 | #endif | ||
| 13 | } | ||
| 14 | |||
| 15 | #endif /* __LINUX_GOLDFISH_H */ | ||
diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h index bed128e8f4b1..05e53ccb708b 100644 --- a/include/linux/gpio/consumer.h +++ b/include/linux/gpio/consumer.h | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #ifndef __LINUX_GPIO_CONSUMER_H | 1 | #ifndef __LINUX_GPIO_CONSUMER_H |
| 2 | #define __LINUX_GPIO_CONSUMER_H | 2 | #define __LINUX_GPIO_CONSUMER_H |
| 3 | 3 | ||
| 4 | #include <linux/bug.h> | ||
| 4 | #include <linux/err.h> | 5 | #include <linux/err.h> |
| 5 | #include <linux/kernel.h> | 6 | #include <linux/kernel.h> |
| 6 | 7 | ||
| @@ -23,6 +24,12 @@ struct gpio_desc *__must_check gpiod_get(struct device *dev, | |||
| 23 | struct gpio_desc *__must_check gpiod_get_index(struct device *dev, | 24 | struct gpio_desc *__must_check gpiod_get_index(struct device *dev, |
| 24 | const char *con_id, | 25 | const char *con_id, |
| 25 | unsigned int idx); | 26 | unsigned int idx); |
| 27 | struct gpio_desc *__must_check gpiod_get_optional(struct device *dev, | ||
| 28 | const char *con_id); | ||
| 29 | struct gpio_desc *__must_check gpiod_get_index_optional(struct device *dev, | ||
| 30 | const char *con_id, | ||
| 31 | unsigned int index); | ||
| 32 | |||
| 26 | void gpiod_put(struct gpio_desc *desc); | 33 | void gpiod_put(struct gpio_desc *desc); |
| 27 | 34 | ||
| 28 | struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, | 35 | struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, |
| @@ -30,6 +37,12 @@ struct gpio_desc *__must_check devm_gpiod_get(struct device *dev, | |||
| 30 | struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, | 37 | struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, |
| 31 | const char *con_id, | 38 | const char *con_id, |
| 32 | unsigned int idx); | 39 | unsigned int idx); |
| 40 | struct gpio_desc *__must_check devm_gpiod_get_optional(struct device *dev, | ||
| 41 | const char *con_id); | ||
| 42 | struct gpio_desc *__must_check | ||
| 43 | devm_gpiod_get_index_optional(struct device *dev, const char *con_id, | ||
| 44 | unsigned int index); | ||
| 45 | |||
| 33 | void devm_gpiod_put(struct device *dev, struct gpio_desc *desc); | 46 | void devm_gpiod_put(struct device *dev, struct gpio_desc *desc); |
| 34 | 47 | ||
| 35 | int gpiod_get_direction(const struct gpio_desc *desc); | 48 | int gpiod_get_direction(const struct gpio_desc *desc); |
| @@ -73,6 +86,20 @@ static inline struct gpio_desc *__must_check gpiod_get_index(struct device *dev, | |||
| 73 | { | 86 | { |
| 74 | return ERR_PTR(-ENOSYS); | 87 | return ERR_PTR(-ENOSYS); |
| 75 | } | 88 | } |
| 89 | |||
| 90 | static inline struct gpio_desc *__must_check | ||
| 91 | gpiod_get_optional(struct device *dev, const char *con_id) | ||
| 92 | { | ||
| 93 | return ERR_PTR(-ENOSYS); | ||
| 94 | } | ||
| 95 | |||
| 96 | static inline struct gpio_desc *__must_check | ||
| 97 | gpiod_get_index_optional(struct device *dev, const char *con_id, | ||
| 98 | unsigned int index) | ||
| 99 | { | ||
| 100 | return ERR_PTR(-ENOSYS); | ||
| 101 | } | ||
| 102 | |||
| 76 | static inline void gpiod_put(struct gpio_desc *desc) | 103 | static inline void gpiod_put(struct gpio_desc *desc) |
| 77 | { | 104 | { |
| 78 | might_sleep(); | 105 | might_sleep(); |
| @@ -93,6 +120,20 @@ struct gpio_desc *__must_check devm_gpiod_get_index(struct device *dev, | |||
| 93 | { | 120 | { |
| 94 | return ERR_PTR(-ENOSYS); | 121 | return ERR_PTR(-ENOSYS); |
| 95 | } | 122 | } |
| 123 | |||
| 124 | static inline struct gpio_desc *__must_check | ||
| 125 | devm_gpiod_get_optional(struct device *dev, const char *con_id) | ||
| 126 | { | ||
| 127 | return ERR_PTR(-ENOSYS); | ||
| 128 | } | ||
| 129 | |||
| 130 | static inline struct gpio_desc *__must_check | ||
| 131 | devm_gpiod_get_index_optional(struct device *dev, const char *con_id, | ||
| 132 | unsigned int index) | ||
| 133 | { | ||
| 134 | return ERR_PTR(-ENOSYS); | ||
| 135 | } | ||
| 136 | |||
| 96 | static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc) | 137 | static inline void devm_gpiod_put(struct device *dev, struct gpio_desc *desc) |
| 97 | { | 138 | { |
| 98 | might_sleep(); | 139 | might_sleep(); |
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h index 1827b43966d9..573e4f3243d0 100644 --- a/include/linux/gpio/driver.h +++ b/include/linux/gpio/driver.h | |||
| @@ -51,7 +51,10 @@ struct seq_file; | |||
| 51 | * format specifier for an unsigned int. It is substituted by the actual | 51 | * format specifier for an unsigned int. It is substituted by the actual |
| 52 | * number of the gpio. | 52 | * number of the gpio. |
| 53 | * @can_sleep: flag must be set iff get()/set() methods sleep, as they | 53 | * @can_sleep: flag must be set iff get()/set() methods sleep, as they |
| 54 | * must while accessing GPIO expander chips over I2C or SPI | 54 | * must while accessing GPIO expander chips over I2C or SPI. This |
| 55 | * implies that if the chip supports IRQs, these IRQs need to be threaded | ||
| 56 | * as the chip access may sleep when e.g. reading out the IRQ status | ||
| 57 | * registers. | ||
| 55 | * @exported: flags if the gpiochip is exported for use from sysfs. Private. | 58 | * @exported: flags if the gpiochip is exported for use from sysfs. Private. |
| 56 | * | 59 | * |
| 57 | * A gpio_chip can help platforms abstract various sources of GPIOs so | 60 | * A gpio_chip can help platforms abstract various sources of GPIOs so |
diff --git a/include/linux/hid-sensor-hub.h b/include/linux/hid-sensor-hub.h index b70cfd7ff29c..51f7ccadf923 100644 --- a/include/linux/hid-sensor-hub.h +++ b/include/linux/hid-sensor-hub.h | |||
| @@ -189,7 +189,7 @@ struct hid_sensor_common { | |||
| 189 | struct hid_sensor_hub_device *hsdev; | 189 | struct hid_sensor_hub_device *hsdev; |
| 190 | struct platform_device *pdev; | 190 | struct platform_device *pdev; |
| 191 | unsigned usage_id; | 191 | unsigned usage_id; |
| 192 | bool data_ready; | 192 | atomic_t data_ready; |
| 193 | struct iio_trigger *trigger; | 193 | struct iio_trigger *trigger; |
| 194 | struct hid_sensor_hub_attribute_info poll; | 194 | struct hid_sensor_hub_attribute_info poll; |
| 195 | struct hid_sensor_hub_attribute_info report_state; | 195 | struct hid_sensor_hub_attribute_info report_state; |
| @@ -223,4 +223,10 @@ int hid_sensor_read_samp_freq_value(struct hid_sensor_common *st, | |||
| 223 | int hid_sensor_get_usage_index(struct hid_sensor_hub_device *hsdev, | 223 | int hid_sensor_get_usage_index(struct hid_sensor_hub_device *hsdev, |
| 224 | u32 report_id, int field_index, u32 usage_id); | 224 | u32 report_id, int field_index, u32 usage_id); |
| 225 | 225 | ||
| 226 | int hid_sensor_format_scale(u32 usage_id, | ||
| 227 | struct hid_sensor_hub_attribute_info *attr_info, | ||
| 228 | int *val0, int *val1); | ||
| 229 | |||
| 230 | s32 hid_sensor_read_poll_value(struct hid_sensor_common *st); | ||
| 231 | |||
| 226 | #endif | 232 | #endif |
diff --git a/include/linux/hid-sensor-ids.h b/include/linux/hid-sensor-ids.h index 14ead9e8eda8..109f0e633e01 100644 --- a/include/linux/hid-sensor-ids.h +++ b/include/linux/hid-sensor-ids.h | |||
| @@ -76,6 +76,7 @@ | |||
| 76 | #define HID_USAGE_SENSOR_ORIENT_TILT_Y 0x200480 | 76 | #define HID_USAGE_SENSOR_ORIENT_TILT_Y 0x200480 |
| 77 | #define HID_USAGE_SENSOR_ORIENT_TILT_Z 0x200481 | 77 | #define HID_USAGE_SENSOR_ORIENT_TILT_Z 0x200481 |
| 78 | 78 | ||
| 79 | #define HID_USAGE_SENSOR_DEVICE_ORIENTATION 0x20008A | ||
| 79 | #define HID_USAGE_SENSOR_ORIENT_ROTATION_MATRIX 0x200482 | 80 | #define HID_USAGE_SENSOR_ORIENT_ROTATION_MATRIX 0x200482 |
| 80 | #define HID_USAGE_SENSOR_ORIENT_QUATERNION 0x200483 | 81 | #define HID_USAGE_SENSOR_ORIENT_QUATERNION 0x200483 |
| 81 | #define HID_USAGE_SENSOR_ORIENT_MAGN_FLUX 0x200484 | 82 | #define HID_USAGE_SENSOR_ORIENT_MAGN_FLUX 0x200484 |
diff --git a/include/linux/hid.h b/include/linux/hid.h index 720e3a10608c..77632cf159c0 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h | |||
| @@ -233,11 +233,6 @@ struct hid_item { | |||
| 233 | #define HID_DG_BARRELSWITCH 0x000d0044 | 233 | #define HID_DG_BARRELSWITCH 0x000d0044 |
| 234 | #define HID_DG_ERASER 0x000d0045 | 234 | #define HID_DG_ERASER 0x000d0045 |
| 235 | #define HID_DG_TABLETPICK 0x000d0046 | 235 | #define HID_DG_TABLETPICK 0x000d0046 |
| 236 | /* | ||
| 237 | * as of May 20, 2009 the usages below are not yet in the official USB spec | ||
| 238 | * but are being pushed by Microsft as described in their paper "Digitizer | ||
| 239 | * Drivers for Windows Touch and Pen-Based Computers" | ||
| 240 | */ | ||
| 241 | #define HID_DG_CONFIDENCE 0x000d0047 | 236 | #define HID_DG_CONFIDENCE 0x000d0047 |
| 242 | #define HID_DG_WIDTH 0x000d0048 | 237 | #define HID_DG_WIDTH 0x000d0048 |
| 243 | #define HID_DG_HEIGHT 0x000d0049 | 238 | #define HID_DG_HEIGHT 0x000d0049 |
| @@ -246,6 +241,8 @@ struct hid_item { | |||
| 246 | #define HID_DG_DEVICEINDEX 0x000d0053 | 241 | #define HID_DG_DEVICEINDEX 0x000d0053 |
| 247 | #define HID_DG_CONTACTCOUNT 0x000d0054 | 242 | #define HID_DG_CONTACTCOUNT 0x000d0054 |
| 248 | #define HID_DG_CONTACTMAX 0x000d0055 | 243 | #define HID_DG_CONTACTMAX 0x000d0055 |
| 244 | #define HID_DG_BARRELSWITCH2 0x000d005a | ||
| 245 | #define HID_DG_TOOLSERIALNUMBER 0x000d005b | ||
| 249 | 246 | ||
| 250 | /* | 247 | /* |
| 251 | * HID report types --- Ouch! HID spec says 1 2 3! | 248 | * HID report types --- Ouch! HID spec says 1 2 3! |
| @@ -299,6 +296,9 @@ struct hid_item { | |||
| 299 | 296 | ||
| 300 | /* | 297 | /* |
| 301 | * HID device groups | 298 | * HID device groups |
| 299 | * | ||
| 300 | * Note: HID_GROUP_ANY is declared in linux/mod_devicetable.h | ||
| 301 | * and has a value of 0x0000 | ||
| 302 | */ | 302 | */ |
| 303 | #define HID_GROUP_GENERIC 0x0001 | 303 | #define HID_GROUP_GENERIC 0x0001 |
| 304 | #define HID_GROUP_MULTITOUCH 0x0002 | 304 | #define HID_GROUP_MULTITOUCH 0x0002 |
| @@ -306,6 +306,11 @@ struct hid_item { | |||
| 306 | #define HID_GROUP_MULTITOUCH_WIN_8 0x0004 | 306 | #define HID_GROUP_MULTITOUCH_WIN_8 0x0004 |
| 307 | 307 | ||
| 308 | /* | 308 | /* |
| 309 | * Vendor specific HID device groups | ||
| 310 | */ | ||
| 311 | #define HID_GROUP_RMI 0x0100 | ||
| 312 | |||
| 313 | /* | ||
| 309 | * This is the global environment of the parser. This information is | 314 | * This is the global environment of the parser. This information is |
| 310 | * persistent for main-items. The global environment can be saved and | 315 | * persistent for main-items. The global environment can be saved and |
| 311 | * restored with PUSH/POP statements. | 316 | * restored with PUSH/POP statements. |
| @@ -570,6 +575,8 @@ struct hid_descriptor { | |||
| 570 | .bus = BUS_USB, .vendor = (ven), .product = (prod) | 575 | .bus = BUS_USB, .vendor = (ven), .product = (prod) |
| 571 | #define HID_BLUETOOTH_DEVICE(ven, prod) \ | 576 | #define HID_BLUETOOTH_DEVICE(ven, prod) \ |
| 572 | .bus = BUS_BLUETOOTH, .vendor = (ven), .product = (prod) | 577 | .bus = BUS_BLUETOOTH, .vendor = (ven), .product = (prod) |
| 578 | #define HID_I2C_DEVICE(ven, prod) \ | ||
| 579 | .bus = BUS_I2C, .vendor = (ven), .product = (prod) | ||
| 573 | 580 | ||
| 574 | #define HID_REPORT_ID(rep) \ | 581 | #define HID_REPORT_ID(rep) \ |
| 575 | .report_type = (rep) | 582 | .report_type = (rep) |
diff --git a/include/linux/hsi/hsi.h b/include/linux/hsi/hsi.h index 39bfd5b89077..3ec06300d535 100644 --- a/include/linux/hsi/hsi.h +++ b/include/linux/hsi/hsi.h | |||
| @@ -68,17 +68,31 @@ enum { | |||
| 68 | }; | 68 | }; |
| 69 | 69 | ||
| 70 | /** | 70 | /** |
| 71 | * struct hsi_channel - channel resource used by the hsi clients | ||
| 72 | * @id: Channel number | ||
| 73 | * @name: Channel name | ||
| 74 | */ | ||
| 75 | struct hsi_channel { | ||
| 76 | unsigned int id; | ||
| 77 | const char *name; | ||
| 78 | }; | ||
| 79 | |||
| 80 | /** | ||
| 71 | * struct hsi_config - Configuration for RX/TX HSI modules | 81 | * struct hsi_config - Configuration for RX/TX HSI modules |
| 72 | * @mode: Bit transmission mode (STREAM or FRAME) | 82 | * @mode: Bit transmission mode (STREAM or FRAME) |
| 73 | * @channels: Number of channels to use [1..16] | 83 | * @channels: Channel resources used by the client |
| 84 | * @num_channels: Number of channel resources | ||
| 85 | * @num_hw_channels: Number of channels the transceiver is configured for [1..16] | ||
| 74 | * @speed: Max bit transmission speed (Kbit/s) | 86 | * @speed: Max bit transmission speed (Kbit/s) |
| 75 | * @flow: RX flow type (SYNCHRONIZED or PIPELINE) | 87 | * @flow: RX flow type (SYNCHRONIZED or PIPELINE) |
| 76 | * @arb_mode: Arbitration mode for TX frame (Round robin, priority) | 88 | * @arb_mode: Arbitration mode for TX frame (Round robin, priority) |
| 77 | */ | 89 | */ |
| 78 | struct hsi_config { | 90 | struct hsi_config { |
| 79 | unsigned int mode; | 91 | unsigned int mode; |
| 80 | unsigned int channels; | 92 | struct hsi_channel *channels; |
| 81 | unsigned int speed; | 93 | unsigned int num_channels; |
| 94 | unsigned int num_hw_channels; | ||
| 95 | unsigned int speed; | ||
| 82 | union { | 96 | union { |
| 83 | unsigned int flow; /* RX only */ | 97 | unsigned int flow; /* RX only */ |
| 84 | unsigned int arb_mode; /* TX only */ | 98 | unsigned int arb_mode; /* TX only */ |
| @@ -282,6 +296,21 @@ struct hsi_controller *hsi_alloc_controller(unsigned int n_ports, gfp_t flags); | |||
| 282 | void hsi_put_controller(struct hsi_controller *hsi); | 296 | void hsi_put_controller(struct hsi_controller *hsi); |
| 283 | int hsi_register_controller(struct hsi_controller *hsi); | 297 | int hsi_register_controller(struct hsi_controller *hsi); |
| 284 | void hsi_unregister_controller(struct hsi_controller *hsi); | 298 | void hsi_unregister_controller(struct hsi_controller *hsi); |
| 299 | struct hsi_client *hsi_new_client(struct hsi_port *port, | ||
| 300 | struct hsi_board_info *info); | ||
| 301 | int hsi_remove_client(struct device *dev, void *data); | ||
| 302 | void hsi_port_unregister_clients(struct hsi_port *port); | ||
| 303 | |||
| 304 | #ifdef CONFIG_OF | ||
| 305 | void hsi_add_clients_from_dt(struct hsi_port *port, | ||
| 306 | struct device_node *clients); | ||
| 307 | #else | ||
| 308 | static inline void hsi_add_clients_from_dt(struct hsi_port *port, | ||
| 309 | struct device_node *clients) | ||
| 310 | { | ||
| 311 | return; | ||
| 312 | } | ||
| 313 | #endif | ||
| 285 | 314 | ||
| 286 | static inline void hsi_controller_set_drvdata(struct hsi_controller *hsi, | 315 | static inline void hsi_controller_set_drvdata(struct hsi_controller *hsi, |
| 287 | void *data) | 316 | void *data) |
| @@ -305,6 +334,8 @@ static inline struct hsi_port *hsi_find_port_num(struct hsi_controller *hsi, | |||
| 305 | */ | 334 | */ |
| 306 | int hsi_async(struct hsi_client *cl, struct hsi_msg *msg); | 335 | int hsi_async(struct hsi_client *cl, struct hsi_msg *msg); |
| 307 | 336 | ||
| 337 | int hsi_get_channel_id_by_name(struct hsi_client *cl, char *name); | ||
| 338 | |||
| 308 | /** | 339 | /** |
| 309 | * hsi_id - Get HSI controller ID associated to a client | 340 | * hsi_id - Get HSI controller ID associated to a client |
| 310 | * @cl: Pointer to a HSI client | 341 | * @cl: Pointer to a HSI client |
diff --git a/include/linux/hsi/ssi_protocol.h b/include/linux/hsi/ssi_protocol.h new file mode 100644 index 000000000000..1433651be0dc --- /dev/null +++ b/include/linux/hsi/ssi_protocol.h | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | /* | ||
| 2 | * ssip_slave.h | ||
| 3 | * | ||
| 4 | * SSIP slave support header file | ||
| 5 | * | ||
| 6 | * Copyright (C) 2010 Nokia Corporation. All rights reserved. | ||
| 7 | * | ||
| 8 | * Contact: Carlos Chinea <carlos.chinea@nokia.com> | ||
| 9 | * | ||
| 10 | * This program is free software; you can redistribute it and/or | ||
| 11 | * modify it under the terms of the GNU General Public License | ||
| 12 | * version 2 as published by the Free Software Foundation. | ||
| 13 | * | ||
| 14 | * This program is distributed in the hope that it will be useful, but | ||
| 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 17 | * General Public License for more details. | ||
| 18 | * | ||
| 19 | * You should have received a copy of the GNU General Public License | ||
| 20 | * along with this program; if not, write to the Free Software | ||
| 21 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | ||
| 22 | * 02110-1301 USA | ||
| 23 | */ | ||
| 24 | |||
| 25 | #ifndef __LINUX_SSIP_SLAVE_H__ | ||
| 26 | #define __LINUX_SSIP_SLAVE_H__ | ||
| 27 | |||
| 28 | #include <linux/hsi/hsi.h> | ||
| 29 | |||
| 30 | static inline void ssip_slave_put_master(struct hsi_client *master) | ||
| 31 | { | ||
| 32 | } | ||
| 33 | |||
| 34 | struct hsi_client *ssip_slave_get_master(struct hsi_client *slave); | ||
| 35 | int ssip_slave_start_tx(struct hsi_client *master); | ||
| 36 | int ssip_slave_stop_tx(struct hsi_client *master); | ||
| 37 | void ssip_reset_event(struct hsi_client *master); | ||
| 38 | |||
| 39 | int ssip_slave_running(struct hsi_client *master); | ||
| 40 | |||
| 41 | #endif /* __LINUX_SSIP_SLAVE_H__ */ | ||
| 42 | |||
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h index 2d7b4f139c32..08cfaff8a072 100644 --- a/include/linux/hyperv.h +++ b/include/linux/hyperv.h | |||
| @@ -696,6 +696,8 @@ struct vmbus_channel { | |||
| 696 | * preserve the earlier behavior. | 696 | * preserve the earlier behavior. |
| 697 | */ | 697 | */ |
| 698 | u32 target_vp; | 698 | u32 target_vp; |
| 699 | /* The corresponding CPUID in the guest */ | ||
| 700 | u32 target_cpu; | ||
| 699 | /* | 701 | /* |
| 700 | * Support for sub-channels. For high performance devices, | 702 | * Support for sub-channels. For high performance devices, |
| 701 | * it will be useful to have multiple sub-channels to support | 703 | * it will be useful to have multiple sub-channels to support |
| @@ -732,6 +734,11 @@ struct vmbus_channel { | |||
| 732 | * Support per-channel state for use by vmbus drivers. | 734 | * Support per-channel state for use by vmbus drivers. |
| 733 | */ | 735 | */ |
| 734 | void *per_channel_state; | 736 | void *per_channel_state; |
| 737 | /* | ||
| 738 | * To support per-cpu lookup mapping of relid to channel, | ||
| 739 | * link up channels based on their CPU affinity. | ||
| 740 | */ | ||
| 741 | struct list_head percpu_list; | ||
| 735 | }; | 742 | }; |
| 736 | 743 | ||
| 737 | static inline void set_channel_read_state(struct vmbus_channel *c, bool state) | 744 | static inline void set_channel_read_state(struct vmbus_channel *c, bool state) |
diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h index 3c005eb3a0a4..96f51f0e0096 100644 --- a/include/linux/iio/common/st_sensors.h +++ b/include/linux/iio/common/st_sensors.h | |||
| @@ -269,6 +269,10 @@ int st_sensors_set_enable(struct iio_dev *indio_dev, bool enable); | |||
| 269 | 269 | ||
| 270 | int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable); | 270 | int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable); |
| 271 | 271 | ||
| 272 | void st_sensors_power_enable(struct iio_dev *indio_dev); | ||
| 273 | |||
| 274 | void st_sensors_power_disable(struct iio_dev *indio_dev); | ||
| 275 | |||
| 272 | int st_sensors_set_odr(struct iio_dev *indio_dev, unsigned int odr); | 276 | int st_sensors_set_odr(struct iio_dev *indio_dev, unsigned int odr); |
| 273 | 277 | ||
| 274 | int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable); | 278 | int st_sensors_set_dataready_irq(struct iio_dev *indio_dev, bool enable); |
diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h index 2752b1fd12be..651f9a0e2765 100644 --- a/include/linux/iio/consumer.h +++ b/include/linux/iio/consumer.h | |||
| @@ -123,6 +123,19 @@ int iio_read_channel_raw(struct iio_channel *chan, | |||
| 123 | int *val); | 123 | int *val); |
| 124 | 124 | ||
| 125 | /** | 125 | /** |
| 126 | * iio_read_channel_average_raw() - read from a given channel | ||
| 127 | * @chan: The channel being queried. | ||
| 128 | * @val: Value read back. | ||
| 129 | * | ||
| 130 | * Note raw reads from iio channels are in adc counts and hence | ||
| 131 | * scale will need to be applied if standard units required. | ||
| 132 | * | ||
| 133 | * In opposit to the normal iio_read_channel_raw this function | ||
| 134 | * returns the average of multiple reads. | ||
| 135 | */ | ||
| 136 | int iio_read_channel_average_raw(struct iio_channel *chan, int *val); | ||
| 137 | |||
| 138 | /** | ||
| 126 | * iio_read_channel_processed() - read processed value from a given channel | 139 | * iio_read_channel_processed() - read processed value from a given channel |
| 127 | * @chan: The channel being queried. | 140 | * @chan: The channel being queried. |
| 128 | * @val: Value read back. | 141 | * @val: Value read back. |
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h index 5f2d00e7e488..ccde91725f98 100644 --- a/include/linux/iio/iio.h +++ b/include/linux/iio/iio.h | |||
| @@ -177,6 +177,12 @@ struct iio_event_spec { | |||
| 177 | * shift: Shift right by this before masking out | 177 | * shift: Shift right by this before masking out |
| 178 | * realbits. | 178 | * realbits. |
| 179 | * endianness: little or big endian | 179 | * endianness: little or big endian |
| 180 | * repeat: Number of times real/storage bits | ||
| 181 | * repeats. When the repeat element is | ||
| 182 | * more than 1, then the type element in | ||
| 183 | * sysfs will show a repeat value. | ||
| 184 | * Otherwise, the number of repetitions is | ||
| 185 | * omitted. | ||
| 180 | * @info_mask_separate: What information is to be exported that is specific to | 186 | * @info_mask_separate: What information is to be exported that is specific to |
| 181 | * this channel. | 187 | * this channel. |
| 182 | * @info_mask_shared_by_type: What information is to be exported that is shared | 188 | * @info_mask_shared_by_type: What information is to be exported that is shared |
| @@ -219,6 +225,7 @@ struct iio_chan_spec { | |||
| 219 | u8 realbits; | 225 | u8 realbits; |
| 220 | u8 storagebits; | 226 | u8 storagebits; |
| 221 | u8 shift; | 227 | u8 shift; |
| 228 | u8 repeat; | ||
| 222 | enum iio_endian endianness; | 229 | enum iio_endian endianness; |
| 223 | } scan_type; | 230 | } scan_type; |
| 224 | long info_mask_separate; | 231 | long info_mask_separate; |
| @@ -288,6 +295,8 @@ static inline s64 iio_get_time_ns(void) | |||
| 288 | #define INDIO_ALL_BUFFER_MODES \ | 295 | #define INDIO_ALL_BUFFER_MODES \ |
| 289 | (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE) | 296 | (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE) |
| 290 | 297 | ||
| 298 | #define INDIO_MAX_RAW_ELEMENTS 4 | ||
| 299 | |||
| 291 | struct iio_trigger; /* forward declaration */ | 300 | struct iio_trigger; /* forward declaration */ |
| 292 | struct iio_dev; | 301 | struct iio_dev; |
| 293 | 302 | ||
| @@ -302,6 +311,14 @@ struct iio_dev; | |||
| 302 | * the channel in question. Return value will specify the | 311 | * the channel in question. Return value will specify the |
| 303 | * type of value returned by the device. val and val2 will | 312 | * type of value returned by the device. val and val2 will |
| 304 | * contain the elements making up the returned value. | 313 | * contain the elements making up the returned value. |
| 314 | * @read_raw_multi: function to return values from the device. | ||
| 315 | * mask specifies which value. Note 0 means a reading of | ||
| 316 | * the channel in question. Return value will specify the | ||
| 317 | * type of value returned by the device. vals pointer | ||
| 318 | * contain the elements making up the returned value. | ||
| 319 | * max_len specifies maximum number of elements | ||
| 320 | * vals pointer can contain. val_len is used to return | ||
| 321 | * length of valid elements in vals. | ||
| 305 | * @write_raw: function to write a value to the device. | 322 | * @write_raw: function to write a value to the device. |
| 306 | * Parameters are the same as for read_raw. | 323 | * Parameters are the same as for read_raw. |
| 307 | * @write_raw_get_fmt: callback function to query the expected | 324 | * @write_raw_get_fmt: callback function to query the expected |
| @@ -328,6 +345,13 @@ struct iio_info { | |||
| 328 | int *val2, | 345 | int *val2, |
| 329 | long mask); | 346 | long mask); |
| 330 | 347 | ||
| 348 | int (*read_raw_multi)(struct iio_dev *indio_dev, | ||
| 349 | struct iio_chan_spec const *chan, | ||
| 350 | int max_len, | ||
| 351 | int *vals, | ||
| 352 | int *val_len, | ||
| 353 | long mask); | ||
| 354 | |||
| 331 | int (*write_raw)(struct iio_dev *indio_dev, | 355 | int (*write_raw)(struct iio_dev *indio_dev, |
| 332 | struct iio_chan_spec const *chan, | 356 | struct iio_chan_spec const *chan, |
| 333 | int val, | 357 | int val, |
diff --git a/include/linux/iio/types.h b/include/linux/iio/types.h index 084d882fe01b..d480631eabc2 100644 --- a/include/linux/iio/types.h +++ b/include/linux/iio/types.h | |||
| @@ -53,6 +53,9 @@ enum iio_modifier { | |||
| 53 | IIO_MOD_LIGHT_RED, | 53 | IIO_MOD_LIGHT_RED, |
| 54 | IIO_MOD_LIGHT_GREEN, | 54 | IIO_MOD_LIGHT_GREEN, |
| 55 | IIO_MOD_LIGHT_BLUE, | 55 | IIO_MOD_LIGHT_BLUE, |
| 56 | IIO_MOD_QUATERNION, | ||
| 57 | IIO_MOD_TEMP_AMBIENT, | ||
| 58 | IIO_MOD_TEMP_OBJECT, | ||
| 56 | }; | 59 | }; |
| 57 | 60 | ||
| 58 | enum iio_event_type { | 61 | enum iio_event_type { |
| @@ -79,6 +82,7 @@ enum iio_event_direction { | |||
| 79 | #define IIO_VAL_INT_PLUS_MICRO 2 | 82 | #define IIO_VAL_INT_PLUS_MICRO 2 |
| 80 | #define IIO_VAL_INT_PLUS_NANO 3 | 83 | #define IIO_VAL_INT_PLUS_NANO 3 |
| 81 | #define IIO_VAL_INT_PLUS_MICRO_DB 4 | 84 | #define IIO_VAL_INT_PLUS_MICRO_DB 4 |
| 85 | #define IIO_VAL_INT_MULTIPLE 5 | ||
| 82 | #define IIO_VAL_FRACTIONAL 10 | 86 | #define IIO_VAL_FRACTIONAL 10 |
| 83 | #define IIO_VAL_FRACTIONAL_LOG2 11 | 87 | #define IIO_VAL_FRACTIONAL_LOG2 11 |
| 84 | 88 | ||
diff --git a/include/linux/init.h b/include/linux/init.h index a3ba27076342..2df8e8dd10a4 100644 --- a/include/linux/init.h +++ b/include/linux/init.h | |||
| @@ -297,16 +297,28 @@ void __init parse_early_options(char *cmdline); | |||
| 297 | 297 | ||
| 298 | #else /* MODULE */ | 298 | #else /* MODULE */ |
| 299 | 299 | ||
| 300 | /* Don't use these in loadable modules, but some people do... */ | 300 | /* |
| 301 | * In most cases loadable modules do not need custom | ||
| 302 | * initcall levels. There are still some valid cases where | ||
| 303 | * a driver may be needed early if built in, and does not | ||
| 304 | * matter when built as a loadable module. Like bus | ||
| 305 | * snooping debug drivers. | ||
| 306 | */ | ||
| 301 | #define early_initcall(fn) module_init(fn) | 307 | #define early_initcall(fn) module_init(fn) |
| 302 | #define core_initcall(fn) module_init(fn) | 308 | #define core_initcall(fn) module_init(fn) |
| 309 | #define core_initcall_sync(fn) module_init(fn) | ||
| 303 | #define postcore_initcall(fn) module_init(fn) | 310 | #define postcore_initcall(fn) module_init(fn) |
| 311 | #define postcore_initcall_sync(fn) module_init(fn) | ||
| 304 | #define arch_initcall(fn) module_init(fn) | 312 | #define arch_initcall(fn) module_init(fn) |
| 305 | #define subsys_initcall(fn) module_init(fn) | 313 | #define subsys_initcall(fn) module_init(fn) |
| 314 | #define subsys_initcall_sync(fn) module_init(fn) | ||
| 306 | #define fs_initcall(fn) module_init(fn) | 315 | #define fs_initcall(fn) module_init(fn) |
| 316 | #define fs_initcall_sync(fn) module_init(fn) | ||
| 307 | #define rootfs_initcall(fn) module_init(fn) | 317 | #define rootfs_initcall(fn) module_init(fn) |
| 308 | #define device_initcall(fn) module_init(fn) | 318 | #define device_initcall(fn) module_init(fn) |
| 319 | #define device_initcall_sync(fn) module_init(fn) | ||
| 309 | #define late_initcall(fn) module_init(fn) | 320 | #define late_initcall(fn) module_init(fn) |
| 321 | #define late_initcall_sync(fn) module_init(fn) | ||
| 310 | 322 | ||
| 311 | #define console_initcall(fn) module_init(fn) | 323 | #define console_initcall(fn) module_init(fn) |
| 312 | #define security_initcall(fn) module_init(fn) | 324 | #define security_initcall(fn) module_init(fn) |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 051c85032f48..cb19f09d7e3e 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -491,7 +491,7 @@ static inline int tasklet_trylock(struct tasklet_struct *t) | |||
| 491 | 491 | ||
| 492 | static inline void tasklet_unlock(struct tasklet_struct *t) | 492 | static inline void tasklet_unlock(struct tasklet_struct *t) |
| 493 | { | 493 | { |
| 494 | smp_mb__before_clear_bit(); | 494 | smp_mb__before_atomic(); |
| 495 | clear_bit(TASKLET_STATE_RUN, &(t)->state); | 495 | clear_bit(TASKLET_STATE_RUN, &(t)->state); |
| 496 | } | 496 | } |
| 497 | 497 | ||
| @@ -539,7 +539,7 @@ static inline void tasklet_hi_schedule_first(struct tasklet_struct *t) | |||
| 539 | static inline void tasklet_disable_nosync(struct tasklet_struct *t) | 539 | static inline void tasklet_disable_nosync(struct tasklet_struct *t) |
| 540 | { | 540 | { |
| 541 | atomic_inc(&t->count); | 541 | atomic_inc(&t->count); |
| 542 | smp_mb__after_atomic_inc(); | 542 | smp_mb__after_atomic(); |
| 543 | } | 543 | } |
| 544 | 544 | ||
| 545 | static inline void tasklet_disable(struct tasklet_struct *t) | 545 | static inline void tasklet_disable(struct tasklet_struct *t) |
| @@ -551,13 +551,13 @@ static inline void tasklet_disable(struct tasklet_struct *t) | |||
| 551 | 551 | ||
| 552 | static inline void tasklet_enable(struct tasklet_struct *t) | 552 | static inline void tasklet_enable(struct tasklet_struct *t) |
| 553 | { | 553 | { |
| 554 | smp_mb__before_atomic_dec(); | 554 | smp_mb__before_atomic(); |
| 555 | atomic_dec(&t->count); | 555 | atomic_dec(&t->count); |
| 556 | } | 556 | } |
| 557 | 557 | ||
| 558 | static inline void tasklet_hi_enable(struct tasklet_struct *t) | 558 | static inline void tasklet_hi_enable(struct tasklet_struct *t) |
| 559 | { | 559 | { |
| 560 | smp_mb__before_atomic_dec(); | 560 | smp_mb__before_atomic(); |
| 561 | atomic_dec(&t->count); | 561 | atomic_dec(&t->count); |
| 562 | } | 562 | } |
| 563 | 563 | ||
diff --git a/include/linux/kernfs.h b/include/linux/kernfs.h index ca1be5c9136c..17aa1cce6f8e 100644 --- a/include/linux/kernfs.h +++ b/include/linux/kernfs.h | |||
| @@ -161,6 +161,10 @@ struct kernfs_root { | |||
| 161 | /* private fields, do not use outside kernfs proper */ | 161 | /* private fields, do not use outside kernfs proper */ |
| 162 | struct ida ino_ida; | 162 | struct ida ino_ida; |
| 163 | struct kernfs_syscall_ops *syscall_ops; | 163 | struct kernfs_syscall_ops *syscall_ops; |
| 164 | |||
| 165 | /* list of kernfs_super_info of this root, protected by kernfs_mutex */ | ||
| 166 | struct list_head supers; | ||
| 167 | |||
| 164 | wait_queue_head_t deactivate_waitq; | 168 | wait_queue_head_t deactivate_waitq; |
| 165 | }; | 169 | }; |
| 166 | 170 | ||
| @@ -297,8 +301,8 @@ void kernfs_notify(struct kernfs_node *kn); | |||
| 297 | 301 | ||
| 298 | const void *kernfs_super_ns(struct super_block *sb); | 302 | const void *kernfs_super_ns(struct super_block *sb); |
| 299 | struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags, | 303 | struct dentry *kernfs_mount_ns(struct file_system_type *fs_type, int flags, |
| 300 | struct kernfs_root *root, bool *new_sb_created, | 304 | struct kernfs_root *root, unsigned long magic, |
| 301 | const void *ns); | 305 | bool *new_sb_created, const void *ns); |
| 302 | void kernfs_kill_sb(struct super_block *sb); | 306 | void kernfs_kill_sb(struct super_block *sb); |
| 303 | 307 | ||
| 304 | void kernfs_init(void); | 308 | void kernfs_init(void); |
| @@ -391,7 +395,8 @@ static inline const void *kernfs_super_ns(struct super_block *sb) | |||
| 391 | 395 | ||
| 392 | static inline struct dentry * | 396 | static inline struct dentry * |
| 393 | kernfs_mount_ns(struct file_system_type *fs_type, int flags, | 397 | kernfs_mount_ns(struct file_system_type *fs_type, int flags, |
| 394 | struct kernfs_root *root, bool *new_sb_created, const void *ns) | 398 | struct kernfs_root *root, unsigned long magic, |
| 399 | bool *new_sb_created, const void *ns) | ||
| 395 | { return ERR_PTR(-ENOSYS); } | 400 | { return ERR_PTR(-ENOSYS); } |
| 396 | 401 | ||
| 397 | static inline void kernfs_kill_sb(struct super_block *sb) { } | 402 | static inline void kernfs_kill_sb(struct super_block *sb) { } |
| @@ -449,9 +454,11 @@ static inline int kernfs_rename(struct kernfs_node *kn, | |||
| 449 | 454 | ||
| 450 | static inline struct dentry * | 455 | static inline struct dentry * |
| 451 | kernfs_mount(struct file_system_type *fs_type, int flags, | 456 | kernfs_mount(struct file_system_type *fs_type, int flags, |
| 452 | struct kernfs_root *root, bool *new_sb_created) | 457 | struct kernfs_root *root, unsigned long magic, |
| 458 | bool *new_sb_created) | ||
| 453 | { | 459 | { |
| 454 | return kernfs_mount_ns(fs_type, flags, root, new_sb_created, NULL); | 460 | return kernfs_mount_ns(fs_type, flags, root, |
| 461 | magic, new_sb_created, NULL); | ||
| 455 | } | 462 | } |
| 456 | 463 | ||
| 457 | #endif /* __LINUX_KERNFS_H */ | 464 | #endif /* __LINUX_KERNFS_H */ |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index f896a33e8341..2d61b909f414 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
| @@ -32,8 +32,10 @@ | |||
| 32 | #define UEVENT_NUM_ENVP 32 /* number of env pointers */ | 32 | #define UEVENT_NUM_ENVP 32 /* number of env pointers */ |
| 33 | #define UEVENT_BUFFER_SIZE 2048 /* buffer for the variables */ | 33 | #define UEVENT_BUFFER_SIZE 2048 /* buffer for the variables */ |
| 34 | 34 | ||
| 35 | #ifdef CONFIG_UEVENT_HELPER | ||
| 35 | /* path to the userspace helper executed on an event */ | 36 | /* path to the userspace helper executed on an event */ |
| 36 | extern char uevent_helper[]; | 37 | extern char uevent_helper[]; |
| 38 | #endif | ||
| 37 | 39 | ||
| 38 | /* counter to tag the uevent, read only except for the kobject core */ | 40 | /* counter to tag the uevent, read only except for the kobject core */ |
| 39 | extern u64 uevent_seqnum; | 41 | extern u64 uevent_seqnum; |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index 7d21cf9f4380..970c68197c69 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -134,6 +134,8 @@ static inline bool is_error_page(struct page *page) | |||
| 134 | #define KVM_REQ_EPR_EXIT 20 | 134 | #define KVM_REQ_EPR_EXIT 20 |
| 135 | #define KVM_REQ_SCAN_IOAPIC 21 | 135 | #define KVM_REQ_SCAN_IOAPIC 21 |
| 136 | #define KVM_REQ_GLOBAL_CLOCK_UPDATE 22 | 136 | #define KVM_REQ_GLOBAL_CLOCK_UPDATE 22 |
| 137 | #define KVM_REQ_ENABLE_IBS 23 | ||
| 138 | #define KVM_REQ_DISABLE_IBS 24 | ||
| 137 | 139 | ||
| 138 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 | 140 | #define KVM_USERSPACE_IRQ_SOURCE_ID 0 |
| 139 | #define KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1 | 141 | #define KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1 |
| @@ -163,6 +165,7 @@ enum kvm_bus { | |||
| 163 | KVM_MMIO_BUS, | 165 | KVM_MMIO_BUS, |
| 164 | KVM_PIO_BUS, | 166 | KVM_PIO_BUS, |
| 165 | KVM_VIRTIO_CCW_NOTIFY_BUS, | 167 | KVM_VIRTIO_CCW_NOTIFY_BUS, |
| 168 | KVM_FAST_MMIO_BUS, | ||
| 166 | KVM_NR_BUSES | 169 | KVM_NR_BUSES |
| 167 | }; | 170 | }; |
| 168 | 171 | ||
| @@ -367,6 +370,7 @@ struct kvm { | |||
| 367 | struct mm_struct *mm; /* userspace tied to this vm */ | 370 | struct mm_struct *mm; /* userspace tied to this vm */ |
| 368 | struct kvm_memslots *memslots; | 371 | struct kvm_memslots *memslots; |
| 369 | struct srcu_struct srcu; | 372 | struct srcu_struct srcu; |
| 373 | struct srcu_struct irq_srcu; | ||
| 370 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE | 374 | #ifdef CONFIG_KVM_APIC_ARCHITECTURE |
| 371 | u32 bsp_vcpu_id; | 375 | u32 bsp_vcpu_id; |
| 372 | #endif | 376 | #endif |
| @@ -410,9 +414,7 @@ struct kvm { | |||
| 410 | unsigned long mmu_notifier_seq; | 414 | unsigned long mmu_notifier_seq; |
| 411 | long mmu_notifier_count; | 415 | long mmu_notifier_count; |
| 412 | #endif | 416 | #endif |
| 413 | /* Protected by mmu_lock */ | 417 | long tlbs_dirty; |
| 414 | bool tlbs_dirty; | ||
| 415 | |||
| 416 | struct list_head devices; | 418 | struct list_head devices; |
| 417 | }; | 419 | }; |
| 418 | 420 | ||
| @@ -879,6 +881,13 @@ static inline hpa_t pfn_to_hpa(pfn_t pfn) | |||
| 879 | return (hpa_t)pfn << PAGE_SHIFT; | 881 | return (hpa_t)pfn << PAGE_SHIFT; |
| 880 | } | 882 | } |
| 881 | 883 | ||
| 884 | static inline bool kvm_is_error_gpa(struct kvm *kvm, gpa_t gpa) | ||
| 885 | { | ||
| 886 | unsigned long hva = gfn_to_hva(kvm, gpa_to_gfn(gpa)); | ||
| 887 | |||
| 888 | return kvm_is_error_hva(hva); | ||
| 889 | } | ||
| 890 | |||
| 882 | static inline void kvm_migrate_timers(struct kvm_vcpu *vcpu) | 891 | static inline void kvm_migrate_timers(struct kvm_vcpu *vcpu) |
| 883 | { | 892 | { |
| 884 | set_bit(KVM_REQ_MIGRATE_TIMER, &vcpu->requests); | 893 | set_bit(KVM_REQ_MIGRATE_TIMER, &vcpu->requests); |
diff --git a/include/linux/mbus.h b/include/linux/mbus.h index 345b8c53b897..550c88fb0267 100644 --- a/include/linux/mbus.h +++ b/include/linux/mbus.h | |||
| @@ -73,6 +73,6 @@ int mvebu_mbus_del_window(phys_addr_t base, size_t size); | |||
| 73 | int mvebu_mbus_init(const char *soc, phys_addr_t mbus_phys_base, | 73 | int mvebu_mbus_init(const char *soc, phys_addr_t mbus_phys_base, |
| 74 | size_t mbus_size, phys_addr_t sdram_phys_base, | 74 | size_t mbus_size, phys_addr_t sdram_phys_base, |
| 75 | size_t sdram_size); | 75 | size_t sdram_size); |
| 76 | int mvebu_mbus_dt_init(void); | 76 | int mvebu_mbus_dt_init(bool is_coherent); |
| 77 | 77 | ||
| 78 | #endif /* __LINUX_MBUS_H */ | 78 | #endif /* __LINUX_MBUS_H */ |
diff --git a/include/linux/mcb.h b/include/linux/mcb.h index 2db284d14064..ed06e15a36aa 100644 --- a/include/linux/mcb.h +++ b/include/linux/mcb.h | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/irqreturn.h> | 16 | #include <linux/irqreturn.h> |
| 17 | 17 | ||
| 18 | struct mcb_driver; | 18 | struct mcb_driver; |
| 19 | struct mcb_device; | ||
| 19 | 20 | ||
| 20 | /** | 21 | /** |
| 21 | * struct mcb_bus - MEN Chameleon Bus | 22 | * struct mcb_bus - MEN Chameleon Bus |
| @@ -23,11 +24,14 @@ struct mcb_driver; | |||
| 23 | * @dev: pointer to carrier device | 24 | * @dev: pointer to carrier device |
| 24 | * @children: the child busses | 25 | * @children: the child busses |
| 25 | * @bus_nr: mcb bus number | 26 | * @bus_nr: mcb bus number |
| 27 | * @get_irq: callback to get IRQ number | ||
| 26 | */ | 28 | */ |
| 27 | struct mcb_bus { | 29 | struct mcb_bus { |
| 28 | struct list_head children; | 30 | struct list_head children; |
| 29 | struct device dev; | 31 | struct device dev; |
| 32 | struct device *carrier; | ||
| 30 | int bus_nr; | 33 | int bus_nr; |
| 34 | int (*get_irq)(struct mcb_device *dev); | ||
| 31 | }; | 35 | }; |
| 32 | #define to_mcb_bus(b) container_of((b), struct mcb_bus, dev) | 36 | #define to_mcb_bus(b) container_of((b), struct mcb_bus, dev) |
| 33 | 37 | ||
| @@ -105,7 +109,7 @@ extern void mcb_unregister_driver(struct mcb_driver *driver); | |||
| 105 | module_driver(__mcb_driver, mcb_register_driver, mcb_unregister_driver); | 109 | module_driver(__mcb_driver, mcb_register_driver, mcb_unregister_driver); |
| 106 | extern void mcb_bus_add_devices(const struct mcb_bus *bus); | 110 | extern void mcb_bus_add_devices(const struct mcb_bus *bus); |
| 107 | extern int mcb_device_register(struct mcb_bus *bus, struct mcb_device *dev); | 111 | extern int mcb_device_register(struct mcb_bus *bus, struct mcb_device *dev); |
| 108 | extern struct mcb_bus *mcb_alloc_bus(void); | 112 | extern struct mcb_bus *mcb_alloc_bus(struct device *carrier); |
| 109 | extern struct mcb_bus *mcb_bus_get(struct mcb_bus *bus); | 113 | extern struct mcb_bus *mcb_bus_get(struct mcb_bus *bus); |
| 110 | extern void mcb_bus_put(struct mcb_bus *bus); | 114 | extern void mcb_bus_put(struct mcb_bus *bus); |
| 111 | extern struct mcb_device *mcb_alloc_dev(struct mcb_bus *bus); | 115 | extern struct mcb_device *mcb_alloc_dev(struct mcb_bus *bus); |
diff --git a/include/linux/memblock.h b/include/linux/memblock.h index 8a20a51ed42d..73dc382e72d8 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/mm.h> | 18 | #include <linux/mm.h> |
| 19 | 19 | ||
| 20 | #define INIT_MEMBLOCK_REGIONS 128 | 20 | #define INIT_MEMBLOCK_REGIONS 128 |
| 21 | #define INIT_PHYSMEM_REGIONS 4 | ||
| 21 | 22 | ||
| 22 | /* Definition of memblock flags. */ | 23 | /* Definition of memblock flags. */ |
| 23 | #define MEMBLOCK_HOTPLUG 0x1 /* hotpluggable region */ | 24 | #define MEMBLOCK_HOTPLUG 0x1 /* hotpluggable region */ |
| @@ -43,6 +44,9 @@ struct memblock { | |||
| 43 | phys_addr_t current_limit; | 44 | phys_addr_t current_limit; |
| 44 | struct memblock_type memory; | 45 | struct memblock_type memory; |
| 45 | struct memblock_type reserved; | 46 | struct memblock_type reserved; |
| 47 | #ifdef CONFIG_HAVE_MEMBLOCK_PHYS_MAP | ||
| 48 | struct memblock_type physmem; | ||
| 49 | #endif | ||
| 46 | }; | 50 | }; |
| 47 | 51 | ||
| 48 | extern struct memblock memblock; | 52 | extern struct memblock memblock; |
| @@ -71,6 +75,63 @@ int memblock_reserve(phys_addr_t base, phys_addr_t size); | |||
| 71 | void memblock_trim_memory(phys_addr_t align); | 75 | void memblock_trim_memory(phys_addr_t align); |
| 72 | int memblock_mark_hotplug(phys_addr_t base, phys_addr_t size); | 76 | int memblock_mark_hotplug(phys_addr_t base, phys_addr_t size); |
| 73 | int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size); | 77 | int memblock_clear_hotplug(phys_addr_t base, phys_addr_t size); |
| 78 | |||
| 79 | /* Low level functions */ | ||
| 80 | int memblock_add_range(struct memblock_type *type, | ||
| 81 | phys_addr_t base, phys_addr_t size, | ||
| 82 | int nid, unsigned long flags); | ||
| 83 | |||
| 84 | int memblock_remove_range(struct memblock_type *type, | ||
| 85 | phys_addr_t base, | ||
| 86 | phys_addr_t size); | ||
| 87 | |||
| 88 | void __next_mem_range(u64 *idx, int nid, struct memblock_type *type_a, | ||
| 89 | struct memblock_type *type_b, phys_addr_t *out_start, | ||
| 90 | phys_addr_t *out_end, int *out_nid); | ||
| 91 | |||
| 92 | void __next_mem_range_rev(u64 *idx, int nid, struct memblock_type *type_a, | ||
| 93 | struct memblock_type *type_b, phys_addr_t *out_start, | ||
| 94 | phys_addr_t *out_end, int *out_nid); | ||
| 95 | |||
| 96 | /** | ||
| 97 | * for_each_mem_range - iterate through memblock areas from type_a and not | ||
| 98 | * included in type_b. Or just type_a if type_b is NULL. | ||
| 99 | * @i: u64 used as loop variable | ||
| 100 | * @type_a: ptr to memblock_type to iterate | ||
| 101 | * @type_b: ptr to memblock_type which excludes from the iteration | ||
| 102 | * @nid: node selector, %NUMA_NO_NODE for all nodes | ||
| 103 | * @p_start: ptr to phys_addr_t for start address of the range, can be %NULL | ||
| 104 | * @p_end: ptr to phys_addr_t for end address of the range, can be %NULL | ||
| 105 | * @p_nid: ptr to int for nid of the range, can be %NULL | ||
| 106 | */ | ||
| 107 | #define for_each_mem_range(i, type_a, type_b, nid, \ | ||
| 108 | p_start, p_end, p_nid) \ | ||
| 109 | for (i = 0, __next_mem_range(&i, nid, type_a, type_b, \ | ||
| 110 | p_start, p_end, p_nid); \ | ||
| 111 | i != (u64)ULLONG_MAX; \ | ||
| 112 | __next_mem_range(&i, nid, type_a, type_b, \ | ||
| 113 | p_start, p_end, p_nid)) | ||
| 114 | |||
| 115 | /** | ||
| 116 | * for_each_mem_range_rev - reverse iterate through memblock areas from | ||
| 117 | * type_a and not included in type_b. Or just type_a if type_b is NULL. | ||
| 118 | * @i: u64 used as loop variable | ||
| 119 | * @type_a: ptr to memblock_type to iterate | ||
| 120 | * @type_b: ptr to memblock_type which excludes from the iteration | ||
| 121 | * @nid: node selector, %NUMA_NO_NODE for all nodes | ||
| 122 | * @p_start: ptr to phys_addr_t for start address of the range, can be %NULL | ||
| 123 | * @p_end: ptr to phys_addr_t for end address of the range, can be %NULL | ||
| 124 | * @p_nid: ptr to int for nid of the range, can be %NULL | ||
| 125 | */ | ||
| 126 | #define for_each_mem_range_rev(i, type_a, type_b, nid, \ | ||
| 127 | p_start, p_end, p_nid) \ | ||
| 128 | for (i = (u64)ULLONG_MAX, \ | ||
| 129 | __next_mem_range_rev(&i, nid, type_a, type_b, \ | ||
| 130 | p_start, p_end, p_nid); \ | ||
| 131 | i != (u64)ULLONG_MAX; \ | ||
| 132 | __next_mem_range_rev(&i, nid, type_a, type_b, \ | ||
| 133 | p_start, p_end, p_nid)) | ||
| 134 | |||
| 74 | #ifdef CONFIG_MOVABLE_NODE | 135 | #ifdef CONFIG_MOVABLE_NODE |
| 75 | static inline bool memblock_is_hotpluggable(struct memblock_region *m) | 136 | static inline bool memblock_is_hotpluggable(struct memblock_region *m) |
| 76 | { | 137 | { |
| @@ -113,9 +174,6 @@ void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, | |||
| 113 | i >= 0; __next_mem_pfn_range(&i, nid, p_start, p_end, p_nid)) | 174 | i >= 0; __next_mem_pfn_range(&i, nid, p_start, p_end, p_nid)) |
| 114 | #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ | 175 | #endif /* CONFIG_HAVE_MEMBLOCK_NODE_MAP */ |
| 115 | 176 | ||
| 116 | void __next_free_mem_range(u64 *idx, int nid, phys_addr_t *out_start, | ||
| 117 | phys_addr_t *out_end, int *out_nid); | ||
| 118 | |||
| 119 | /** | 177 | /** |
| 120 | * for_each_free_mem_range - iterate through free memblock areas | 178 | * for_each_free_mem_range - iterate through free memblock areas |
| 121 | * @i: u64 used as loop variable | 179 | * @i: u64 used as loop variable |
| @@ -128,13 +186,8 @@ void __next_free_mem_range(u64 *idx, int nid, phys_addr_t *out_start, | |||
| 128 | * soon as memblock is initialized. | 186 | * soon as memblock is initialized. |
| 129 | */ | 187 | */ |
| 130 | #define for_each_free_mem_range(i, nid, p_start, p_end, p_nid) \ | 188 | #define for_each_free_mem_range(i, nid, p_start, p_end, p_nid) \ |
| 131 | for (i = 0, \ | 189 | for_each_mem_range(i, &memblock.memory, &memblock.reserved, \ |
| 132 | __next_free_mem_range(&i, nid, p_start, p_end, p_nid); \ | 190 | nid, p_start, p_end, p_nid) |
| 133 | i != (u64)ULLONG_MAX; \ | ||
| 134 | __next_free_mem_range(&i, nid, p_start, p_end, p_nid)) | ||
| 135 | |||
| 136 | void __next_free_mem_range_rev(u64 *idx, int nid, phys_addr_t *out_start, | ||
| 137 | phys_addr_t *out_end, int *out_nid); | ||
| 138 | 191 | ||
| 139 | /** | 192 | /** |
| 140 | * for_each_free_mem_range_reverse - rev-iterate through free memblock areas | 193 | * for_each_free_mem_range_reverse - rev-iterate through free memblock areas |
| @@ -148,10 +201,8 @@ void __next_free_mem_range_rev(u64 *idx, int nid, phys_addr_t *out_start, | |||
| 148 | * order. Available as soon as memblock is initialized. | 201 | * order. Available as soon as memblock is initialized. |
| 149 | */ | 202 | */ |
| 150 | #define for_each_free_mem_range_reverse(i, nid, p_start, p_end, p_nid) \ | 203 | #define for_each_free_mem_range_reverse(i, nid, p_start, p_end, p_nid) \ |
| 151 | for (i = (u64)ULLONG_MAX, \ | 204 | for_each_mem_range_rev(i, &memblock.memory, &memblock.reserved, \ |
| 152 | __next_free_mem_range_rev(&i, nid, p_start, p_end, p_nid); \ | 205 | nid, p_start, p_end, p_nid) |
| 153 | i != (u64)ULLONG_MAX; \ | ||
| 154 | __next_free_mem_range_rev(&i, nid, p_start, p_end, p_nid)) | ||
| 155 | 206 | ||
| 156 | static inline void memblock_set_region_flags(struct memblock_region *r, | 207 | static inline void memblock_set_region_flags(struct memblock_region *r, |
| 157 | unsigned long flags) | 208 | unsigned long flags) |
diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h index 5cf8b91ce996..6d9371f88875 100644 --- a/include/linux/mfd/arizona/core.h +++ b/include/linux/mfd/arizona/core.h | |||
| @@ -124,4 +124,7 @@ int wm5102_patch(struct arizona *arizona); | |||
| 124 | int wm5110_patch(struct arizona *arizona); | 124 | int wm5110_patch(struct arizona *arizona); |
| 125 | int wm8997_patch(struct arizona *arizona); | 125 | int wm8997_patch(struct arizona *arizona); |
| 126 | 126 | ||
| 127 | extern int arizona_of_get_named_gpio(struct arizona *arizona, const char *prop, | ||
| 128 | bool mandatory); | ||
| 129 | |||
| 127 | #endif | 130 | #endif |
diff --git a/include/linux/mfd/bcm590xx.h b/include/linux/mfd/bcm590xx.h index 434df2d4e587..267aedee1c7a 100644 --- a/include/linux/mfd/bcm590xx.h +++ b/include/linux/mfd/bcm590xx.h | |||
| @@ -19,12 +19,15 @@ | |||
| 19 | #include <linux/regmap.h> | 19 | #include <linux/regmap.h> |
| 20 | 20 | ||
| 21 | /* max register address */ | 21 | /* max register address */ |
| 22 | #define BCM590XX_MAX_REGISTER 0xe7 | 22 | #define BCM590XX_MAX_REGISTER_PRI 0xe7 |
| 23 | #define BCM590XX_MAX_REGISTER_SEC 0xf0 | ||
| 23 | 24 | ||
| 24 | struct bcm590xx { | 25 | struct bcm590xx { |
| 25 | struct device *dev; | 26 | struct device *dev; |
| 26 | struct i2c_client *i2c_client; | 27 | struct i2c_client *i2c_pri; |
| 27 | struct regmap *regmap; | 28 | struct i2c_client *i2c_sec; |
| 29 | struct regmap *regmap_pri; | ||
| 30 | struct regmap *regmap_sec; | ||
| 28 | unsigned int id; | 31 | unsigned int id; |
| 29 | }; | 32 | }; |
| 30 | 33 | ||
diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index bdba8c61207b..f543de91ce19 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h | |||
| @@ -63,7 +63,7 @@ struct mfd_cell { | |||
| 63 | /* A list of regulator supplies that should be mapped to the MFD | 63 | /* A list of regulator supplies that should be mapped to the MFD |
| 64 | * device rather than the child device when requested | 64 | * device rather than the child device when requested |
| 65 | */ | 65 | */ |
| 66 | const char **parent_supplies; | 66 | const char * const *parent_supplies; |
| 67 | int num_parent_supplies; | 67 | int num_parent_supplies; |
| 68 | }; | 68 | }; |
| 69 | 69 | ||
diff --git a/include/linux/mfd/max14577-private.h b/include/linux/mfd/max14577-private.h index c9b332fb0d5d..499253604026 100644 --- a/include/linux/mfd/max14577-private.h +++ b/include/linux/mfd/max14577-private.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * max14577-private.h - Common API for the Maxim 14577 internal sub chip | 2 | * max14577-private.h - Common API for the Maxim 14577/77836 internal sub chip |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2013 Samsung Electrnoics | 4 | * Copyright (C) 2014 Samsung Electrnoics |
| 5 | * Chanwoo Choi <cw00.choi@samsung.com> | 5 | * Chanwoo Choi <cw00.choi@samsung.com> |
| 6 | * Krzysztof Kozlowski <k.kozlowski@samsung.com> | 6 | * Krzysztof Kozlowski <k.kozlowski@samsung.com> |
| 7 | * | 7 | * |
| @@ -22,9 +22,19 @@ | |||
| 22 | #include <linux/i2c.h> | 22 | #include <linux/i2c.h> |
| 23 | #include <linux/regmap.h> | 23 | #include <linux/regmap.h> |
| 24 | 24 | ||
| 25 | #define MAX14577_REG_INVALID (0xff) | 25 | #define I2C_ADDR_PMIC (0x46 >> 1) |
| 26 | #define I2C_ADDR_MUIC (0x4A >> 1) | ||
| 27 | #define I2C_ADDR_FG (0x6C >> 1) | ||
| 26 | 28 | ||
| 27 | /* Slave addr = 0x4A: Interrupt */ | 29 | enum maxim_device_type { |
| 30 | MAXIM_DEVICE_TYPE_UNKNOWN = 0, | ||
| 31 | MAXIM_DEVICE_TYPE_MAX14577, | ||
| 32 | MAXIM_DEVICE_TYPE_MAX77836, | ||
| 33 | |||
| 34 | MAXIM_DEVICE_TYPE_NUM, | ||
| 35 | }; | ||
| 36 | |||
| 37 | /* Slave addr = 0x4A: MUIC and Charger */ | ||
| 28 | enum max14577_reg { | 38 | enum max14577_reg { |
| 29 | MAX14577_REG_DEVICEID = 0x00, | 39 | MAX14577_REG_DEVICEID = 0x00, |
| 30 | MAX14577_REG_INT1 = 0x01, | 40 | MAX14577_REG_INT1 = 0x01, |
| @@ -74,20 +84,22 @@ enum max14577_muic_charger_type { | |||
| 74 | }; | 84 | }; |
| 75 | 85 | ||
| 76 | /* MAX14577 interrupts */ | 86 | /* MAX14577 interrupts */ |
| 77 | #define INT1_ADC_MASK (0x1 << 0) | 87 | #define MAX14577_INT1_ADC_MASK BIT(0) |
| 78 | #define INT1_ADCLOW_MASK (0x1 << 1) | 88 | #define MAX14577_INT1_ADCLOW_MASK BIT(1) |
| 79 | #define INT1_ADCERR_MASK (0x1 << 2) | 89 | #define MAX14577_INT1_ADCERR_MASK BIT(2) |
| 80 | 90 | #define MAX77836_INT1_ADC1K_MASK BIT(3) | |
| 81 | #define INT2_CHGTYP_MASK (0x1 << 0) | 91 | |
| 82 | #define INT2_CHGDETRUN_MASK (0x1 << 1) | 92 | #define MAX14577_INT2_CHGTYP_MASK BIT(0) |
| 83 | #define INT2_DCDTMR_MASK (0x1 << 2) | 93 | #define MAX14577_INT2_CHGDETRUN_MASK BIT(1) |
| 84 | #define INT2_DBCHG_MASK (0x1 << 3) | 94 | #define MAX14577_INT2_DCDTMR_MASK BIT(2) |
| 85 | #define INT2_VBVOLT_MASK (0x1 << 4) | 95 | #define MAX14577_INT2_DBCHG_MASK BIT(3) |
| 86 | 96 | #define MAX14577_INT2_VBVOLT_MASK BIT(4) | |
| 87 | #define INT3_EOC_MASK (0x1 << 0) | 97 | #define MAX77836_INT2_VIDRM_MASK BIT(5) |
| 88 | #define INT3_CGMBC_MASK (0x1 << 1) | 98 | |
| 89 | #define INT3_OVP_MASK (0x1 << 2) | 99 | #define MAX14577_INT3_EOC_MASK BIT(0) |
| 90 | #define INT3_MBCCHGERR_MASK (0x1 << 3) | 100 | #define MAX14577_INT3_CGMBC_MASK BIT(1) |
| 101 | #define MAX14577_INT3_OVP_MASK BIT(2) | ||
| 102 | #define MAX14577_INT3_MBCCHGERR_MASK BIT(3) | ||
| 91 | 103 | ||
| 92 | /* MAX14577 DEVICE ID register */ | 104 | /* MAX14577 DEVICE ID register */ |
| 93 | #define DEVID_VENDORID_SHIFT 0 | 105 | #define DEVID_VENDORID_SHIFT 0 |
| @@ -99,9 +111,11 @@ enum max14577_muic_charger_type { | |||
| 99 | #define STATUS1_ADC_SHIFT 0 | 111 | #define STATUS1_ADC_SHIFT 0 |
| 100 | #define STATUS1_ADCLOW_SHIFT 5 | 112 | #define STATUS1_ADCLOW_SHIFT 5 |
| 101 | #define STATUS1_ADCERR_SHIFT 6 | 113 | #define STATUS1_ADCERR_SHIFT 6 |
| 114 | #define MAX77836_STATUS1_ADC1K_SHIFT 7 | ||
| 102 | #define STATUS1_ADC_MASK (0x1f << STATUS1_ADC_SHIFT) | 115 | #define STATUS1_ADC_MASK (0x1f << STATUS1_ADC_SHIFT) |
| 103 | #define STATUS1_ADCLOW_MASK (0x1 << STATUS1_ADCLOW_SHIFT) | 116 | #define STATUS1_ADCLOW_MASK BIT(STATUS1_ADCLOW_SHIFT) |
| 104 | #define STATUS1_ADCERR_MASK (0x1 << STATUS1_ADCERR_SHIFT) | 117 | #define STATUS1_ADCERR_MASK BIT(STATUS1_ADCERR_SHIFT) |
| 118 | #define MAX77836_STATUS1_ADC1K_MASK BIT(MAX77836_STATUS1_ADC1K_SHIFT) | ||
| 105 | 119 | ||
| 106 | /* MAX14577 STATUS2 register */ | 120 | /* MAX14577 STATUS2 register */ |
| 107 | #define STATUS2_CHGTYP_SHIFT 0 | 121 | #define STATUS2_CHGTYP_SHIFT 0 |
| @@ -109,11 +123,13 @@ enum max14577_muic_charger_type { | |||
| 109 | #define STATUS2_DCDTMR_SHIFT 4 | 123 | #define STATUS2_DCDTMR_SHIFT 4 |
| 110 | #define STATUS2_DBCHG_SHIFT 5 | 124 | #define STATUS2_DBCHG_SHIFT 5 |
| 111 | #define STATUS2_VBVOLT_SHIFT 6 | 125 | #define STATUS2_VBVOLT_SHIFT 6 |
| 126 | #define MAX77836_STATUS2_VIDRM_SHIFT 7 | ||
| 112 | #define STATUS2_CHGTYP_MASK (0x7 << STATUS2_CHGTYP_SHIFT) | 127 | #define STATUS2_CHGTYP_MASK (0x7 << STATUS2_CHGTYP_SHIFT) |
| 113 | #define STATUS2_CHGDETRUN_MASK (0x1 << STATUS2_CHGDETRUN_SHIFT) | 128 | #define STATUS2_CHGDETRUN_MASK BIT(STATUS2_CHGDETRUN_SHIFT) |
| 114 | #define STATUS2_DCDTMR_MASK (0x1 << STATUS2_DCDTMR_SHIFT) | 129 | #define STATUS2_DCDTMR_MASK BIT(STATUS2_DCDTMR_SHIFT) |
| 115 | #define STATUS2_DBCHG_MASK (0x1 << STATUS2_DBCHG_SHIFT) | 130 | #define STATUS2_DBCHG_MASK BIT(STATUS2_DBCHG_SHIFT) |
| 116 | #define STATUS2_VBVOLT_MASK (0x1 << STATUS2_VBVOLT_SHIFT) | 131 | #define STATUS2_VBVOLT_MASK BIT(STATUS2_VBVOLT_SHIFT) |
| 132 | #define MAX77836_STATUS2_VIDRM_MASK BIT(MAX77836_STATUS2_VIDRM_SHIFT) | ||
| 117 | 133 | ||
| 118 | /* MAX14577 CONTROL1 register */ | 134 | /* MAX14577 CONTROL1 register */ |
| 119 | #define COMN1SW_SHIFT 0 | 135 | #define COMN1SW_SHIFT 0 |
| @@ -122,8 +138,8 @@ enum max14577_muic_charger_type { | |||
| 122 | #define IDBEN_SHIFT 7 | 138 | #define IDBEN_SHIFT 7 |
| 123 | #define COMN1SW_MASK (0x7 << COMN1SW_SHIFT) | 139 | #define COMN1SW_MASK (0x7 << COMN1SW_SHIFT) |
| 124 | #define COMP2SW_MASK (0x7 << COMP2SW_SHIFT) | 140 | #define COMP2SW_MASK (0x7 << COMP2SW_SHIFT) |
| 125 | #define MICEN_MASK (0x1 << MICEN_SHIFT) | 141 | #define MICEN_MASK BIT(MICEN_SHIFT) |
| 126 | #define IDBEN_MASK (0x1 << IDBEN_SHIFT) | 142 | #define IDBEN_MASK BIT(IDBEN_SHIFT) |
| 127 | #define CLEAR_IDBEN_MICEN_MASK (COMN1SW_MASK | COMP2SW_MASK) | 143 | #define CLEAR_IDBEN_MICEN_MASK (COMN1SW_MASK | COMP2SW_MASK) |
| 128 | #define CTRL1_SW_USB ((1 << COMP2SW_SHIFT) \ | 144 | #define CTRL1_SW_USB ((1 << COMP2SW_SHIFT) \ |
| 129 | | (1 << COMN1SW_SHIFT)) | 145 | | (1 << COMN1SW_SHIFT)) |
| @@ -143,14 +159,14 @@ enum max14577_muic_charger_type { | |||
| 143 | #define CTRL2_ACCDET_SHIFT (5) | 159 | #define CTRL2_ACCDET_SHIFT (5) |
| 144 | #define CTRL2_USBCPINT_SHIFT (6) | 160 | #define CTRL2_USBCPINT_SHIFT (6) |
| 145 | #define CTRL2_RCPS_SHIFT (7) | 161 | #define CTRL2_RCPS_SHIFT (7) |
| 146 | #define CTRL2_LOWPWR_MASK (0x1 << CTRL2_LOWPWR_SHIFT) | 162 | #define CTRL2_LOWPWR_MASK BIT(CTRL2_LOWPWR_SHIFT) |
| 147 | #define CTRL2_ADCEN_MASK (0x1 << CTRL2_ADCEN_SHIFT) | 163 | #define CTRL2_ADCEN_MASK BIT(CTRL2_ADCEN_SHIFT) |
| 148 | #define CTRL2_CPEN_MASK (0x1 << CTRL2_CPEN_SHIFT) | 164 | #define CTRL2_CPEN_MASK BIT(CTRL2_CPEN_SHIFT) |
| 149 | #define CTRL2_SFOUTASRT_MASK (0x1 << CTRL2_SFOUTASRT_SHIFT) | 165 | #define CTRL2_SFOUTASRT_MASK BIT(CTRL2_SFOUTASRT_SHIFT) |
| 150 | #define CTRL2_SFOUTORD_MASK (0x1 << CTRL2_SFOUTORD_SHIFT) | 166 | #define CTRL2_SFOUTORD_MASK BIT(CTRL2_SFOUTORD_SHIFT) |
| 151 | #define CTRL2_ACCDET_MASK (0x1 << CTRL2_ACCDET_SHIFT) | 167 | #define CTRL2_ACCDET_MASK BIT(CTRL2_ACCDET_SHIFT) |
| 152 | #define CTRL2_USBCPINT_MASK (0x1 << CTRL2_USBCPINT_SHIFT) | 168 | #define CTRL2_USBCPINT_MASK BIT(CTRL2_USBCPINT_SHIFT) |
| 153 | #define CTRL2_RCPS_MASK (0x1 << CTR2_RCPS_SHIFT) | 169 | #define CTRL2_RCPS_MASK BIT(CTRL2_RCPS_SHIFT) |
| 154 | 170 | ||
| 155 | #define CTRL2_CPEN1_LOWPWR0 ((1 << CTRL2_CPEN_SHIFT) | \ | 171 | #define CTRL2_CPEN1_LOWPWR0 ((1 << CTRL2_CPEN_SHIFT) | \ |
| 156 | (0 << CTRL2_LOWPWR_SHIFT)) | 172 | (0 << CTRL2_LOWPWR_SHIFT)) |
| @@ -198,14 +214,14 @@ enum max14577_charger_reg { | |||
| 198 | #define CDETCTRL1_DBEXIT_SHIFT 5 | 214 | #define CDETCTRL1_DBEXIT_SHIFT 5 |
| 199 | #define CDETCTRL1_DBIDLE_SHIFT 6 | 215 | #define CDETCTRL1_DBIDLE_SHIFT 6 |
| 200 | #define CDETCTRL1_CDPDET_SHIFT 7 | 216 | #define CDETCTRL1_CDPDET_SHIFT 7 |
| 201 | #define CDETCTRL1_CHGDETEN_MASK (0x1 << CDETCTRL1_CHGDETEN_SHIFT) | 217 | #define CDETCTRL1_CHGDETEN_MASK BIT(CDETCTRL1_CHGDETEN_SHIFT) |
| 202 | #define CDETCTRL1_CHGTYPMAN_MASK (0x1 << CDETCTRL1_CHGTYPMAN_SHIFT) | 218 | #define CDETCTRL1_CHGTYPMAN_MASK BIT(CDETCTRL1_CHGTYPMAN_SHIFT) |
| 203 | #define CDETCTRL1_DCDEN_MASK (0x1 << CDETCTRL1_DCDEN_SHIFT) | 219 | #define CDETCTRL1_DCDEN_MASK BIT(CDETCTRL1_DCDEN_SHIFT) |
| 204 | #define CDETCTRL1_DCD2SCT_MASK (0x1 << CDETCTRL1_DCD2SCT_SHIFT) | 220 | #define CDETCTRL1_DCD2SCT_MASK BIT(CDETCTRL1_DCD2SCT_SHIFT) |
| 205 | #define CDETCTRL1_DCHKTM_MASK (0x1 << CDETCTRL1_DCHKTM_SHIFT) | 221 | #define CDETCTRL1_DCHKTM_MASK BIT(CDETCTRL1_DCHKTM_SHIFT) |
| 206 | #define CDETCTRL1_DBEXIT_MASK (0x1 << CDETCTRL1_DBEXIT_SHIFT) | 222 | #define CDETCTRL1_DBEXIT_MASK BIT(CDETCTRL1_DBEXIT_SHIFT) |
| 207 | #define CDETCTRL1_DBIDLE_MASK (0x1 << CDETCTRL1_DBIDLE_SHIFT) | 223 | #define CDETCTRL1_DBIDLE_MASK BIT(CDETCTRL1_DBIDLE_SHIFT) |
| 208 | #define CDETCTRL1_CDPDET_MASK (0x1 << CDETCTRL1_CDPDET_SHIFT) | 224 | #define CDETCTRL1_CDPDET_MASK BIT(CDETCTRL1_CDPDET_SHIFT) |
| 209 | 225 | ||
| 210 | /* MAX14577 CHGCTRL1 register */ | 226 | /* MAX14577 CHGCTRL1 register */ |
| 211 | #define CHGCTRL1_TCHW_SHIFT 4 | 227 | #define CHGCTRL1_TCHW_SHIFT 4 |
| @@ -213,9 +229,9 @@ enum max14577_charger_reg { | |||
| 213 | 229 | ||
| 214 | /* MAX14577 CHGCTRL2 register */ | 230 | /* MAX14577 CHGCTRL2 register */ |
| 215 | #define CHGCTRL2_MBCHOSTEN_SHIFT 6 | 231 | #define CHGCTRL2_MBCHOSTEN_SHIFT 6 |
| 216 | #define CHGCTRL2_MBCHOSTEN_MASK (0x1 << CHGCTRL2_MBCHOSTEN_SHIFT) | 232 | #define CHGCTRL2_MBCHOSTEN_MASK BIT(CHGCTRL2_MBCHOSTEN_SHIFT) |
| 217 | #define CHGCTRL2_VCHGR_RC_SHIFT 7 | 233 | #define CHGCTRL2_VCHGR_RC_SHIFT 7 |
| 218 | #define CHGCTRL2_VCHGR_RC_MASK (0x1 << CHGCTRL2_VCHGR_RC_SHIFT) | 234 | #define CHGCTRL2_VCHGR_RC_MASK BIT(CHGCTRL2_VCHGR_RC_SHIFT) |
| 219 | 235 | ||
| 220 | /* MAX14577 CHGCTRL3 register */ | 236 | /* MAX14577 CHGCTRL3 register */ |
| 221 | #define CHGCTRL3_MBCCVWRC_SHIFT 0 | 237 | #define CHGCTRL3_MBCCVWRC_SHIFT 0 |
| @@ -225,7 +241,7 @@ enum max14577_charger_reg { | |||
| 225 | #define CHGCTRL4_MBCICHWRCH_SHIFT 0 | 241 | #define CHGCTRL4_MBCICHWRCH_SHIFT 0 |
| 226 | #define CHGCTRL4_MBCICHWRCH_MASK (0xf << CHGCTRL4_MBCICHWRCH_SHIFT) | 242 | #define CHGCTRL4_MBCICHWRCH_MASK (0xf << CHGCTRL4_MBCICHWRCH_SHIFT) |
| 227 | #define CHGCTRL4_MBCICHWRCL_SHIFT 4 | 243 | #define CHGCTRL4_MBCICHWRCL_SHIFT 4 |
| 228 | #define CHGCTRL4_MBCICHWRCL_MASK (0x1 << CHGCTRL4_MBCICHWRCL_SHIFT) | 244 | #define CHGCTRL4_MBCICHWRCL_MASK BIT(CHGCTRL4_MBCICHWRCL_SHIFT) |
| 229 | 245 | ||
| 230 | /* MAX14577 CHGCTRL5 register */ | 246 | /* MAX14577 CHGCTRL5 register */ |
| 231 | #define CHGCTRL5_EOCS_SHIFT 0 | 247 | #define CHGCTRL5_EOCS_SHIFT 0 |
| @@ -233,7 +249,7 @@ enum max14577_charger_reg { | |||
| 233 | 249 | ||
| 234 | /* MAX14577 CHGCTRL6 register */ | 250 | /* MAX14577 CHGCTRL6 register */ |
| 235 | #define CHGCTRL6_AUTOSTOP_SHIFT 5 | 251 | #define CHGCTRL6_AUTOSTOP_SHIFT 5 |
| 236 | #define CHGCTRL6_AUTOSTOP_MASK (0x1 << CHGCTRL6_AUTOSTOP_SHIFT) | 252 | #define CHGCTRL6_AUTOSTOP_MASK BIT(CHGCTRL6_AUTOSTOP_SHIFT) |
| 237 | 253 | ||
| 238 | /* MAX14577 CHGCTRL7 register */ | 254 | /* MAX14577 CHGCTRL7 register */ |
| 239 | #define CHGCTRL7_OTPCGHCVS_SHIFT 0 | 255 | #define CHGCTRL7_OTPCGHCVS_SHIFT 0 |
| @@ -245,14 +261,111 @@ enum max14577_charger_reg { | |||
| 245 | #define MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_STEP 50000 | 261 | #define MAX14577_REGULATOR_CURRENT_LIMIT_HIGH_STEP 50000 |
| 246 | #define MAX14577_REGULATOR_CURRENT_LIMIT_MAX 950000 | 262 | #define MAX14577_REGULATOR_CURRENT_LIMIT_MAX 950000 |
| 247 | 263 | ||
| 264 | /* MAX77836 regulator current limits (as in CHGCTRL4 register), uA */ | ||
| 265 | #define MAX77836_REGULATOR_CURRENT_LIMIT_MIN 45000 | ||
| 266 | #define MAX77836_REGULATOR_CURRENT_LIMIT_HIGH_START 100000 | ||
| 267 | #define MAX77836_REGULATOR_CURRENT_LIMIT_HIGH_STEP 25000 | ||
| 268 | #define MAX77836_REGULATOR_CURRENT_LIMIT_MAX 475000 | ||
| 269 | |||
| 248 | /* MAX14577 regulator SFOUT LDO voltage, fixed, uV */ | 270 | /* MAX14577 regulator SFOUT LDO voltage, fixed, uV */ |
| 249 | #define MAX14577_REGULATOR_SAFEOUT_VOLTAGE 4900000 | 271 | #define MAX14577_REGULATOR_SAFEOUT_VOLTAGE 4900000 |
| 250 | 272 | ||
| 273 | /* MAX77836 regulator LDOx voltage, uV */ | ||
| 274 | #define MAX77836_REGULATOR_LDO_VOLTAGE_MIN 800000 | ||
| 275 | #define MAX77836_REGULATOR_LDO_VOLTAGE_MAX 3950000 | ||
| 276 | #define MAX77836_REGULATOR_LDO_VOLTAGE_STEP 50000 | ||
| 277 | #define MAX77836_REGULATOR_LDO_VOLTAGE_STEPS_NUM 64 | ||
| 278 | |||
| 279 | /* Slave addr = 0x46: PMIC */ | ||
| 280 | enum max77836_pmic_reg { | ||
| 281 | MAX77836_PMIC_REG_PMIC_ID = 0x20, | ||
| 282 | MAX77836_PMIC_REG_PMIC_REV = 0x21, | ||
| 283 | MAX77836_PMIC_REG_INTSRC = 0x22, | ||
| 284 | MAX77836_PMIC_REG_INTSRC_MASK = 0x23, | ||
| 285 | MAX77836_PMIC_REG_TOPSYS_INT = 0x24, | ||
| 286 | MAX77836_PMIC_REG_TOPSYS_INT_MASK = 0x26, | ||
| 287 | MAX77836_PMIC_REG_TOPSYS_STAT = 0x28, | ||
| 288 | MAX77836_PMIC_REG_MRSTB_CNTL = 0x2A, | ||
| 289 | MAX77836_PMIC_REG_LSCNFG = 0x2B, | ||
| 290 | |||
| 291 | MAX77836_LDO_REG_CNFG1_LDO1 = 0x51, | ||
| 292 | MAX77836_LDO_REG_CNFG2_LDO1 = 0x52, | ||
| 293 | MAX77836_LDO_REG_CNFG1_LDO2 = 0x53, | ||
| 294 | MAX77836_LDO_REG_CNFG2_LDO2 = 0x54, | ||
| 295 | MAX77836_LDO_REG_CNFG_LDO_BIAS = 0x55, | ||
| 296 | |||
| 297 | MAX77836_COMP_REG_COMP1 = 0x60, | ||
| 298 | |||
| 299 | MAX77836_PMIC_REG_END, | ||
| 300 | }; | ||
| 301 | |||
| 302 | #define MAX77836_INTSRC_MASK_TOP_INT_SHIFT 1 | ||
| 303 | #define MAX77836_INTSRC_MASK_MUIC_CHG_INT_SHIFT 3 | ||
| 304 | #define MAX77836_INTSRC_MASK_TOP_INT_MASK BIT(MAX77836_INTSRC_MASK_TOP_INT_SHIFT) | ||
| 305 | #define MAX77836_INTSRC_MASK_MUIC_CHG_INT_MASK BIT(MAX77836_INTSRC_MASK_MUIC_CHG_INT_SHIFT) | ||
| 306 | |||
| 307 | /* MAX77836 PMIC interrupts */ | ||
| 308 | #define MAX77836_TOPSYS_INT_T120C_SHIFT 0 | ||
| 309 | #define MAX77836_TOPSYS_INT_T140C_SHIFT 1 | ||
| 310 | #define MAX77836_TOPSYS_INT_T120C_MASK BIT(MAX77836_TOPSYS_INT_T120C_SHIFT) | ||
| 311 | #define MAX77836_TOPSYS_INT_T140C_MASK BIT(MAX77836_TOPSYS_INT_T140C_SHIFT) | ||
| 312 | |||
| 313 | /* LDO1/LDO2 CONFIG1 register */ | ||
| 314 | #define MAX77836_CNFG1_LDO_PWRMD_SHIFT 6 | ||
| 315 | #define MAX77836_CNFG1_LDO_TV_SHIFT 0 | ||
| 316 | #define MAX77836_CNFG1_LDO_PWRMD_MASK (0x3 << MAX77836_CNFG1_LDO_PWRMD_SHIFT) | ||
| 317 | #define MAX77836_CNFG1_LDO_TV_MASK (0x3f << MAX77836_CNFG1_LDO_TV_SHIFT) | ||
| 318 | |||
| 319 | /* LDO1/LDO2 CONFIG2 register */ | ||
| 320 | #define MAX77836_CNFG2_LDO_OVCLMPEN_SHIFT 7 | ||
| 321 | #define MAX77836_CNFG2_LDO_ALPMEN_SHIFT 6 | ||
| 322 | #define MAX77836_CNFG2_LDO_COMP_SHIFT 4 | ||
| 323 | #define MAX77836_CNFG2_LDO_POK_SHIFT 3 | ||
| 324 | #define MAX77836_CNFG2_LDO_ADE_SHIFT 1 | ||
| 325 | #define MAX77836_CNFG2_LDO_SS_SHIFT 0 | ||
| 326 | #define MAX77836_CNFG2_LDO_OVCLMPEN_MASK BIT(MAX77836_CNFG2_LDO_OVCLMPEN_SHIFT) | ||
| 327 | #define MAX77836_CNFG2_LDO_ALPMEN_MASK BIT(MAX77836_CNFG2_LDO_ALPMEN_SHIFT) | ||
| 328 | #define MAX77836_CNFG2_LDO_COMP_MASK (0x3 << MAX77836_CNFG2_LDO_COMP_SHIFT) | ||
| 329 | #define MAX77836_CNFG2_LDO_POK_MASK BIT(MAX77836_CNFG2_LDO_POK_SHIFT) | ||
| 330 | #define MAX77836_CNFG2_LDO_ADE_MASK BIT(MAX77836_CNFG2_LDO_ADE_SHIFT) | ||
| 331 | #define MAX77836_CNFG2_LDO_SS_MASK BIT(MAX77836_CNFG2_LDO_SS_SHIFT) | ||
| 332 | |||
| 333 | /* Slave addr = 0x6C: Fuel-Gauge/Battery */ | ||
| 334 | enum max77836_fg_reg { | ||
| 335 | MAX77836_FG_REG_VCELL_MSB = 0x02, | ||
| 336 | MAX77836_FG_REG_VCELL_LSB = 0x03, | ||
| 337 | MAX77836_FG_REG_SOC_MSB = 0x04, | ||
| 338 | MAX77836_FG_REG_SOC_LSB = 0x05, | ||
| 339 | MAX77836_FG_REG_MODE_H = 0x06, | ||
| 340 | MAX77836_FG_REG_MODE_L = 0x07, | ||
| 341 | MAX77836_FG_REG_VERSION_MSB = 0x08, | ||
| 342 | MAX77836_FG_REG_VERSION_LSB = 0x09, | ||
| 343 | MAX77836_FG_REG_HIBRT_H = 0x0A, | ||
| 344 | MAX77836_FG_REG_HIBRT_L = 0x0B, | ||
| 345 | MAX77836_FG_REG_CONFIG_H = 0x0C, | ||
| 346 | MAX77836_FG_REG_CONFIG_L = 0x0D, | ||
| 347 | MAX77836_FG_REG_VALRT_MIN = 0x14, | ||
| 348 | MAX77836_FG_REG_VALRT_MAX = 0x15, | ||
| 349 | MAX77836_FG_REG_CRATE_MSB = 0x16, | ||
| 350 | MAX77836_FG_REG_CRATE_LSB = 0x17, | ||
| 351 | MAX77836_FG_REG_VRESET = 0x18, | ||
| 352 | MAX77836_FG_REG_FGID = 0x19, | ||
| 353 | MAX77836_FG_REG_STATUS_H = 0x1A, | ||
| 354 | MAX77836_FG_REG_STATUS_L = 0x1B, | ||
| 355 | /* | ||
| 356 | * TODO: TABLE registers | ||
| 357 | * TODO: CMD register | ||
| 358 | */ | ||
| 359 | |||
| 360 | MAX77836_FG_REG_END, | ||
| 361 | }; | ||
| 362 | |||
| 251 | enum max14577_irq { | 363 | enum max14577_irq { |
| 252 | /* INT1 */ | 364 | /* INT1 */ |
| 253 | MAX14577_IRQ_INT1_ADC, | 365 | MAX14577_IRQ_INT1_ADC, |
| 254 | MAX14577_IRQ_INT1_ADCLOW, | 366 | MAX14577_IRQ_INT1_ADCLOW, |
| 255 | MAX14577_IRQ_INT1_ADCERR, | 367 | MAX14577_IRQ_INT1_ADCERR, |
| 368 | MAX77836_IRQ_INT1_ADC1K, | ||
| 256 | 369 | ||
| 257 | /* INT2 */ | 370 | /* INT2 */ |
| 258 | MAX14577_IRQ_INT2_CHGTYP, | 371 | MAX14577_IRQ_INT2_CHGTYP, |
| @@ -260,6 +373,7 @@ enum max14577_irq { | |||
| 260 | MAX14577_IRQ_INT2_DCDTMR, | 373 | MAX14577_IRQ_INT2_DCDTMR, |
| 261 | MAX14577_IRQ_INT2_DBCHG, | 374 | MAX14577_IRQ_INT2_DBCHG, |
| 262 | MAX14577_IRQ_INT2_VBVOLT, | 375 | MAX14577_IRQ_INT2_VBVOLT, |
| 376 | MAX77836_IRQ_INT2_VIDRM, | ||
| 263 | 377 | ||
| 264 | /* INT3 */ | 378 | /* INT3 */ |
| 265 | MAX14577_IRQ_INT3_EOC, | 379 | MAX14577_IRQ_INT3_EOC, |
| @@ -267,21 +381,25 @@ enum max14577_irq { | |||
| 267 | MAX14577_IRQ_INT3_OVP, | 381 | MAX14577_IRQ_INT3_OVP, |
| 268 | MAX14577_IRQ_INT3_MBCCHGERR, | 382 | MAX14577_IRQ_INT3_MBCCHGERR, |
| 269 | 383 | ||
| 384 | /* TOPSYS_INT, only MAX77836 */ | ||
| 385 | MAX77836_IRQ_TOPSYS_T140C, | ||
| 386 | MAX77836_IRQ_TOPSYS_T120C, | ||
| 387 | |||
| 270 | MAX14577_IRQ_NUM, | 388 | MAX14577_IRQ_NUM, |
| 271 | }; | 389 | }; |
| 272 | 390 | ||
| 273 | struct max14577 { | 391 | struct max14577 { |
| 274 | struct device *dev; | 392 | struct device *dev; |
| 275 | struct i2c_client *i2c; /* Slave addr = 0x4A */ | 393 | struct i2c_client *i2c; /* Slave addr = 0x4A */ |
| 394 | struct i2c_client *i2c_pmic; /* Slave addr = 0x46 */ | ||
| 395 | enum maxim_device_type dev_type; | ||
| 276 | 396 | ||
| 277 | struct regmap *regmap; | 397 | struct regmap *regmap; /* For MUIC and Charger */ |
| 398 | struct regmap *regmap_pmic; | ||
| 278 | 399 | ||
| 279 | struct regmap_irq_chip_data *irq_data; | 400 | struct regmap_irq_chip_data *irq_data; /* For MUIC and Charger */ |
| 401 | struct regmap_irq_chip_data *irq_data_pmic; | ||
| 280 | int irq; | 402 | int irq; |
| 281 | |||
| 282 | /* Device ID */ | ||
| 283 | u8 vendor_id; /* Vendor Identification */ | ||
| 284 | u8 device_id; /* Chip Version */ | ||
| 285 | }; | 403 | }; |
| 286 | 404 | ||
| 287 | /* MAX14577 shared regmap API function */ | 405 | /* MAX14577 shared regmap API function */ |
diff --git a/include/linux/mfd/max14577.h b/include/linux/mfd/max14577.h index 736d39c3ec0d..c83fbed1c7b6 100644 --- a/include/linux/mfd/max14577.h +++ b/include/linux/mfd/max14577.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * max14577.h - Driver for the Maxim 14577 | 2 | * max14577.h - Driver for the Maxim 14577/77836 |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2013 Samsung Electrnoics | 4 | * Copyright (C) 2014 Samsung Electrnoics |
| 5 | * Chanwoo Choi <cw00.choi@samsung.com> | 5 | * Chanwoo Choi <cw00.choi@samsung.com> |
| 6 | * Krzysztof Kozlowski <k.kozlowski@samsung.com> | 6 | * Krzysztof Kozlowski <k.kozlowski@samsung.com> |
| 7 | * | 7 | * |
| @@ -20,6 +20,9 @@ | |||
| 20 | * MAX14577 has MUIC, Charger devices. | 20 | * MAX14577 has MUIC, Charger devices. |
| 21 | * The devices share the same I2C bus and interrupt line | 21 | * The devices share the same I2C bus and interrupt line |
| 22 | * included in this mfd driver. | 22 | * included in this mfd driver. |
| 23 | * | ||
| 24 | * MAX77836 has additional PMIC and Fuel-Gauge on different I2C slave | ||
| 25 | * addresses. | ||
| 23 | */ | 26 | */ |
| 24 | 27 | ||
| 25 | #ifndef __MAX14577_H__ | 28 | #ifndef __MAX14577_H__ |
| @@ -32,7 +35,17 @@ enum max14577_regulators { | |||
| 32 | MAX14577_SAFEOUT = 0, | 35 | MAX14577_SAFEOUT = 0, |
| 33 | MAX14577_CHARGER, | 36 | MAX14577_CHARGER, |
| 34 | 37 | ||
| 35 | MAX14577_REG_MAX, | 38 | MAX14577_REGULATOR_NUM, |
| 39 | }; | ||
| 40 | |||
| 41 | /* MAX77836 regulator IDs */ | ||
| 42 | enum max77836_regulators { | ||
| 43 | MAX77836_SAFEOUT = 0, | ||
| 44 | MAX77836_CHARGER, | ||
| 45 | MAX77836_LDO1, | ||
| 46 | MAX77836_LDO2, | ||
| 47 | |||
| 48 | MAX77836_REGULATOR_NUM, | ||
| 36 | }; | 49 | }; |
| 37 | 50 | ||
| 38 | struct max14577_regulator_platform_data { | 51 | struct max14577_regulator_platform_data { |
diff --git a/include/linux/mfd/palmas.h b/include/linux/mfd/palmas.h index 9974e387e483..b8f87b704409 100644 --- a/include/linux/mfd/palmas.h +++ b/include/linux/mfd/palmas.h | |||
| @@ -415,7 +415,7 @@ struct palmas_usb { | |||
| 415 | struct palmas *palmas; | 415 | struct palmas *palmas; |
| 416 | struct device *dev; | 416 | struct device *dev; |
| 417 | 417 | ||
| 418 | struct extcon_dev edev; | 418 | struct extcon_dev *edev; |
| 419 | 419 | ||
| 420 | int id_otg_irq; | 420 | int id_otg_irq; |
| 421 | int id_irq; | 421 | int id_irq; |
diff --git a/include/linux/mfd/samsung/s2mps14.h b/include/linux/mfd/samsung/s2mps14.h index 4b449b8ac548..900cd7a04314 100644 --- a/include/linux/mfd/samsung/s2mps14.h +++ b/include/linux/mfd/samsung/s2mps14.h | |||
| @@ -148,6 +148,8 @@ enum s2mps14_regulators { | |||
| 148 | #define S2MPS14_ENABLE_SHIFT 6 | 148 | #define S2MPS14_ENABLE_SHIFT 6 |
| 149 | /* On/Off controlled by PWREN */ | 149 | /* On/Off controlled by PWREN */ |
| 150 | #define S2MPS14_ENABLE_SUSPEND (0x01 << S2MPS14_ENABLE_SHIFT) | 150 | #define S2MPS14_ENABLE_SUSPEND (0x01 << S2MPS14_ENABLE_SHIFT) |
| 151 | /* On/Off controlled by LDO10EN or EMMCEN */ | ||
| 152 | #define S2MPS14_ENABLE_EXT_CONTROL (0x00 << S2MPS14_ENABLE_SHIFT) | ||
| 151 | #define S2MPS14_LDO_N_VOLTAGES (S2MPS14_LDO_VSEL_MASK + 1) | 153 | #define S2MPS14_LDO_N_VOLTAGES (S2MPS14_LDO_VSEL_MASK + 1) |
| 152 | #define S2MPS14_BUCK_N_VOLTAGES (S2MPS14_BUCK_VSEL_MASK + 1) | 154 | #define S2MPS14_BUCK_N_VOLTAGES (S2MPS14_BUCK_VSEL_MASK + 1) |
| 153 | 155 | ||
diff --git a/include/linux/mfd/syscon/exynos5-pmu.h b/include/linux/mfd/syscon/exynos5-pmu.h new file mode 100644 index 000000000000..00ef24bf6ede --- /dev/null +++ b/include/linux/mfd/syscon/exynos5-pmu.h | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | /* | ||
| 2 | * Exynos5 SoC series Power Management Unit (PMU) register offsets | ||
| 3 | * and bit definitions. | ||
| 4 | * | ||
| 5 | * Copyright (C) 2014 Samsung Electronics Co., Ltd. | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2 as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #ifndef _LINUX_MFD_SYSCON_PMU_EXYNOS5_H_ | ||
| 13 | #define _LINUX_MFD_SYSCON_PMU_EXYNOS5_H_ | ||
| 14 | |||
| 15 | /* Exynos5 PMU register definitions */ | ||
| 16 | #define EXYNOS5_HDMI_PHY_CONTROL (0x700) | ||
| 17 | #define EXYNOS5_USBDRD_PHY_CONTROL (0x704) | ||
| 18 | |||
| 19 | /* Exynos5250 specific register definitions */ | ||
| 20 | #define EXYNOS5_USBHOST_PHY_CONTROL (0x708) | ||
| 21 | #define EXYNOS5_EFNAND_PHY_CONTROL (0x70c) | ||
| 22 | #define EXYNOS5_MIPI_PHY0_CONTROL (0x710) | ||
| 23 | #define EXYNOS5_MIPI_PHY1_CONTROL (0x714) | ||
| 24 | #define EXYNOS5_ADC_PHY_CONTROL (0x718) | ||
| 25 | #define EXYNOS5_MTCADC_PHY_CONTROL (0x71c) | ||
| 26 | #define EXYNOS5_DPTX_PHY_CONTROL (0x720) | ||
| 27 | #define EXYNOS5_SATA_PHY_CONTROL (0x724) | ||
| 28 | |||
| 29 | /* Exynos5420 specific register definitions */ | ||
| 30 | #define EXYNOS5420_USBDRD1_PHY_CONTROL (0x708) | ||
| 31 | #define EXYNOS5420_USBHOST_PHY_CONTROL (0x70c) | ||
| 32 | #define EXYNOS5420_MIPI_PHY0_CONTROL (0x714) | ||
| 33 | #define EXYNOS5420_MIPI_PHY1_CONTROL (0x718) | ||
| 34 | #define EXYNOS5420_MIPI_PHY2_CONTROL (0x71c) | ||
| 35 | #define EXYNOS5420_ADC_PHY_CONTROL (0x720) | ||
| 36 | #define EXYNOS5420_MTCADC_PHY_CONTROL (0x724) | ||
| 37 | #define EXYNOS5420_DPTX_PHY_CONTROL (0x728) | ||
| 38 | |||
| 39 | #define EXYNOS5_PHY_ENABLE BIT(0) | ||
| 40 | |||
| 41 | #define EXYNOS5_MIPI_PHY_S_RESETN BIT(1) | ||
| 42 | #define EXYNOS5_MIPI_PHY_M_RESETN BIT(2) | ||
| 43 | |||
| 44 | #endif /* _LINUX_MFD_SYSCON_PMU_EXYNOS5_H_ */ | ||
diff --git a/include/linux/mfd/tc3589x.h b/include/linux/mfd/tc3589x.h index 6b8e1ff4672b..e6088c2e2092 100644 --- a/include/linux/mfd/tc3589x.h +++ b/include/linux/mfd/tc3589x.h | |||
| @@ -111,7 +111,6 @@ enum tx3589x_block { | |||
| 111 | #define TC3589x_INT_PORIRQ 7 | 111 | #define TC3589x_INT_PORIRQ 7 |
| 112 | 112 | ||
| 113 | #define TC3589x_NR_INTERNAL_IRQS 8 | 113 | #define TC3589x_NR_INTERNAL_IRQS 8 |
| 114 | #define TC3589x_INT_GPIO(x) (TC3589x_NR_INTERNAL_IRQS + (x)) | ||
| 115 | 114 | ||
| 116 | struct tc3589x { | 115 | struct tc3589x { |
| 117 | struct mutex lock; | 116 | struct mutex lock; |
diff --git a/include/linux/mfd/tps65090.h b/include/linux/mfd/tps65090.h index 3f43069413e7..0bf2708df150 100644 --- a/include/linux/mfd/tps65090.h +++ b/include/linux/mfd/tps65090.h | |||
| @@ -64,6 +64,20 @@ enum { | |||
| 64 | TPS65090_REGULATOR_MAX, | 64 | TPS65090_REGULATOR_MAX, |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | /* Register addresses */ | ||
| 68 | #define TPS65090_REG_INTR_STS 0x00 | ||
| 69 | #define TPS65090_REG_INTR_STS2 0x01 | ||
| 70 | #define TPS65090_REG_INTR_MASK 0x02 | ||
| 71 | #define TPS65090_REG_INTR_MASK2 0x03 | ||
| 72 | #define TPS65090_REG_CG_CTRL0 0x04 | ||
| 73 | #define TPS65090_REG_CG_CTRL1 0x05 | ||
| 74 | #define TPS65090_REG_CG_CTRL2 0x06 | ||
| 75 | #define TPS65090_REG_CG_CTRL3 0x07 | ||
| 76 | #define TPS65090_REG_CG_CTRL4 0x08 | ||
| 77 | #define TPS65090_REG_CG_CTRL5 0x09 | ||
| 78 | #define TPS65090_REG_CG_STATUS1 0x0a | ||
| 79 | #define TPS65090_REG_CG_STATUS2 0x0b | ||
| 80 | |||
| 67 | struct tps65090 { | 81 | struct tps65090 { |
| 68 | struct device *dev; | 82 | struct device *dev; |
| 69 | struct regmap *rmap; | 83 | struct regmap *rmap; |
| @@ -78,11 +92,16 @@ struct tps65090 { | |||
| 78 | * DCDC1, DCDC2 and DCDC3. | 92 | * DCDC1, DCDC2 and DCDC3. |
| 79 | * @gpio: Gpio number if external control is enabled and controlled through | 93 | * @gpio: Gpio number if external control is enabled and controlled through |
| 80 | * gpio. | 94 | * gpio. |
| 95 | * @overcurrent_wait_valid: True if the overcurrent_wait should be applied. | ||
| 96 | * @overcurrent_wait: Value to set as the overcurrent wait time. This is the | ||
| 97 | * actual bitfield value, not a time in ms (valid value are 0 - 3). | ||
| 81 | */ | 98 | */ |
| 82 | struct tps65090_regulator_plat_data { | 99 | struct tps65090_regulator_plat_data { |
| 83 | struct regulator_init_data *reg_init_data; | 100 | struct regulator_init_data *reg_init_data; |
| 84 | bool enable_ext_control; | 101 | bool enable_ext_control; |
| 85 | int gpio; | 102 | int gpio; |
| 103 | bool overcurrent_wait_valid; | ||
| 104 | int overcurrent_wait; | ||
| 86 | }; | 105 | }; |
| 87 | 106 | ||
| 88 | struct tps65090_platform_data { | 107 | struct tps65090_platform_data { |
diff --git a/include/linux/mfd/tps65217.h b/include/linux/mfd/tps65217.h index 54b5458ec084..95d6938737fd 100644 --- a/include/linux/mfd/tps65217.h +++ b/include/linux/mfd/tps65217.h | |||
| @@ -254,7 +254,6 @@ struct tps65217 { | |||
| 254 | struct tps65217_board *pdata; | 254 | struct tps65217_board *pdata; |
| 255 | unsigned long id; | 255 | unsigned long id; |
| 256 | struct regulator_desc desc[TPS65217_NUM_REGULATOR]; | 256 | struct regulator_desc desc[TPS65217_NUM_REGULATOR]; |
| 257 | struct regulator_dev *rdev[TPS65217_NUM_REGULATOR]; | ||
| 258 | struct regmap *regmap; | 257 | struct regmap *regmap; |
| 259 | }; | 258 | }; |
| 260 | 259 | ||
diff --git a/include/linux/mfd/tps6586x.h b/include/linux/mfd/tps6586x.h index cbecec2e353a..96187ed9f9bb 100644 --- a/include/linux/mfd/tps6586x.h +++ b/include/linux/mfd/tps6586x.h | |||
| @@ -17,6 +17,8 @@ | |||
| 17 | #define TPS658621A 0x15 | 17 | #define TPS658621A 0x15 |
| 18 | #define TPS658621CD 0x2c | 18 | #define TPS658621CD 0x2c |
| 19 | #define TPS658623 0x1b | 19 | #define TPS658623 0x1b |
| 20 | #define TPS658640 0x01 | ||
| 21 | #define TPS658640v2 0x02 | ||
| 20 | #define TPS658643 0x03 | 22 | #define TPS658643 0x03 |
| 21 | 23 | ||
| 22 | enum { | 24 | enum { |
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h index 51e26f3cd3b3..ee80dd7d9f60 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
| @@ -64,7 +64,7 @@ struct miscdevice { | |||
| 64 | umode_t mode; | 64 | umode_t mode; |
| 65 | }; | 65 | }; |
| 66 | 66 | ||
| 67 | extern int misc_register(struct miscdevice * misc); | 67 | extern int misc_register(struct miscdevice *misc); |
| 68 | extern int misc_deregister(struct miscdevice *misc); | 68 | extern int misc_deregister(struct miscdevice *misc); |
| 69 | 69 | ||
| 70 | #define MODULE_ALIAS_MISCDEV(minor) \ | 70 | #define MODULE_ALIAS_MISCDEV(minor) \ |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index b42d07b0390b..6c1ae9fd9505 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -493,7 +493,7 @@ static inline void napi_disable(struct napi_struct *n) | |||
| 493 | static inline void napi_enable(struct napi_struct *n) | 493 | static inline void napi_enable(struct napi_struct *n) |
| 494 | { | 494 | { |
| 495 | BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state)); | 495 | BUG_ON(!test_bit(NAPI_STATE_SCHED, &n->state)); |
| 496 | smp_mb__before_clear_bit(); | 496 | smp_mb__before_atomic(); |
| 497 | clear_bit(NAPI_STATE_SCHED, &n->state); | 497 | clear_bit(NAPI_STATE_SCHED, &n->state); |
| 498 | } | 498 | } |
| 499 | 499 | ||
diff --git a/include/linux/of.h b/include/linux/of.h index e6f0988c1c68..fa362867b453 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -130,6 +130,12 @@ static inline int of_node_check_flag(struct device_node *n, unsigned long flag) | |||
| 130 | return test_bit(flag, &n->_flags); | 130 | return test_bit(flag, &n->_flags); |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | static inline int of_node_test_and_set_flag(struct device_node *n, | ||
| 134 | unsigned long flag) | ||
| 135 | { | ||
| 136 | return test_and_set_bit(flag, &n->_flags); | ||
| 137 | } | ||
| 138 | |||
| 133 | static inline void of_node_set_flag(struct device_node *n, unsigned long flag) | 139 | static inline void of_node_set_flag(struct device_node *n, unsigned long flag) |
| 134 | { | 140 | { |
| 135 | set_bit(flag, &n->_flags); | 141 | set_bit(flag, &n->_flags); |
| @@ -197,6 +203,7 @@ static inline unsigned long of_read_ulong(const __be32 *cell, int size) | |||
| 197 | /* flag descriptions */ | 203 | /* flag descriptions */ |
| 198 | #define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */ | 204 | #define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */ |
| 199 | #define OF_DETACHED 2 /* node has been detached from the device tree */ | 205 | #define OF_DETACHED 2 /* node has been detached from the device tree */ |
| 206 | #define OF_POPULATED 3 /* device already created for the node */ | ||
| 200 | 207 | ||
| 201 | #define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags) | 208 | #define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags) |
| 202 | #define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags) | 209 | #define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags) |
diff --git a/include/linux/of_gpio.h b/include/linux/of_gpio.h index f14123a5a9df..38fc05036015 100644 --- a/include/linux/of_gpio.h +++ b/include/linux/of_gpio.h | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #include <linux/errno.h> | 19 | #include <linux/errno.h> |
| 20 | #include <linux/gpio.h> | 20 | #include <linux/gpio.h> |
| 21 | #include <linux/of.h> | 21 | #include <linux/of.h> |
| 22 | #include <linux/gpio/consumer.h> | ||
| 23 | 22 | ||
| 24 | struct device_node; | 23 | struct device_node; |
| 25 | 24 | ||
| @@ -48,7 +47,7 @@ static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc) | |||
| 48 | return container_of(gc, struct of_mm_gpio_chip, gc); | 47 | return container_of(gc, struct of_mm_gpio_chip, gc); |
| 49 | } | 48 | } |
| 50 | 49 | ||
| 51 | extern struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np, | 50 | extern int of_get_named_gpio_flags(struct device_node *np, |
| 52 | const char *list_name, int index, enum of_gpio_flags *flags); | 51 | const char *list_name, int index, enum of_gpio_flags *flags); |
| 53 | 52 | ||
| 54 | extern int of_mm_gpiochip_add(struct device_node *np, | 53 | extern int of_mm_gpiochip_add(struct device_node *np, |
| @@ -63,10 +62,10 @@ extern int of_gpio_simple_xlate(struct gpio_chip *gc, | |||
| 63 | #else /* CONFIG_OF_GPIO */ | 62 | #else /* CONFIG_OF_GPIO */ |
| 64 | 63 | ||
| 65 | /* Drivers may not strictly depend on the GPIO support, so let them link. */ | 64 | /* Drivers may not strictly depend on the GPIO support, so let them link. */ |
| 66 | static inline struct gpio_desc *of_get_named_gpiod_flags(struct device_node *np, | 65 | static inline int of_get_named_gpio_flags(struct device_node *np, |
| 67 | const char *list_name, int index, enum of_gpio_flags *flags) | 66 | const char *list_name, int index, enum of_gpio_flags *flags) |
| 68 | { | 67 | { |
| 69 | return ERR_PTR(-ENOSYS); | 68 | return -ENOSYS; |
| 70 | } | 69 | } |
| 71 | 70 | ||
| 72 | static inline int of_gpio_simple_xlate(struct gpio_chip *gc, | 71 | static inline int of_gpio_simple_xlate(struct gpio_chip *gc, |
| @@ -81,18 +80,6 @@ static inline void of_gpiochip_remove(struct gpio_chip *gc) { } | |||
| 81 | 80 | ||
| 82 | #endif /* CONFIG_OF_GPIO */ | 81 | #endif /* CONFIG_OF_GPIO */ |
| 83 | 82 | ||
| 84 | static inline int of_get_named_gpio_flags(struct device_node *np, | ||
| 85 | const char *list_name, int index, enum of_gpio_flags *flags) | ||
| 86 | { | ||
| 87 | struct gpio_desc *desc; | ||
| 88 | desc = of_get_named_gpiod_flags(np, list_name, index, flags); | ||
| 89 | |||
| 90 | if (IS_ERR(desc)) | ||
| 91 | return PTR_ERR(desc); | ||
| 92 | else | ||
| 93 | return desc_to_gpio(desc); | ||
| 94 | } | ||
| 95 | |||
| 96 | /** | 83 | /** |
| 97 | * of_gpio_named_count() - Count GPIOs for a device | 84 | * of_gpio_named_count() - Count GPIOs for a device |
| 98 | * @np: device node to count GPIOs for | 85 | * @np: device node to count GPIOs for |
| @@ -129,22 +116,6 @@ static inline int of_gpio_count(struct device_node *np) | |||
| 129 | return of_gpio_named_count(np, "gpios"); | 116 | return of_gpio_named_count(np, "gpios"); |
| 130 | } | 117 | } |
| 131 | 118 | ||
| 132 | /** | ||
| 133 | * of_get_gpiod_flags() - Get a GPIO descriptor and flags to use with GPIO API | ||
| 134 | * @np: device node to get GPIO from | ||
| 135 | * @index: index of the GPIO | ||
| 136 | * @flags: a flags pointer to fill in | ||
| 137 | * | ||
| 138 | * Returns GPIO descriptor to use with Linux generic GPIO API, or a errno | ||
| 139 | * value on the error condition. If @flags is not NULL the function also fills | ||
| 140 | * in flags for the GPIO. | ||
| 141 | */ | ||
| 142 | static inline struct gpio_desc *of_get_gpiod_flags(struct device_node *np, | ||
| 143 | int index, enum of_gpio_flags *flags) | ||
| 144 | { | ||
| 145 | return of_get_named_gpiod_flags(np, "gpios", index, flags); | ||
| 146 | } | ||
| 147 | |||
| 148 | static inline int of_get_gpio_flags(struct device_node *np, int index, | 119 | static inline int of_get_gpio_flags(struct device_node *np, int index, |
| 149 | enum of_gpio_flags *flags) | 120 | enum of_gpio_flags *flags) |
| 150 | { | 121 | { |
diff --git a/include/linux/of_platform.h b/include/linux/of_platform.h index 05cb4a928252..d96e1badbee0 100644 --- a/include/linux/of_platform.h +++ b/include/linux/of_platform.h | |||
| @@ -37,7 +37,7 @@ | |||
| 37 | * Note: Using an auxdata lookup table should be considered a last resort when | 37 | * Note: Using an auxdata lookup table should be considered a last resort when |
| 38 | * converting a platform to use the DT. Normally the automatically generated | 38 | * converting a platform to use the DT. Normally the automatically generated |
| 39 | * device name will not matter, and drivers should obtain data from the device | 39 | * device name will not matter, and drivers should obtain data from the device |
| 40 | * node instead of from an anonymouns platform_data pointer. | 40 | * node instead of from an anonymous platform_data pointer. |
| 41 | */ | 41 | */ |
| 42 | struct of_dev_auxdata { | 42 | struct of_dev_auxdata { |
| 43 | char *compatible; | 43 | char *compatible; |
| @@ -72,6 +72,7 @@ extern int of_platform_populate(struct device_node *root, | |||
| 72 | const struct of_device_id *matches, | 72 | const struct of_device_id *matches, |
| 73 | const struct of_dev_auxdata *lookup, | 73 | const struct of_dev_auxdata *lookup, |
| 74 | struct device *parent); | 74 | struct device *parent); |
| 75 | extern int of_platform_depopulate(struct device *parent); | ||
| 75 | #else | 76 | #else |
| 76 | static inline int of_platform_populate(struct device_node *root, | 77 | static inline int of_platform_populate(struct device_node *root, |
| 77 | const struct of_device_id *matches, | 78 | const struct of_device_id *matches, |
| @@ -80,6 +81,10 @@ static inline int of_platform_populate(struct device_node *root, | |||
| 80 | { | 81 | { |
| 81 | return -ENODEV; | 82 | return -ENODEV; |
| 82 | } | 83 | } |
| 84 | static inline int of_platform_depopulate(struct device *parent) | ||
| 85 | { | ||
| 86 | return -ENODEV; | ||
| 87 | } | ||
| 83 | #endif | 88 | #endif |
| 84 | 89 | ||
| 85 | #endif /* _LINUX_OF_PLATFORM_H */ | 90 | #endif /* _LINUX_OF_PLATFORM_H */ |
diff --git a/include/linux/omap-dma.h b/include/linux/omap-dma.h index 41a13e70f41f..7944cdc27bed 100644 --- a/include/linux/omap-dma.h +++ b/include/linux/omap-dma.h | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | struct dma_chan; | 11 | struct dma_chan; |
| 12 | 12 | ||
| 13 | #if defined(CONFIG_DMA_OMAP) || defined(CONFIG_DMA_OMAP_MODULE) | 13 | #if defined(CONFIG_DMA_OMAP) || (defined(CONFIG_DMA_OMAP_MODULE) && defined(MODULE)) |
| 14 | bool omap_dma_filter_fn(struct dma_chan *, void *); | 14 | bool omap_dma_filter_fn(struct dma_chan *, void *); |
| 15 | #else | 15 | #else |
| 16 | static inline bool omap_dma_filter_fn(struct dma_chan *c, void *d) | 16 | static inline bool omap_dma_filter_fn(struct dma_chan *c, void *d) |
diff --git a/include/linux/pci.h b/include/linux/pci.h index aab57b4abe7f..71d9673c1b2c 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
| @@ -365,6 +365,7 @@ struct pci_dev { | |||
| 365 | #endif | 365 | #endif |
| 366 | phys_addr_t rom; /* Physical address of ROM if it's not from the BAR */ | 366 | phys_addr_t rom; /* Physical address of ROM if it's not from the BAR */ |
| 367 | size_t romlen; /* Length of ROM if it's not from the BAR */ | 367 | size_t romlen; /* Length of ROM if it's not from the BAR */ |
| 368 | char *driver_override; /* Driver name to force a match */ | ||
| 368 | }; | 369 | }; |
| 369 | 370 | ||
| 370 | static inline struct pci_dev *pci_physfn(struct pci_dev *dev) | 371 | static inline struct pci_dev *pci_physfn(struct pci_dev *dev) |
| @@ -477,6 +478,19 @@ static inline bool pci_is_root_bus(struct pci_bus *pbus) | |||
| 477 | return !(pbus->parent); | 478 | return !(pbus->parent); |
| 478 | } | 479 | } |
| 479 | 480 | ||
| 481 | /** | ||
| 482 | * pci_is_bridge - check if the PCI device is a bridge | ||
| 483 | * @dev: PCI device | ||
| 484 | * | ||
| 485 | * Return true if the PCI device is bridge whether it has subordinate | ||
| 486 | * or not. | ||
| 487 | */ | ||
| 488 | static inline bool pci_is_bridge(struct pci_dev *dev) | ||
| 489 | { | ||
| 490 | return dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || | ||
| 491 | dev->hdr_type == PCI_HEADER_TYPE_CARDBUS; | ||
| 492 | } | ||
| 493 | |||
| 480 | static inline struct pci_dev *pci_upstream_bridge(struct pci_dev *dev) | 494 | static inline struct pci_dev *pci_upstream_bridge(struct pci_dev *dev) |
| 481 | { | 495 | { |
| 482 | dev = pci_physfn(dev); | 496 | dev = pci_physfn(dev); |
| @@ -518,7 +532,7 @@ static inline int pcibios_err_to_errno(int err) | |||
| 518 | case PCIBIOS_FUNC_NOT_SUPPORTED: | 532 | case PCIBIOS_FUNC_NOT_SUPPORTED: |
| 519 | return -ENOENT; | 533 | return -ENOENT; |
| 520 | case PCIBIOS_BAD_VENDOR_ID: | 534 | case PCIBIOS_BAD_VENDOR_ID: |
| 521 | return -EINVAL; | 535 | return -ENOTTY; |
| 522 | case PCIBIOS_DEVICE_NOT_FOUND: | 536 | case PCIBIOS_DEVICE_NOT_FOUND: |
| 523 | return -ENODEV; | 537 | return -ENODEV; |
| 524 | case PCIBIOS_BAD_REGISTER_NUMBER: | 538 | case PCIBIOS_BAD_REGISTER_NUMBER: |
| @@ -529,7 +543,7 @@ static inline int pcibios_err_to_errno(int err) | |||
| 529 | return -ENOSPC; | 543 | return -ENOSPC; |
| 530 | } | 544 | } |
| 531 | 545 | ||
| 532 | return -ENOTTY; | 546 | return -ERANGE; |
| 533 | } | 547 | } |
| 534 | 548 | ||
| 535 | /* Low-level architecture-dependent routines */ | 549 | /* Low-level architecture-dependent routines */ |
| @@ -603,6 +617,9 @@ struct pci_error_handlers { | |||
| 603 | /* PCI slot has been reset */ | 617 | /* PCI slot has been reset */ |
| 604 | pci_ers_result_t (*slot_reset)(struct pci_dev *dev); | 618 | pci_ers_result_t (*slot_reset)(struct pci_dev *dev); |
| 605 | 619 | ||
| 620 | /* PCI function reset prepare or completed */ | ||
| 621 | void (*reset_notify)(struct pci_dev *dev, bool prepare); | ||
| 622 | |||
| 606 | /* Device driver may resume normal operations */ | 623 | /* Device driver may resume normal operations */ |
| 607 | void (*resume)(struct pci_dev *dev); | 624 | void (*resume)(struct pci_dev *dev); |
| 608 | }; | 625 | }; |
| @@ -680,8 +697,8 @@ struct pci_driver { | |||
| 680 | 697 | ||
| 681 | /** | 698 | /** |
| 682 | * PCI_VDEVICE - macro used to describe a specific pci device in short form | 699 | * PCI_VDEVICE - macro used to describe a specific pci device in short form |
| 683 | * @vendor: the vendor name | 700 | * @vend: the vendor name |
| 684 | * @device: the 16 bit PCI Device ID | 701 | * @dev: the 16 bit PCI Device ID |
| 685 | * | 702 | * |
| 686 | * This macro is used to create a struct pci_device_id that matches a | 703 | * This macro is used to create a struct pci_device_id that matches a |
| 687 | * specific PCI device. The subvendor, and subdevice fields will be set | 704 | * specific PCI device. The subvendor, and subdevice fields will be set |
| @@ -689,9 +706,9 @@ struct pci_driver { | |||
| 689 | * private data. | 706 | * private data. |
| 690 | */ | 707 | */ |
| 691 | 708 | ||
| 692 | #define PCI_VDEVICE(vendor, device) \ | 709 | #define PCI_VDEVICE(vend, dev) \ |
| 693 | PCI_VENDOR_ID_##vendor, (device), \ | 710 | .vendor = PCI_VENDOR_ID_##vend, .device = (dev), \ |
| 694 | PCI_ANY_ID, PCI_ANY_ID, 0, 0 | 711 | .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, 0, 0 |
| 695 | 712 | ||
| 696 | /* these external functions are only available when PCI support is enabled */ | 713 | /* these external functions are only available when PCI support is enabled */ |
| 697 | #ifdef CONFIG_PCI | 714 | #ifdef CONFIG_PCI |
| @@ -764,7 +781,7 @@ int pci_scan_slot(struct pci_bus *bus, int devfn); | |||
| 764 | struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn); | 781 | struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn); |
| 765 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); | 782 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); |
| 766 | unsigned int pci_scan_child_bus(struct pci_bus *bus); | 783 | unsigned int pci_scan_child_bus(struct pci_bus *bus); |
| 767 | int __must_check pci_bus_add_device(struct pci_dev *dev); | 784 | void pci_bus_add_device(struct pci_dev *dev); |
| 768 | void pci_read_bridge_bases(struct pci_bus *child); | 785 | void pci_read_bridge_bases(struct pci_bus *child); |
| 769 | struct resource *pci_find_parent_resource(const struct pci_dev *dev, | 786 | struct resource *pci_find_parent_resource(const struct pci_dev *dev, |
| 770 | struct resource *res); | 787 | struct resource *res); |
| @@ -1158,7 +1175,6 @@ struct msix_entry { | |||
| 1158 | 1175 | ||
| 1159 | #ifdef CONFIG_PCI_MSI | 1176 | #ifdef CONFIG_PCI_MSI |
| 1160 | int pci_msi_vec_count(struct pci_dev *dev); | 1177 | int pci_msi_vec_count(struct pci_dev *dev); |
| 1161 | int pci_enable_msi_block(struct pci_dev *dev, int nvec); | ||
| 1162 | void pci_msi_shutdown(struct pci_dev *dev); | 1178 | void pci_msi_shutdown(struct pci_dev *dev); |
| 1163 | void pci_disable_msi(struct pci_dev *dev); | 1179 | void pci_disable_msi(struct pci_dev *dev); |
| 1164 | int pci_msix_vec_count(struct pci_dev *dev); | 1180 | int pci_msix_vec_count(struct pci_dev *dev); |
| @@ -1188,8 +1204,6 @@ static inline int pci_enable_msix_exact(struct pci_dev *dev, | |||
| 1188 | } | 1204 | } |
| 1189 | #else | 1205 | #else |
| 1190 | static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; } | 1206 | static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; } |
| 1191 | static inline int pci_enable_msi_block(struct pci_dev *dev, int nvec) | ||
| 1192 | { return -ENOSYS; } | ||
| 1193 | static inline void pci_msi_shutdown(struct pci_dev *dev) { } | 1207 | static inline void pci_msi_shutdown(struct pci_dev *dev) { } |
| 1194 | static inline void pci_disable_msi(struct pci_dev *dev) { } | 1208 | static inline void pci_disable_msi(struct pci_dev *dev) { } |
| 1195 | static inline int pci_msix_vec_count(struct pci_dev *dev) { return -ENOSYS; } | 1209 | static inline int pci_msix_vec_count(struct pci_dev *dev) { return -ENOSYS; } |
| @@ -1244,7 +1258,7 @@ static inline void pcie_set_ecrc_checking(struct pci_dev *dev) { } | |||
| 1244 | static inline void pcie_ecrc_get_policy(char *str) { } | 1258 | static inline void pcie_ecrc_get_policy(char *str) { } |
| 1245 | #endif | 1259 | #endif |
| 1246 | 1260 | ||
| 1247 | #define pci_enable_msi(pdev) pci_enable_msi_block(pdev, 1) | 1261 | #define pci_enable_msi(pdev) pci_enable_msi_exact(pdev, 1) |
| 1248 | 1262 | ||
| 1249 | #ifdef CONFIG_HT_IRQ | 1263 | #ifdef CONFIG_HT_IRQ |
| 1250 | /* The functions a driver should call */ | 1264 | /* The functions a driver should call */ |
| @@ -1572,13 +1586,13 @@ extern unsigned long pci_hotplug_io_size; | |||
| 1572 | extern unsigned long pci_hotplug_mem_size; | 1586 | extern unsigned long pci_hotplug_mem_size; |
| 1573 | 1587 | ||
| 1574 | /* Architecture-specific versions may override these (weak) */ | 1588 | /* Architecture-specific versions may override these (weak) */ |
| 1575 | int pcibios_add_platform_entries(struct pci_dev *dev); | ||
| 1576 | void pcibios_disable_device(struct pci_dev *dev); | 1589 | void pcibios_disable_device(struct pci_dev *dev); |
| 1577 | void pcibios_set_master(struct pci_dev *dev); | 1590 | void pcibios_set_master(struct pci_dev *dev); |
| 1578 | int pcibios_set_pcie_reset_state(struct pci_dev *dev, | 1591 | int pcibios_set_pcie_reset_state(struct pci_dev *dev, |
| 1579 | enum pcie_reset_state state); | 1592 | enum pcie_reset_state state); |
| 1580 | int pcibios_add_device(struct pci_dev *dev); | 1593 | int pcibios_add_device(struct pci_dev *dev); |
| 1581 | void pcibios_release_device(struct pci_dev *dev); | 1594 | void pcibios_release_device(struct pci_dev *dev); |
| 1595 | void pcibios_penalize_isa_irq(int irq, int active); | ||
| 1582 | 1596 | ||
| 1583 | #ifdef CONFIG_HIBERNATE_CALLBACKS | 1597 | #ifdef CONFIG_HIBERNATE_CALLBACKS |
| 1584 | extern struct dev_pm_ops pcibios_pm_ops; | 1598 | extern struct dev_pm_ops pcibios_pm_ops; |
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index d4de24b4d4c6..7fa31731c854 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -1631,8 +1631,6 @@ | |||
| 1631 | #define PCI_DEVICE_ID_ATT_VENUS_MODEM 0x480 | 1631 | #define PCI_DEVICE_ID_ATT_VENUS_MODEM 0x480 |
| 1632 | 1632 | ||
| 1633 | #define PCI_VENDOR_ID_SPECIALIX 0x11cb | 1633 | #define PCI_VENDOR_ID_SPECIALIX 0x11cb |
| 1634 | #define PCI_DEVICE_ID_SPECIALIX_IO8 0x2000 | ||
| 1635 | #define PCI_DEVICE_ID_SPECIALIX_RIO 0x8000 | ||
| 1636 | #define PCI_SUBDEVICE_ID_SPECIALIX_SPEED4 0xa004 | 1634 | #define PCI_SUBDEVICE_ID_SPECIALIX_SPEED4 0xa004 |
| 1637 | 1635 | ||
| 1638 | #define PCI_VENDOR_ID_ANALOG_DEVICES 0x11d4 | 1636 | #define PCI_VENDOR_ID_ANALOG_DEVICES 0x11d4 |
| @@ -2874,7 +2872,6 @@ | |||
| 2874 | #define PCI_DEVICE_ID_SCALEMP_VSMP_CTL 0x1010 | 2872 | #define PCI_DEVICE_ID_SCALEMP_VSMP_CTL 0x1010 |
| 2875 | 2873 | ||
| 2876 | #define PCI_VENDOR_ID_COMPUTONE 0x8e0e | 2874 | #define PCI_VENDOR_ID_COMPUTONE 0x8e0e |
| 2877 | #define PCI_DEVICE_ID_COMPUTONE_IP2EX 0x0291 | ||
| 2878 | #define PCI_DEVICE_ID_COMPUTONE_PG 0x0302 | 2875 | #define PCI_DEVICE_ID_COMPUTONE_PG 0x0302 |
| 2879 | #define PCI_SUBVENDOR_ID_COMPUTONE 0x8e0e | 2876 | #define PCI_SUBVENDOR_ID_COMPUTONE 0x8e0e |
| 2880 | #define PCI_SUBDEVICE_ID_COMPUTONE_PG4 0x0001 | 2877 | #define PCI_SUBDEVICE_ID_COMPUTONE_PG4 0x0001 |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index e7a0b95ed527..495c6543a8f2 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
| @@ -639,7 +639,7 @@ do { \ | |||
| 639 | # define raw_cpu_add_return_8(pcp, val) raw_cpu_generic_add_return(pcp, val) | 639 | # define raw_cpu_add_return_8(pcp, val) raw_cpu_generic_add_return(pcp, val) |
| 640 | # endif | 640 | # endif |
| 641 | # define raw_cpu_add_return(pcp, val) \ | 641 | # define raw_cpu_add_return(pcp, val) \ |
| 642 | __pcpu_size_call_return2(raw_add_return_, pcp, val) | 642 | __pcpu_size_call_return2(raw_cpu_add_return_, pcp, val) |
| 643 | #endif | 643 | #endif |
| 644 | 644 | ||
| 645 | #define raw_cpu_sub_return(pcp, val) raw_cpu_add_return(pcp, -(typeof(pcp))(val)) | 645 | #define raw_cpu_sub_return(pcp, val) raw_cpu_add_return(pcp, -(typeof(pcp))(val)) |
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 3ef6ea12806a..a9209118d80f 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h | |||
| @@ -172,6 +172,7 @@ struct perf_event; | |||
| 172 | struct pmu { | 172 | struct pmu { |
| 173 | struct list_head entry; | 173 | struct list_head entry; |
| 174 | 174 | ||
| 175 | struct module *module; | ||
| 175 | struct device *dev; | 176 | struct device *dev; |
| 176 | const struct attribute_group **attr_groups; | 177 | const struct attribute_group **attr_groups; |
| 177 | const char *name; | 178 | const char *name; |
diff --git a/include/linux/platform_data/at91_adc.h b/include/linux/platform_data/at91_adc.h index b3ca1e94e0c8..7819fc787731 100644 --- a/include/linux/platform_data/at91_adc.h +++ b/include/linux/platform_data/at91_adc.h | |||
| @@ -7,23 +7,10 @@ | |||
| 7 | #ifndef _AT91_ADC_H_ | 7 | #ifndef _AT91_ADC_H_ |
| 8 | #define _AT91_ADC_H_ | 8 | #define _AT91_ADC_H_ |
| 9 | 9 | ||
| 10 | /** | 10 | enum atmel_adc_ts_type { |
| 11 | * struct at91_adc_reg_desc - Various informations relative to registers | 11 | ATMEL_ADC_TOUCHSCREEN_NONE = 0, |
| 12 | * @channel_base: Base offset for the channel data registers | 12 | ATMEL_ADC_TOUCHSCREEN_4WIRE = 4, |
| 13 | * @drdy_mask: Mask of the DRDY field in the relevant registers | 13 | ATMEL_ADC_TOUCHSCREEN_5WIRE = 5, |
| 14 | (Interruptions registers mostly) | ||
| 15 | * @status_register: Offset of the Interrupt Status Register | ||
| 16 | * @trigger_register: Offset of the Trigger setup register | ||
| 17 | * @mr_prescal_mask: Mask of the PRESCAL field in the adc MR register | ||
| 18 | * @mr_startup_mask: Mask of the STARTUP field in the adc MR register | ||
| 19 | */ | ||
| 20 | struct at91_adc_reg_desc { | ||
| 21 | u8 channel_base; | ||
| 22 | u32 drdy_mask; | ||
| 23 | u8 status_register; | ||
| 24 | u8 trigger_register; | ||
| 25 | u32 mr_prescal_mask; | ||
| 26 | u32 mr_startup_mask; | ||
| 27 | }; | 14 | }; |
| 28 | 15 | ||
| 29 | /** | 16 | /** |
| @@ -42,23 +29,21 @@ struct at91_adc_trigger { | |||
| 42 | /** | 29 | /** |
| 43 | * struct at91_adc_data - platform data for ADC driver | 30 | * struct at91_adc_data - platform data for ADC driver |
| 44 | * @channels_used: channels in use on the board as a bitmask | 31 | * @channels_used: channels in use on the board as a bitmask |
| 45 | * @num_channels: global number of channels available on the board | ||
| 46 | * @registers: Registers definition on the board | ||
| 47 | * @startup_time: startup time of the ADC in microseconds | 32 | * @startup_time: startup time of the ADC in microseconds |
| 48 | * @trigger_list: Triggers available in the ADC | 33 | * @trigger_list: Triggers available in the ADC |
| 49 | * @trigger_number: Number of triggers available in the ADC | 34 | * @trigger_number: Number of triggers available in the ADC |
| 50 | * @use_external_triggers: does the board has external triggers availables | 35 | * @use_external_triggers: does the board has external triggers availables |
| 51 | * @vref: Reference voltage for the ADC in millivolts | 36 | * @vref: Reference voltage for the ADC in millivolts |
| 37 | * @touchscreen_type: If a touchscreen is connected, its type (4 or 5 wires) | ||
| 52 | */ | 38 | */ |
| 53 | struct at91_adc_data { | 39 | struct at91_adc_data { |
| 54 | unsigned long channels_used; | 40 | unsigned long channels_used; |
| 55 | u8 num_channels; | ||
| 56 | struct at91_adc_reg_desc *registers; | ||
| 57 | u8 startup_time; | 41 | u8 startup_time; |
| 58 | struct at91_adc_trigger *trigger_list; | 42 | struct at91_adc_trigger *trigger_list; |
| 59 | u8 trigger_number; | 43 | u8 trigger_number; |
| 60 | bool use_external_triggers; | 44 | bool use_external_triggers; |
| 61 | u16 vref; | 45 | u16 vref; |
| 46 | enum atmel_adc_ts_type touchscreen_type; | ||
| 62 | }; | 47 | }; |
| 63 | 48 | ||
| 64 | extern void __init at91_add_device_adc(struct at91_adc_data *data); | 49 | extern void __init at91_add_device_adc(struct at91_adc_data *data); |
diff --git a/include/linux/platform_data/atmel.h b/include/linux/platform_data/atmel.h index e26b0c14edea..4b452c6a2f7b 100644 --- a/include/linux/platform_data/atmel.h +++ b/include/linux/platform_data/atmel.h | |||
| @@ -84,14 +84,6 @@ struct atmel_uart_data { | |||
| 84 | short use_dma_rx; /* use receive DMA? */ | 84 | short use_dma_rx; /* use receive DMA? */ |
| 85 | void __iomem *regs; /* virt. base address, if any */ | 85 | void __iomem *regs; /* virt. base address, if any */ |
| 86 | struct serial_rs485 rs485; /* rs485 settings */ | 86 | struct serial_rs485 rs485; /* rs485 settings */ |
| 87 | int rts_gpio; /* optional RTS GPIO */ | ||
| 88 | }; | ||
| 89 | |||
| 90 | /* Touchscreen Controller */ | ||
| 91 | struct at91_tsadcc_data { | ||
| 92 | unsigned int adc_clock; | ||
| 93 | u8 pendet_debounce; | ||
| 94 | u8 ts_sample_hold_time; | ||
| 95 | }; | 87 | }; |
| 96 | 88 | ||
| 97 | /* CAN */ | 89 | /* CAN */ |
diff --git a/include/linux/platform_data/edma.h b/include/linux/platform_data/edma.h index f50821cb64be..eb8d5627d080 100644 --- a/include/linux/platform_data/edma.h +++ b/include/linux/platform_data/edma.h | |||
| @@ -43,15 +43,15 @@ | |||
| 43 | 43 | ||
| 44 | /* PaRAM slots are laid out like this */ | 44 | /* PaRAM slots are laid out like this */ |
| 45 | struct edmacc_param { | 45 | struct edmacc_param { |
| 46 | unsigned int opt; | 46 | u32 opt; |
| 47 | unsigned int src; | 47 | u32 src; |
| 48 | unsigned int a_b_cnt; | 48 | u32 a_b_cnt; |
| 49 | unsigned int dst; | 49 | u32 dst; |
| 50 | unsigned int src_dst_bidx; | 50 | u32 src_dst_bidx; |
| 51 | unsigned int link_bcntrld; | 51 | u32 link_bcntrld; |
| 52 | unsigned int src_dst_cidx; | 52 | u32 src_dst_cidx; |
| 53 | unsigned int ccnt; | 53 | u32 ccnt; |
| 54 | }; | 54 | } __packed; |
| 55 | 55 | ||
| 56 | /* fields in edmacc_param.opt */ | 56 | /* fields in edmacc_param.opt */ |
| 57 | #define SAM BIT(0) | 57 | #define SAM BIT(0) |
| @@ -130,7 +130,7 @@ void edma_set_src(unsigned slot, dma_addr_t src_port, | |||
| 130 | enum address_mode mode, enum fifo_width); | 130 | enum address_mode mode, enum fifo_width); |
| 131 | void edma_set_dest(unsigned slot, dma_addr_t dest_port, | 131 | void edma_set_dest(unsigned slot, dma_addr_t dest_port, |
| 132 | enum address_mode mode, enum fifo_width); | 132 | enum address_mode mode, enum fifo_width); |
| 133 | void edma_get_position(unsigned slot, dma_addr_t *src, dma_addr_t *dst); | 133 | dma_addr_t edma_get_position(unsigned slot, bool dst); |
| 134 | void edma_set_src_index(unsigned slot, s16 src_bidx, s16 src_cidx); | 134 | void edma_set_src_index(unsigned slot, s16 src_bidx, s16 src_cidx); |
| 135 | void edma_set_dest_index(unsigned slot, s16 dest_bidx, s16 dest_cidx); | 135 | void edma_set_dest_index(unsigned slot, s16 dest_bidx, s16 dest_cidx); |
| 136 | void edma_set_transfer_params(unsigned slot, u16 acnt, u16 bcnt, u16 ccnt, | 136 | void edma_set_transfer_params(unsigned slot, u16 acnt, u16 bcnt, u16 ccnt, |
| @@ -158,13 +158,6 @@ struct edma_rsv_info { | |||
| 158 | 158 | ||
| 159 | /* platform_data for EDMA driver */ | 159 | /* platform_data for EDMA driver */ |
| 160 | struct edma_soc_info { | 160 | struct edma_soc_info { |
| 161 | |||
| 162 | /* how many dma resources of each type */ | ||
| 163 | unsigned n_channel; | ||
| 164 | unsigned n_region; | ||
| 165 | unsigned n_slot; | ||
| 166 | unsigned n_tc; | ||
| 167 | unsigned n_cc; | ||
| 168 | /* | 161 | /* |
| 169 | * Default queue is expected to be a low-priority queue. | 162 | * Default queue is expected to be a low-priority queue. |
| 170 | * This way, long transfers on the default queue started | 163 | * This way, long transfers on the default queue started |
| @@ -175,7 +168,6 @@ struct edma_soc_info { | |||
| 175 | /* Resource reservation for other cores */ | 168 | /* Resource reservation for other cores */ |
| 176 | struct edma_rsv_info *rsv; | 169 | struct edma_rsv_info *rsv; |
| 177 | 170 | ||
| 178 | s8 (*queue_tc_mapping)[2]; | ||
| 179 | s8 (*queue_priority_mapping)[2]; | 171 | s8 (*queue_priority_mapping)[2]; |
| 180 | const s16 (*xbar_chans)[2]; | 172 | const s16 (*xbar_chans)[2]; |
| 181 | }; | 173 | }; |
diff --git a/include/linux/platform_data/max3421-hcd.h b/include/linux/platform_data/max3421-hcd.h new file mode 100644 index 000000000000..0303d1970084 --- /dev/null +++ b/include/linux/platform_data/max3421-hcd.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2014 eGauge Systems LLC | ||
| 3 | * Contributed by David Mosberger-Tang <davidm@egauge.net> | ||
| 4 | * | ||
| 5 | * Platform-data structure for MAX3421 USB HCD driver. | ||
| 6 | * | ||
| 7 | */ | ||
| 8 | #ifndef MAX3421_HCD_PLAT_H_INCLUDED | ||
| 9 | #define MAX3421_HCD_PLAT_H_INCLUDED | ||
| 10 | |||
| 11 | /* | ||
| 12 | * This structure defines the mapping of certain auxiliary functions to the | ||
| 13 | * MAX3421E GPIO pins. The chip has eight GP inputs and eight GP outputs. | ||
| 14 | * A value of 0 indicates that the pin is not used/wired to anything. | ||
| 15 | * | ||
| 16 | * At this point, the only control the max3421-hcd driver cares about is | ||
| 17 | * to control Vbus (5V to the peripheral). | ||
| 18 | */ | ||
| 19 | struct max3421_hcd_platform_data { | ||
| 20 | u8 vbus_gpout; /* pin controlling Vbus */ | ||
| 21 | u8 vbus_active_level; /* level that turns on power */ | ||
| 22 | }; | ||
| 23 | |||
| 24 | #endif /* MAX3421_HCD_PLAT_H_INCLUDED */ | ||
diff --git a/include/linux/platform_data/syscon.h b/include/linux/platform_data/syscon.h new file mode 100644 index 000000000000..2354c6fa3726 --- /dev/null +++ b/include/linux/platform_data/syscon.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #ifndef PLATFORM_DATA_SYSCON_H | ||
| 2 | #define PLATFORM_DATA_SYSCON_H | ||
| 3 | |||
| 4 | struct syscon_platform_data { | ||
| 5 | const char *label; | ||
| 6 | }; | ||
| 7 | |||
| 8 | #endif | ||
diff --git a/include/linux/pm.h b/include/linux/pm.h index d915d0345fa1..72c0fe098a27 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h | |||
| @@ -93,13 +93,23 @@ typedef struct pm_message { | |||
| 93 | * been registered) to recover from the race condition. | 93 | * been registered) to recover from the race condition. |
| 94 | * This method is executed for all kinds of suspend transitions and is | 94 | * This method is executed for all kinds of suspend transitions and is |
| 95 | * followed by one of the suspend callbacks: @suspend(), @freeze(), or | 95 | * followed by one of the suspend callbacks: @suspend(), @freeze(), or |
| 96 | * @poweroff(). The PM core executes subsystem-level @prepare() for all | 96 | * @poweroff(). If the transition is a suspend to memory or standby (that |
| 97 | * devices before starting to invoke suspend callbacks for any of them, so | 97 | * is, not related to hibernation), the return value of @prepare() may be |
| 98 | * generally devices may be assumed to be functional or to respond to | 98 | * used to indicate to the PM core to leave the device in runtime suspend |
| 99 | * runtime resume requests while @prepare() is being executed. However, | 99 | * if applicable. Namely, if @prepare() returns a positive number, the PM |
| 100 | * device drivers may NOT assume anything about the availability of user | 100 | * core will understand that as a declaration that the device appears to be |
| 101 | * space at that time and it is NOT valid to request firmware from within | 101 | * runtime-suspended and it may be left in that state during the entire |
| 102 | * @prepare() (it's too late to do that). It also is NOT valid to allocate | 102 | * transition and during the subsequent resume if all of its descendants |
| 103 | * are left in runtime suspend too. If that happens, @complete() will be | ||
| 104 | * executed directly after @prepare() and it must ensure the proper | ||
| 105 | * functioning of the device after the system resume. | ||
| 106 | * The PM core executes subsystem-level @prepare() for all devices before | ||
| 107 | * starting to invoke suspend callbacks for any of them, so generally | ||
| 108 | * devices may be assumed to be functional or to respond to runtime resume | ||
| 109 | * requests while @prepare() is being executed. However, device drivers | ||
| 110 | * may NOT assume anything about the availability of user space at that | ||
| 111 | * time and it is NOT valid to request firmware from within @prepare() | ||
| 112 | * (it's too late to do that). It also is NOT valid to allocate | ||
| 103 | * substantial amounts of memory from @prepare() in the GFP_KERNEL mode. | 113 | * substantial amounts of memory from @prepare() in the GFP_KERNEL mode. |
| 104 | * [To work around these limitations, drivers may register suspend and | 114 | * [To work around these limitations, drivers may register suspend and |
| 105 | * hibernation notifiers to be executed before the freezing of tasks.] | 115 | * hibernation notifiers to be executed before the freezing of tasks.] |
| @@ -112,7 +122,16 @@ typedef struct pm_message { | |||
| 112 | * of the other devices that the PM core has unsuccessfully attempted to | 122 | * of the other devices that the PM core has unsuccessfully attempted to |
| 113 | * suspend earlier). | 123 | * suspend earlier). |
| 114 | * The PM core executes subsystem-level @complete() after it has executed | 124 | * The PM core executes subsystem-level @complete() after it has executed |
| 115 | * the appropriate resume callbacks for all devices. | 125 | * the appropriate resume callbacks for all devices. If the corresponding |
| 126 | * @prepare() at the beginning of the suspend transition returned a | ||
| 127 | * positive number and the device was left in runtime suspend (without | ||
| 128 | * executing any suspend and resume callbacks for it), @complete() will be | ||
| 129 | * the only callback executed for the device during resume. In that case, | ||
| 130 | * @complete() must be prepared to do whatever is necessary to ensure the | ||
| 131 | * proper functioning of the device after the system resume. To this end, | ||
| 132 | * @complete() can check the power.direct_complete flag of the device to | ||
| 133 | * learn whether (unset) or not (set) the previous suspend and resume | ||
| 134 | * callbacks have been executed for it. | ||
| 116 | * | 135 | * |
| 117 | * @suspend: Executed before putting the system into a sleep state in which the | 136 | * @suspend: Executed before putting the system into a sleep state in which the |
| 118 | * contents of main memory are preserved. The exact action to perform | 137 | * contents of main memory are preserved. The exact action to perform |
| @@ -546,6 +565,7 @@ struct dev_pm_info { | |||
| 546 | bool is_late_suspended:1; | 565 | bool is_late_suspended:1; |
| 547 | bool ignore_children:1; | 566 | bool ignore_children:1; |
| 548 | bool early_init:1; /* Owned by the PM core */ | 567 | bool early_init:1; /* Owned by the PM core */ |
| 568 | bool direct_complete:1; /* Owned by the PM core */ | ||
| 549 | spinlock_t lock; | 569 | spinlock_t lock; |
| 550 | #ifdef CONFIG_PM_SLEEP | 570 | #ifdef CONFIG_PM_SLEEP |
| 551 | struct list_head entry; | 571 | struct list_head entry; |
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index 5151b0059585..0330217abfad 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | #define __LINUX_OPP_H__ | 15 | #define __LINUX_OPP_H__ |
| 16 | 16 | ||
| 17 | #include <linux/err.h> | 17 | #include <linux/err.h> |
| 18 | #include <linux/cpufreq.h> | ||
| 19 | #include <linux/notifier.h> | 18 | #include <linux/notifier.h> |
| 20 | 19 | ||
| 21 | struct dev_pm_opp; | 20 | struct dev_pm_opp; |
| @@ -117,23 +116,4 @@ static inline int of_init_opp_table(struct device *dev) | |||
| 117 | } | 116 | } |
| 118 | #endif | 117 | #endif |
| 119 | 118 | ||
| 120 | #if defined(CONFIG_CPU_FREQ) && defined(CONFIG_PM_OPP) | ||
| 121 | int dev_pm_opp_init_cpufreq_table(struct device *dev, | ||
| 122 | struct cpufreq_frequency_table **table); | ||
| 123 | void dev_pm_opp_free_cpufreq_table(struct device *dev, | ||
| 124 | struct cpufreq_frequency_table **table); | ||
| 125 | #else | ||
| 126 | static inline int dev_pm_opp_init_cpufreq_table(struct device *dev, | ||
| 127 | struct cpufreq_frequency_table **table) | ||
| 128 | { | ||
| 129 | return -EINVAL; | ||
| 130 | } | ||
| 131 | |||
| 132 | static inline | ||
| 133 | void dev_pm_opp_free_cpufreq_table(struct device *dev, | ||
| 134 | struct cpufreq_frequency_table **table) | ||
| 135 | { | ||
| 136 | } | ||
| 137 | #endif /* CONFIG_CPU_FREQ */ | ||
| 138 | |||
| 139 | #endif /* __LINUX_OPP_H__ */ | 119 | #endif /* __LINUX_OPP_H__ */ |
diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h index 2a5897a4afbc..43fd6716f662 100644 --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h | |||
| @@ -101,6 +101,11 @@ static inline bool pm_runtime_status_suspended(struct device *dev) | |||
| 101 | return dev->power.runtime_status == RPM_SUSPENDED; | 101 | return dev->power.runtime_status == RPM_SUSPENDED; |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | static inline bool pm_runtime_suspended_if_enabled(struct device *dev) | ||
| 105 | { | ||
| 106 | return pm_runtime_status_suspended(dev) && dev->power.disable_depth == 1; | ||
| 107 | } | ||
| 108 | |||
| 104 | static inline bool pm_runtime_enabled(struct device *dev) | 109 | static inline bool pm_runtime_enabled(struct device *dev) |
| 105 | { | 110 | { |
| 106 | return !dev->power.disable_depth; | 111 | return !dev->power.disable_depth; |
| @@ -150,6 +155,7 @@ static inline void device_set_run_wake(struct device *dev, bool enable) {} | |||
| 150 | static inline bool pm_runtime_suspended(struct device *dev) { return false; } | 155 | static inline bool pm_runtime_suspended(struct device *dev) { return false; } |
| 151 | static inline bool pm_runtime_active(struct device *dev) { return true; } | 156 | static inline bool pm_runtime_active(struct device *dev) { return true; } |
| 152 | static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } | 157 | static inline bool pm_runtime_status_suspended(struct device *dev) { return false; } |
| 158 | static inline bool pm_runtime_suspended_if_enabled(struct device *dev) { return false; } | ||
| 153 | static inline bool pm_runtime_enabled(struct device *dev) { return false; } | 159 | static inline bool pm_runtime_enabled(struct device *dev) { return false; } |
| 154 | 160 | ||
| 155 | static inline void pm_runtime_no_callbacks(struct device *dev) {} | 161 | static inline void pm_runtime_no_callbacks(struct device *dev) {} |
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h index c9dc4e09854c..f2b76aeaf4e4 100644 --- a/include/linux/power_supply.h +++ b/include/linux/power_supply.h | |||
| @@ -264,6 +264,8 @@ static inline int power_supply_is_system_supplied(void) { return -ENOSYS; } | |||
| 264 | 264 | ||
| 265 | extern int power_supply_register(struct device *parent, | 265 | extern int power_supply_register(struct device *parent, |
| 266 | struct power_supply *psy); | 266 | struct power_supply *psy); |
| 267 | extern int power_supply_register_no_ws(struct device *parent, | ||
| 268 | struct power_supply *psy); | ||
| 267 | extern void power_supply_unregister(struct power_supply *psy); | 269 | extern void power_supply_unregister(struct power_supply *psy); |
| 268 | extern int power_supply_powers(struct power_supply *psy, struct device *dev); | 270 | extern int power_supply_powers(struct power_supply *psy, struct device *dev); |
| 269 | 271 | ||
diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 00a7fd61b3c6..5a75d19aa661 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #include <linux/debugobjects.h> | 44 | #include <linux/debugobjects.h> |
| 45 | #include <linux/bug.h> | 45 | #include <linux/bug.h> |
| 46 | #include <linux/compiler.h> | 46 | #include <linux/compiler.h> |
| 47 | #include <linux/percpu.h> | ||
| 47 | #include <asm/barrier.h> | 48 | #include <asm/barrier.h> |
| 48 | 49 | ||
| 49 | extern int rcu_expedited; /* for sysctl */ | 50 | extern int rcu_expedited; /* for sysctl */ |
| @@ -51,7 +52,17 @@ extern int rcu_expedited; /* for sysctl */ | |||
| 51 | extern int rcutorture_runnable; /* for sysctl */ | 52 | extern int rcutorture_runnable; /* for sysctl */ |
| 52 | #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */ | 53 | #endif /* #ifdef CONFIG_RCU_TORTURE_TEST */ |
| 53 | 54 | ||
| 55 | enum rcutorture_type { | ||
| 56 | RCU_FLAVOR, | ||
| 57 | RCU_BH_FLAVOR, | ||
| 58 | RCU_SCHED_FLAVOR, | ||
| 59 | SRCU_FLAVOR, | ||
| 60 | INVALID_RCU_FLAVOR | ||
| 61 | }; | ||
| 62 | |||
| 54 | #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) | 63 | #if defined(CONFIG_TREE_RCU) || defined(CONFIG_TREE_PREEMPT_RCU) |
| 64 | void rcutorture_get_gp_data(enum rcutorture_type test_type, int *flags, | ||
| 65 | unsigned long *gpnum, unsigned long *completed); | ||
| 55 | void rcutorture_record_test_transition(void); | 66 | void rcutorture_record_test_transition(void); |
| 56 | void rcutorture_record_progress(unsigned long vernum); | 67 | void rcutorture_record_progress(unsigned long vernum); |
| 57 | void do_trace_rcu_torture_read(const char *rcutorturename, | 68 | void do_trace_rcu_torture_read(const char *rcutorturename, |
| @@ -60,6 +71,15 @@ void do_trace_rcu_torture_read(const char *rcutorturename, | |||
| 60 | unsigned long c_old, | 71 | unsigned long c_old, |
| 61 | unsigned long c); | 72 | unsigned long c); |
| 62 | #else | 73 | #else |
| 74 | static inline void rcutorture_get_gp_data(enum rcutorture_type test_type, | ||
| 75 | int *flags, | ||
| 76 | unsigned long *gpnum, | ||
| 77 | unsigned long *completed) | ||
| 78 | { | ||
| 79 | *flags = 0; | ||
| 80 | *gpnum = 0; | ||
| 81 | *completed = 0; | ||
| 82 | } | ||
| 63 | static inline void rcutorture_record_test_transition(void) | 83 | static inline void rcutorture_record_test_transition(void) |
| 64 | { | 84 | { |
| 65 | } | 85 | } |
| @@ -228,6 +248,18 @@ void rcu_idle_exit(void); | |||
| 228 | void rcu_irq_enter(void); | 248 | void rcu_irq_enter(void); |
| 229 | void rcu_irq_exit(void); | 249 | void rcu_irq_exit(void); |
| 230 | 250 | ||
| 251 | #ifdef CONFIG_RCU_STALL_COMMON | ||
| 252 | void rcu_sysrq_start(void); | ||
| 253 | void rcu_sysrq_end(void); | ||
| 254 | #else /* #ifdef CONFIG_RCU_STALL_COMMON */ | ||
| 255 | static inline void rcu_sysrq_start(void) | ||
| 256 | { | ||
| 257 | } | ||
| 258 | static inline void rcu_sysrq_end(void) | ||
| 259 | { | ||
| 260 | } | ||
| 261 | #endif /* #else #ifdef CONFIG_RCU_STALL_COMMON */ | ||
| 262 | |||
| 231 | #ifdef CONFIG_RCU_USER_QS | 263 | #ifdef CONFIG_RCU_USER_QS |
| 232 | void rcu_user_enter(void); | 264 | void rcu_user_enter(void); |
| 233 | void rcu_user_exit(void); | 265 | void rcu_user_exit(void); |
| @@ -268,6 +300,41 @@ bool __rcu_is_watching(void); | |||
| 268 | #endif /* #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) || defined(CONFIG_SMP) */ | 300 | #endif /* #if defined(CONFIG_DEBUG_LOCK_ALLOC) || defined(CONFIG_RCU_TRACE) || defined(CONFIG_SMP) */ |
| 269 | 301 | ||
| 270 | /* | 302 | /* |
| 303 | * Hooks for cond_resched() and friends to avoid RCU CPU stall warnings. | ||
| 304 | */ | ||
| 305 | |||
| 306 | #define RCU_COND_RESCHED_LIM 256 /* ms vs. 100s of ms. */ | ||
| 307 | DECLARE_PER_CPU(int, rcu_cond_resched_count); | ||
| 308 | void rcu_resched(void); | ||
| 309 | |||
| 310 | /* | ||
| 311 | * Is it time to report RCU quiescent states? | ||
| 312 | * | ||
| 313 | * Note unsynchronized access to rcu_cond_resched_count. Yes, we might | ||
| 314 | * increment some random CPU's count, and possibly also load the result from | ||
| 315 | * yet another CPU's count. We might even clobber some other CPU's attempt | ||
| 316 | * to zero its counter. This is all OK because the goal is not precision, | ||
| 317 | * but rather reasonable amortization of rcu_note_context_switch() overhead | ||
| 318 | * and extremely high probability of avoiding RCU CPU stall warnings. | ||
| 319 | * Note that this function has to be preempted in just the wrong place, | ||
| 320 | * many thousands of times in a row, for anything bad to happen. | ||
| 321 | */ | ||
| 322 | static inline bool rcu_should_resched(void) | ||
| 323 | { | ||
| 324 | return raw_cpu_inc_return(rcu_cond_resched_count) >= | ||
| 325 | RCU_COND_RESCHED_LIM; | ||
| 326 | } | ||
| 327 | |||
| 328 | /* | ||
| 329 | * Report quiscent states to RCU if it is time to do so. | ||
| 330 | */ | ||
| 331 | static inline void rcu_cond_resched(void) | ||
| 332 | { | ||
| 333 | if (unlikely(rcu_should_resched())) | ||
| 334 | rcu_resched(); | ||
| 335 | } | ||
| 336 | |||
| 337 | /* | ||
| 271 | * Infrastructure to implement the synchronize_() primitives in | 338 | * Infrastructure to implement the synchronize_() primitives in |
| 272 | * TREE_RCU and rcu_barrier_() primitives in TINY_RCU. | 339 | * TREE_RCU and rcu_barrier_() primitives in TINY_RCU. |
| 273 | */ | 340 | */ |
| @@ -328,7 +395,7 @@ extern struct lockdep_map rcu_lock_map; | |||
| 328 | extern struct lockdep_map rcu_bh_lock_map; | 395 | extern struct lockdep_map rcu_bh_lock_map; |
| 329 | extern struct lockdep_map rcu_sched_lock_map; | 396 | extern struct lockdep_map rcu_sched_lock_map; |
| 330 | extern struct lockdep_map rcu_callback_map; | 397 | extern struct lockdep_map rcu_callback_map; |
| 331 | extern int debug_lockdep_rcu_enabled(void); | 398 | int debug_lockdep_rcu_enabled(void); |
| 332 | 399 | ||
| 333 | /** | 400 | /** |
| 334 | * rcu_read_lock_held() - might we be in RCU read-side critical section? | 401 | * rcu_read_lock_held() - might we be in RCU read-side critical section? |
| @@ -949,6 +1016,9 @@ static inline notrace void rcu_read_unlock_sched_notrace(void) | |||
| 949 | * pointers, but you must use rcu_assign_pointer() to initialize the | 1016 | * pointers, but you must use rcu_assign_pointer() to initialize the |
| 950 | * external-to-structure pointer -after- you have completely initialized | 1017 | * external-to-structure pointer -after- you have completely initialized |
| 951 | * the reader-accessible portions of the linked structure. | 1018 | * the reader-accessible portions of the linked structure. |
| 1019 | * | ||
| 1020 | * Note that unlike rcu_assign_pointer(), RCU_INIT_POINTER() provides no | ||
| 1021 | * ordering guarantees for either the CPU or the compiler. | ||
| 952 | */ | 1022 | */ |
| 953 | #define RCU_INIT_POINTER(p, v) \ | 1023 | #define RCU_INIT_POINTER(p, v) \ |
| 954 | do { \ | 1024 | do { \ |
diff --git a/include/linux/rcutiny.h b/include/linux/rcutiny.h index 425c659d54e5..d40a6a451330 100644 --- a/include/linux/rcutiny.h +++ b/include/linux/rcutiny.h | |||
| @@ -119,6 +119,10 @@ static inline void rcu_sched_force_quiescent_state(void) | |||
| 119 | { | 119 | { |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | static inline void show_rcu_gp_kthreads(void) | ||
| 123 | { | ||
| 124 | } | ||
| 125 | |||
| 122 | static inline void rcu_cpu_stall_reset(void) | 126 | static inline void rcu_cpu_stall_reset(void) |
| 123 | { | 127 | { |
| 124 | } | 128 | } |
diff --git a/include/linux/rcutree.h b/include/linux/rcutree.h index a59ca05fd4e3..3e2f5d432743 100644 --- a/include/linux/rcutree.h +++ b/include/linux/rcutree.h | |||
| @@ -84,6 +84,7 @@ extern unsigned long rcutorture_vernum; | |||
| 84 | long rcu_batches_completed(void); | 84 | long rcu_batches_completed(void); |
| 85 | long rcu_batches_completed_bh(void); | 85 | long rcu_batches_completed_bh(void); |
| 86 | long rcu_batches_completed_sched(void); | 86 | long rcu_batches_completed_sched(void); |
| 87 | void show_rcu_gp_kthreads(void); | ||
| 87 | 88 | ||
| 88 | void rcu_force_quiescent_state(void); | 89 | void rcu_force_quiescent_state(void); |
| 89 | void rcu_bh_force_quiescent_state(void); | 90 | void rcu_bh_force_quiescent_state(void); |
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index 85691b9b4fa7..7b0e4b425cdf 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h | |||
| @@ -276,6 +276,10 @@ typedef int (*regmap_hw_async_write)(void *context, | |||
| 276 | typedef int (*regmap_hw_read)(void *context, | 276 | typedef int (*regmap_hw_read)(void *context, |
| 277 | const void *reg_buf, size_t reg_size, | 277 | const void *reg_buf, size_t reg_size, |
| 278 | void *val_buf, size_t val_size); | 278 | void *val_buf, size_t val_size); |
| 279 | typedef int (*regmap_hw_reg_read)(void *context, unsigned int reg, | ||
| 280 | unsigned int *val); | ||
| 281 | typedef int (*regmap_hw_reg_write)(void *context, unsigned int reg, | ||
| 282 | unsigned int val); | ||
| 279 | typedef struct regmap_async *(*regmap_hw_async_alloc)(void); | 283 | typedef struct regmap_async *(*regmap_hw_async_alloc)(void); |
| 280 | typedef void (*regmap_hw_free_context)(void *context); | 284 | typedef void (*regmap_hw_free_context)(void *context); |
| 281 | 285 | ||
| @@ -309,7 +313,9 @@ struct regmap_bus { | |||
| 309 | regmap_hw_write write; | 313 | regmap_hw_write write; |
| 310 | regmap_hw_gather_write gather_write; | 314 | regmap_hw_gather_write gather_write; |
| 311 | regmap_hw_async_write async_write; | 315 | regmap_hw_async_write async_write; |
| 316 | regmap_hw_reg_write reg_write; | ||
| 312 | regmap_hw_read read; | 317 | regmap_hw_read read; |
| 318 | regmap_hw_reg_read reg_read; | ||
| 313 | regmap_hw_free_context free_context; | 319 | regmap_hw_free_context free_context; |
| 314 | regmap_hw_async_alloc async_alloc; | 320 | regmap_hw_async_alloc async_alloc; |
| 315 | u8 read_flag_mask; | 321 | u8 read_flag_mask; |
diff --git a/include/linux/regulator/consumer.h b/include/linux/regulator/consumer.h index 1a4a8c157b31..a2d9d81038d1 100644 --- a/include/linux/regulator/consumer.h +++ b/include/linux/regulator/consumer.h | |||
| @@ -151,11 +151,13 @@ int regulator_register_supply_alias(struct device *dev, const char *id, | |||
| 151 | const char *alias_id); | 151 | const char *alias_id); |
| 152 | void regulator_unregister_supply_alias(struct device *dev, const char *id); | 152 | void regulator_unregister_supply_alias(struct device *dev, const char *id); |
| 153 | 153 | ||
| 154 | int regulator_bulk_register_supply_alias(struct device *dev, const char **id, | 154 | int regulator_bulk_register_supply_alias(struct device *dev, |
| 155 | const char *const *id, | ||
| 155 | struct device *alias_dev, | 156 | struct device *alias_dev, |
| 156 | const char **alias_id, int num_id); | 157 | const char *const *alias_id, |
| 158 | int num_id); | ||
| 157 | void regulator_bulk_unregister_supply_alias(struct device *dev, | 159 | void regulator_bulk_unregister_supply_alias(struct device *dev, |
| 158 | const char **id, int num_id); | 160 | const char * const *id, int num_id); |
| 159 | 161 | ||
| 160 | int devm_regulator_register_supply_alias(struct device *dev, const char *id, | 162 | int devm_regulator_register_supply_alias(struct device *dev, const char *id, |
| 161 | struct device *alias_dev, | 163 | struct device *alias_dev, |
| @@ -164,12 +166,12 @@ void devm_regulator_unregister_supply_alias(struct device *dev, | |||
| 164 | const char *id); | 166 | const char *id); |
| 165 | 167 | ||
| 166 | int devm_regulator_bulk_register_supply_alias(struct device *dev, | 168 | int devm_regulator_bulk_register_supply_alias(struct device *dev, |
| 167 | const char **id, | 169 | const char *const *id, |
| 168 | struct device *alias_dev, | 170 | struct device *alias_dev, |
| 169 | const char **alias_id, | 171 | const char *const *alias_id, |
| 170 | int num_id); | 172 | int num_id); |
| 171 | void devm_regulator_bulk_unregister_supply_alias(struct device *dev, | 173 | void devm_regulator_bulk_unregister_supply_alias(struct device *dev, |
| 172 | const char **id, | 174 | const char *const *id, |
| 173 | int num_id); | 175 | int num_id); |
| 174 | 176 | ||
| 175 | /* regulator output control and status */ | 177 | /* regulator output control and status */ |
| @@ -290,17 +292,17 @@ static inline void regulator_unregister_supply_alias(struct device *dev, | |||
| 290 | } | 292 | } |
| 291 | 293 | ||
| 292 | static inline int regulator_bulk_register_supply_alias(struct device *dev, | 294 | static inline int regulator_bulk_register_supply_alias(struct device *dev, |
| 293 | const char **id, | 295 | const char *const *id, |
| 294 | struct device *alias_dev, | 296 | struct device *alias_dev, |
| 295 | const char **alias_id, | 297 | const char * const *alias_id, |
| 296 | int num_id) | 298 | int num_id) |
| 297 | { | 299 | { |
| 298 | return 0; | 300 | return 0; |
| 299 | } | 301 | } |
| 300 | 302 | ||
| 301 | static inline void regulator_bulk_unregister_supply_alias(struct device *dev, | 303 | static inline void regulator_bulk_unregister_supply_alias(struct device *dev, |
| 302 | const char **id, | 304 | const char * const *id, |
| 303 | int num_id) | 305 | int num_id) |
| 304 | { | 306 | { |
| 305 | } | 307 | } |
| 306 | 308 | ||
| @@ -317,15 +319,17 @@ static inline void devm_regulator_unregister_supply_alias(struct device *dev, | |||
| 317 | { | 319 | { |
| 318 | } | 320 | } |
| 319 | 321 | ||
| 320 | static inline int devm_regulator_bulk_register_supply_alias( | 322 | static inline int devm_regulator_bulk_register_supply_alias(struct device *dev, |
| 321 | struct device *dev, const char **id, struct device *alias_dev, | 323 | const char *const *id, |
| 322 | const char **alias_id, int num_id) | 324 | struct device *alias_dev, |
| 325 | const char *const *alias_id, | ||
| 326 | int num_id) | ||
| 323 | { | 327 | { |
| 324 | return 0; | 328 | return 0; |
| 325 | } | 329 | } |
| 326 | 330 | ||
| 327 | static inline void devm_regulator_bulk_unregister_supply_alias( | 331 | static inline void devm_regulator_bulk_unregister_supply_alias( |
| 328 | struct device *dev, const char **id, int num_id) | 332 | struct device *dev, const char *const *id, int num_id) |
| 329 | { | 333 | { |
| 330 | } | 334 | } |
| 331 | 335 | ||
| @@ -397,6 +401,12 @@ static inline int regulator_set_voltage(struct regulator *regulator, | |||
| 397 | return 0; | 401 | return 0; |
| 398 | } | 402 | } |
| 399 | 403 | ||
| 404 | static inline int regulator_set_voltage_time(struct regulator *regulator, | ||
| 405 | int old_uV, int new_uV) | ||
| 406 | { | ||
| 407 | return 0; | ||
| 408 | } | ||
| 409 | |||
| 400 | static inline int regulator_get_voltage(struct regulator *regulator) | 410 | static inline int regulator_get_voltage(struct regulator *regulator) |
| 401 | { | 411 | { |
| 402 | return -EINVAL; | 412 | return -EINVAL; |
diff --git a/include/linux/reset.h b/include/linux/reset.h index c0eda5023d74..349f150ae12c 100644 --- a/include/linux/reset.h +++ b/include/linux/reset.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define _LINUX_RESET_H_ | 2 | #define _LINUX_RESET_H_ |
| 3 | 3 | ||
| 4 | struct device; | 4 | struct device; |
| 5 | struct device_node; | ||
| 5 | struct reset_control; | 6 | struct reset_control; |
| 6 | 7 | ||
| 7 | #ifdef CONFIG_RESET_CONTROLLER | 8 | #ifdef CONFIG_RESET_CONTROLLER |
| @@ -33,6 +34,9 @@ static inline struct reset_control *devm_reset_control_get_optional( | |||
| 33 | return devm_reset_control_get(dev, id); | 34 | return devm_reset_control_get(dev, id); |
| 34 | } | 35 | } |
| 35 | 36 | ||
| 37 | struct reset_control *of_reset_control_get(struct device_node *node, | ||
| 38 | const char *id); | ||
| 39 | |||
| 36 | #else | 40 | #else |
| 37 | 41 | ||
| 38 | static inline int reset_control_reset(struct reset_control *rstc) | 42 | static inline int reset_control_reset(struct reset_control *rstc) |
| @@ -75,6 +79,12 @@ static inline struct reset_control *devm_reset_control_get_optional( | |||
| 75 | return ERR_PTR(-ENOSYS); | 79 | return ERR_PTR(-ENOSYS); |
| 76 | } | 80 | } |
| 77 | 81 | ||
| 82 | static inline struct reset_control *of_reset_control_get( | ||
| 83 | struct device_node *node, const char *id) | ||
| 84 | { | ||
| 85 | return ERR_PTR(-ENOSYS); | ||
| 86 | } | ||
| 87 | |||
| 78 | #endif /* CONFIG_RESET_CONTROLLER */ | 88 | #endif /* CONFIG_RESET_CONTROLLER */ |
| 79 | 89 | ||
| 80 | #endif | 90 | #endif |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 221b2bde3723..70f67e4e6156 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -870,6 +870,7 @@ enum cpu_idle_type { | |||
| 870 | #define SD_BALANCE_WAKE 0x0010 /* Balance on wakeup */ | 870 | #define SD_BALANCE_WAKE 0x0010 /* Balance on wakeup */ |
| 871 | #define SD_WAKE_AFFINE 0x0020 /* Wake task to waking CPU */ | 871 | #define SD_WAKE_AFFINE 0x0020 /* Wake task to waking CPU */ |
| 872 | #define SD_SHARE_CPUPOWER 0x0080 /* Domain members share cpu power */ | 872 | #define SD_SHARE_CPUPOWER 0x0080 /* Domain members share cpu power */ |
| 873 | #define SD_SHARE_POWERDOMAIN 0x0100 /* Domain members share power domain */ | ||
| 873 | #define SD_SHARE_PKG_RESOURCES 0x0200 /* Domain members share cpu pkg resources */ | 874 | #define SD_SHARE_PKG_RESOURCES 0x0200 /* Domain members share cpu pkg resources */ |
| 874 | #define SD_SERIALIZE 0x0400 /* Only a single load balancing instance */ | 875 | #define SD_SERIALIZE 0x0400 /* Only a single load balancing instance */ |
| 875 | #define SD_ASYM_PACKING 0x0800 /* Place busy groups earlier in the domain */ | 876 | #define SD_ASYM_PACKING 0x0800 /* Place busy groups earlier in the domain */ |
| @@ -877,7 +878,26 @@ enum cpu_idle_type { | |||
| 877 | #define SD_OVERLAP 0x2000 /* sched_domains of this level overlap */ | 878 | #define SD_OVERLAP 0x2000 /* sched_domains of this level overlap */ |
| 878 | #define SD_NUMA 0x4000 /* cross-node balancing */ | 879 | #define SD_NUMA 0x4000 /* cross-node balancing */ |
| 879 | 880 | ||
| 880 | extern int __weak arch_sd_sibiling_asym_packing(void); | 881 | #ifdef CONFIG_SCHED_SMT |
| 882 | static inline const int cpu_smt_flags(void) | ||
| 883 | { | ||
| 884 | return SD_SHARE_CPUPOWER | SD_SHARE_PKG_RESOURCES; | ||
| 885 | } | ||
| 886 | #endif | ||
| 887 | |||
| 888 | #ifdef CONFIG_SCHED_MC | ||
| 889 | static inline const int cpu_core_flags(void) | ||
| 890 | { | ||
| 891 | return SD_SHARE_PKG_RESOURCES; | ||
| 892 | } | ||
| 893 | #endif | ||
| 894 | |||
| 895 | #ifdef CONFIG_NUMA | ||
| 896 | static inline const int cpu_numa_flags(void) | ||
| 897 | { | ||
| 898 | return SD_NUMA; | ||
| 899 | } | ||
| 900 | #endif | ||
| 881 | 901 | ||
| 882 | struct sched_domain_attr { | 902 | struct sched_domain_attr { |
| 883 | int relax_domain_level; | 903 | int relax_domain_level; |
| @@ -985,6 +1005,38 @@ void free_sched_domains(cpumask_var_t doms[], unsigned int ndoms); | |||
| 985 | 1005 | ||
| 986 | bool cpus_share_cache(int this_cpu, int that_cpu); | 1006 | bool cpus_share_cache(int this_cpu, int that_cpu); |
| 987 | 1007 | ||
| 1008 | typedef const struct cpumask *(*sched_domain_mask_f)(int cpu); | ||
| 1009 | typedef const int (*sched_domain_flags_f)(void); | ||
| 1010 | |||
| 1011 | #define SDTL_OVERLAP 0x01 | ||
| 1012 | |||
| 1013 | struct sd_data { | ||
| 1014 | struct sched_domain **__percpu sd; | ||
| 1015 | struct sched_group **__percpu sg; | ||
| 1016 | struct sched_group_power **__percpu sgp; | ||
| 1017 | }; | ||
| 1018 | |||
| 1019 | struct sched_domain_topology_level { | ||
| 1020 | sched_domain_mask_f mask; | ||
| 1021 | sched_domain_flags_f sd_flags; | ||
| 1022 | int flags; | ||
| 1023 | int numa_level; | ||
| 1024 | struct sd_data data; | ||
| 1025 | #ifdef CONFIG_SCHED_DEBUG | ||
| 1026 | char *name; | ||
| 1027 | #endif | ||
| 1028 | }; | ||
| 1029 | |||
| 1030 | extern struct sched_domain_topology_level *sched_domain_topology; | ||
| 1031 | |||
| 1032 | extern void set_sched_topology(struct sched_domain_topology_level *tl); | ||
| 1033 | |||
| 1034 | #ifdef CONFIG_SCHED_DEBUG | ||
| 1035 | # define SD_INIT_NAME(type) .name = #type | ||
| 1036 | #else | ||
| 1037 | # define SD_INIT_NAME(type) | ||
| 1038 | #endif | ||
| 1039 | |||
| 988 | #else /* CONFIG_SMP */ | 1040 | #else /* CONFIG_SMP */ |
| 989 | 1041 | ||
| 990 | struct sched_domain_attr; | 1042 | struct sched_domain_attr; |
| @@ -1123,8 +1175,8 @@ struct sched_dl_entity { | |||
| 1123 | 1175 | ||
| 1124 | /* | 1176 | /* |
| 1125 | * Original scheduling parameters. Copied here from sched_attr | 1177 | * Original scheduling parameters. Copied here from sched_attr |
| 1126 | * during sched_setscheduler2(), they will remain the same until | 1178 | * during sched_setattr(), they will remain the same until |
| 1127 | * the next sched_setscheduler2(). | 1179 | * the next sched_setattr(). |
| 1128 | */ | 1180 | */ |
| 1129 | u64 dl_runtime; /* maximum runtime for each instance */ | 1181 | u64 dl_runtime; /* maximum runtime for each instance */ |
| 1130 | u64 dl_deadline; /* relative deadline of each instance */ | 1182 | u64 dl_deadline; /* relative deadline of each instance */ |
| @@ -2723,51 +2775,9 @@ static inline int spin_needbreak(spinlock_t *lock) | |||
| 2723 | 2775 | ||
| 2724 | /* | 2776 | /* |
| 2725 | * Idle thread specific functions to determine the need_resched | 2777 | * Idle thread specific functions to determine the need_resched |
| 2726 | * polling state. We have two versions, one based on TS_POLLING in | 2778 | * polling state. |
| 2727 | * thread_info.status and one based on TIF_POLLING_NRFLAG in | ||
| 2728 | * thread_info.flags | ||
| 2729 | */ | 2779 | */ |
| 2730 | #ifdef TS_POLLING | 2780 | #ifdef TIF_POLLING_NRFLAG |
| 2731 | static inline int tsk_is_polling(struct task_struct *p) | ||
| 2732 | { | ||
| 2733 | return task_thread_info(p)->status & TS_POLLING; | ||
| 2734 | } | ||
| 2735 | static inline void __current_set_polling(void) | ||
| 2736 | { | ||
| 2737 | current_thread_info()->status |= TS_POLLING; | ||
| 2738 | } | ||
| 2739 | |||
| 2740 | static inline bool __must_check current_set_polling_and_test(void) | ||
| 2741 | { | ||
| 2742 | __current_set_polling(); | ||
| 2743 | |||
| 2744 | /* | ||
| 2745 | * Polling state must be visible before we test NEED_RESCHED, | ||
| 2746 | * paired by resched_task() | ||
| 2747 | */ | ||
| 2748 | smp_mb(); | ||
| 2749 | |||
| 2750 | return unlikely(tif_need_resched()); | ||
| 2751 | } | ||
| 2752 | |||
| 2753 | static inline void __current_clr_polling(void) | ||
| 2754 | { | ||
| 2755 | current_thread_info()->status &= ~TS_POLLING; | ||
| 2756 | } | ||
| 2757 | |||
| 2758 | static inline bool __must_check current_clr_polling_and_test(void) | ||
| 2759 | { | ||
| 2760 | __current_clr_polling(); | ||
| 2761 | |||
| 2762 | /* | ||
| 2763 | * Polling state must be visible before we test NEED_RESCHED, | ||
| 2764 | * paired by resched_task() | ||
| 2765 | */ | ||
| 2766 | smp_mb(); | ||
| 2767 | |||
| 2768 | return unlikely(tif_need_resched()); | ||
| 2769 | } | ||
| 2770 | #elif defined(TIF_POLLING_NRFLAG) | ||
| 2771 | static inline int tsk_is_polling(struct task_struct *p) | 2781 | static inline int tsk_is_polling(struct task_struct *p) |
| 2772 | { | 2782 | { |
| 2773 | return test_tsk_thread_flag(p, TIF_POLLING_NRFLAG); | 2783 | return test_tsk_thread_flag(p, TIF_POLLING_NRFLAG); |
| @@ -2785,10 +2795,8 @@ static inline bool __must_check current_set_polling_and_test(void) | |||
| 2785 | /* | 2795 | /* |
| 2786 | * Polling state must be visible before we test NEED_RESCHED, | 2796 | * Polling state must be visible before we test NEED_RESCHED, |
| 2787 | * paired by resched_task() | 2797 | * paired by resched_task() |
| 2788 | * | ||
| 2789 | * XXX: assumes set/clear bit are identical barrier wise. | ||
| 2790 | */ | 2798 | */ |
| 2791 | smp_mb__after_clear_bit(); | 2799 | smp_mb__after_atomic(); |
| 2792 | 2800 | ||
| 2793 | return unlikely(tif_need_resched()); | 2801 | return unlikely(tif_need_resched()); |
| 2794 | } | 2802 | } |
| @@ -2806,7 +2814,7 @@ static inline bool __must_check current_clr_polling_and_test(void) | |||
| 2806 | * Polling state must be visible before we test NEED_RESCHED, | 2814 | * Polling state must be visible before we test NEED_RESCHED, |
| 2807 | * paired by resched_task() | 2815 | * paired by resched_task() |
| 2808 | */ | 2816 | */ |
| 2809 | smp_mb__after_clear_bit(); | 2817 | smp_mb__after_atomic(); |
| 2810 | 2818 | ||
| 2811 | return unlikely(tif_need_resched()); | 2819 | return unlikely(tif_need_resched()); |
| 2812 | } | 2820 | } |
diff --git a/include/linux/sched/prio.h b/include/linux/sched/prio.h index ac322583c820..d9cf5a5762d9 100644 --- a/include/linux/sched/prio.h +++ b/include/linux/sched/prio.h | |||
| @@ -41,4 +41,20 @@ | |||
| 41 | #define TASK_USER_PRIO(p) USER_PRIO((p)->static_prio) | 41 | #define TASK_USER_PRIO(p) USER_PRIO((p)->static_prio) |
| 42 | #define MAX_USER_PRIO (USER_PRIO(MAX_PRIO)) | 42 | #define MAX_USER_PRIO (USER_PRIO(MAX_PRIO)) |
| 43 | 43 | ||
| 44 | /* | ||
| 45 | * Convert nice value [19,-20] to rlimit style value [1,40]. | ||
| 46 | */ | ||
| 47 | static inline long nice_to_rlimit(long nice) | ||
| 48 | { | ||
| 49 | return (MAX_NICE - nice + 1); | ||
| 50 | } | ||
| 51 | |||
| 52 | /* | ||
| 53 | * Convert rlimit style value [1,40] to nice value [-20, 19]. | ||
| 54 | */ | ||
| 55 | static inline long rlimit_to_nice(long prio) | ||
| 56 | { | ||
| 57 | return (MAX_NICE - prio + 1); | ||
| 58 | } | ||
| 59 | |||
| 44 | #endif /* _SCHED_PRIO_H */ | 60 | #endif /* _SCHED_PRIO_H */ |
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index f729be981da0..7a15b5b24c0b 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -285,6 +285,22 @@ static inline int uart_poll_timeout(struct uart_port *port) | |||
| 285 | /* | 285 | /* |
| 286 | * Console helpers. | 286 | * Console helpers. |
| 287 | */ | 287 | */ |
| 288 | struct earlycon_device { | ||
| 289 | struct console *con; | ||
| 290 | struct uart_port port; | ||
| 291 | char options[16]; /* e.g., 115200n8 */ | ||
| 292 | unsigned int baud; | ||
| 293 | }; | ||
| 294 | int setup_earlycon(char *buf, const char *match, | ||
| 295 | int (*setup)(struct earlycon_device *, const char *)); | ||
| 296 | |||
| 297 | #define EARLYCON_DECLARE(name, func) \ | ||
| 298 | static int __init name ## _setup_earlycon(char *buf) \ | ||
| 299 | { \ | ||
| 300 | return setup_earlycon(buf, __stringify(name), func); \ | ||
| 301 | } \ | ||
| 302 | early_param("earlycon", name ## _setup_earlycon); | ||
| 303 | |||
| 288 | struct uart_port *uart_get_console(struct uart_port *ports, int nr, | 304 | struct uart_port *uart_get_console(struct uart_port *ports, int nr, |
| 289 | struct console *c); | 305 | struct console *c); |
| 290 | void uart_parse_options(char *options, int *baud, int *parity, int *bits, | 306 | void uart_parse_options(char *options, int *baud, int *parity, int *bits, |
diff --git a/include/linux/sh_timer.h b/include/linux/sh_timer.h index 4d9dcd138315..8e1e036d6d45 100644 --- a/include/linux/sh_timer.h +++ b/include/linux/sh_timer.h | |||
| @@ -7,6 +7,7 @@ struct sh_timer_config { | |||
| 7 | int timer_bit; | 7 | int timer_bit; |
| 8 | unsigned long clockevent_rating; | 8 | unsigned long clockevent_rating; |
| 9 | unsigned long clocksource_rating; | 9 | unsigned long clocksource_rating; |
| 10 | unsigned int channels_mask; | ||
| 10 | }; | 11 | }; |
| 11 | 12 | ||
| 12 | #endif /* __SH_TIMER_H__ */ | 13 | #endif /* __SH_TIMER_H__ */ |
diff --git a/include/linux/spi/adi_spi3.h b/include/linux/spi/adi_spi3.h new file mode 100644 index 000000000000..c84123aa1d06 --- /dev/null +++ b/include/linux/spi/adi_spi3.h | |||
| @@ -0,0 +1,254 @@ | |||
| 1 | /* | ||
| 2 | * Analog Devices SPI3 controller driver | ||
| 3 | * | ||
| 4 | * Copyright (c) 2014 Analog Devices Inc. | ||
| 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 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | */ | ||
| 15 | |||
| 16 | #ifndef _ADI_SPI3_H_ | ||
| 17 | #define _ADI_SPI3_H_ | ||
| 18 | |||
| 19 | #include <linux/types.h> | ||
| 20 | |||
| 21 | /* SPI_CONTROL */ | ||
| 22 | #define SPI_CTL_EN 0x00000001 /* Enable */ | ||
| 23 | #define SPI_CTL_MSTR 0x00000002 /* Master/Slave */ | ||
| 24 | #define SPI_CTL_PSSE 0x00000004 /* controls modf error in master mode */ | ||
| 25 | #define SPI_CTL_ODM 0x00000008 /* Open Drain Mode */ | ||
| 26 | #define SPI_CTL_CPHA 0x00000010 /* Clock Phase */ | ||
| 27 | #define SPI_CTL_CPOL 0x00000020 /* Clock Polarity */ | ||
| 28 | #define SPI_CTL_ASSEL 0x00000040 /* Slave Select Pin Control */ | ||
| 29 | #define SPI_CTL_SELST 0x00000080 /* Slave Select Polarity in-between transfers */ | ||
| 30 | #define SPI_CTL_EMISO 0x00000100 /* Enable MISO */ | ||
| 31 | #define SPI_CTL_SIZE 0x00000600 /* Word Transfer Size */ | ||
| 32 | #define SPI_CTL_SIZE08 0x00000000 /* SIZE: 8 bits */ | ||
| 33 | #define SPI_CTL_SIZE16 0x00000200 /* SIZE: 16 bits */ | ||
| 34 | #define SPI_CTL_SIZE32 0x00000400 /* SIZE: 32 bits */ | ||
| 35 | #define SPI_CTL_LSBF 0x00001000 /* LSB First */ | ||
| 36 | #define SPI_CTL_FCEN 0x00002000 /* Flow-Control Enable */ | ||
| 37 | #define SPI_CTL_FCCH 0x00004000 /* Flow-Control Channel Selection */ | ||
| 38 | #define SPI_CTL_FCPL 0x00008000 /* Flow-Control Polarity */ | ||
| 39 | #define SPI_CTL_FCWM 0x00030000 /* Flow-Control Water-Mark */ | ||
| 40 | #define SPI_CTL_FIFO0 0x00000000 /* FCWM: TFIFO empty or RFIFO Full */ | ||
| 41 | #define SPI_CTL_FIFO1 0x00010000 /* FCWM: TFIFO 75% or more empty or RFIFO 75% or more full */ | ||
| 42 | #define SPI_CTL_FIFO2 0x00020000 /* FCWM: TFIFO 50% or more empty or RFIFO 50% or more full */ | ||
| 43 | #define SPI_CTL_FMODE 0x00040000 /* Fast-mode Enable */ | ||
| 44 | #define SPI_CTL_MIOM 0x00300000 /* Multiple I/O Mode */ | ||
| 45 | #define SPI_CTL_MIO_DIS 0x00000000 /* MIOM: Disable */ | ||
| 46 | #define SPI_CTL_MIO_DUAL 0x00100000 /* MIOM: Enable DIOM (Dual I/O Mode) */ | ||
| 47 | #define SPI_CTL_MIO_QUAD 0x00200000 /* MIOM: Enable QUAD (Quad SPI Mode) */ | ||
| 48 | #define SPI_CTL_SOSI 0x00400000 /* Start on MOSI */ | ||
| 49 | /* SPI_RX_CONTROL */ | ||
| 50 | #define SPI_RXCTL_REN 0x00000001 /* Receive Channel Enable */ | ||
| 51 | #define SPI_RXCTL_RTI 0x00000004 /* Receive Transfer Initiate */ | ||
| 52 | #define SPI_RXCTL_RWCEN 0x00000008 /* Receive Word Counter Enable */ | ||
| 53 | #define SPI_RXCTL_RDR 0x00000070 /* Receive Data Request */ | ||
| 54 | #define SPI_RXCTL_RDR_DIS 0x00000000 /* RDR: Disabled */ | ||
| 55 | #define SPI_RXCTL_RDR_NE 0x00000010 /* RDR: RFIFO not empty */ | ||
| 56 | #define SPI_RXCTL_RDR_25 0x00000020 /* RDR: RFIFO 25% full */ | ||
| 57 | #define SPI_RXCTL_RDR_50 0x00000030 /* RDR: RFIFO 50% full */ | ||
| 58 | #define SPI_RXCTL_RDR_75 0x00000040 /* RDR: RFIFO 75% full */ | ||
| 59 | #define SPI_RXCTL_RDR_FULL 0x00000050 /* RDR: RFIFO full */ | ||
| 60 | #define SPI_RXCTL_RDO 0x00000100 /* Receive Data Over-Run */ | ||
| 61 | #define SPI_RXCTL_RRWM 0x00003000 /* FIFO Regular Water-Mark */ | ||
| 62 | #define SPI_RXCTL_RWM_0 0x00000000 /* RRWM: RFIFO Empty */ | ||
| 63 | #define SPI_RXCTL_RWM_25 0x00001000 /* RRWM: RFIFO 25% full */ | ||
| 64 | #define SPI_RXCTL_RWM_50 0x00002000 /* RRWM: RFIFO 50% full */ | ||
| 65 | #define SPI_RXCTL_RWM_75 0x00003000 /* RRWM: RFIFO 75% full */ | ||
| 66 | #define SPI_RXCTL_RUWM 0x00070000 /* FIFO Urgent Water-Mark */ | ||
| 67 | #define SPI_RXCTL_UWM_DIS 0x00000000 /* RUWM: Disabled */ | ||
| 68 | #define SPI_RXCTL_UWM_25 0x00010000 /* RUWM: RFIFO 25% full */ | ||
| 69 | #define SPI_RXCTL_UWM_50 0x00020000 /* RUWM: RFIFO 50% full */ | ||
| 70 | #define SPI_RXCTL_UWM_75 0x00030000 /* RUWM: RFIFO 75% full */ | ||
| 71 | #define SPI_RXCTL_UWM_FULL 0x00040000 /* RUWM: RFIFO full */ | ||
| 72 | /* SPI_TX_CONTROL */ | ||
| 73 | #define SPI_TXCTL_TEN 0x00000001 /* Transmit Channel Enable */ | ||
| 74 | #define SPI_TXCTL_TTI 0x00000004 /* Transmit Transfer Initiate */ | ||
| 75 | #define SPI_TXCTL_TWCEN 0x00000008 /* Transmit Word Counter Enable */ | ||
| 76 | #define SPI_TXCTL_TDR 0x00000070 /* Transmit Data Request */ | ||
| 77 | #define SPI_TXCTL_TDR_DIS 0x00000000 /* TDR: Disabled */ | ||
| 78 | #define SPI_TXCTL_TDR_NF 0x00000010 /* TDR: TFIFO not full */ | ||
| 79 | #define SPI_TXCTL_TDR_25 0x00000020 /* TDR: TFIFO 25% empty */ | ||
| 80 | #define SPI_TXCTL_TDR_50 0x00000030 /* TDR: TFIFO 50% empty */ | ||
| 81 | #define SPI_TXCTL_TDR_75 0x00000040 /* TDR: TFIFO 75% empty */ | ||
| 82 | #define SPI_TXCTL_TDR_EMPTY 0x00000050 /* TDR: TFIFO empty */ | ||
| 83 | #define SPI_TXCTL_TDU 0x00000100 /* Transmit Data Under-Run */ | ||
| 84 | #define SPI_TXCTL_TRWM 0x00003000 /* FIFO Regular Water-Mark */ | ||
| 85 | #define SPI_TXCTL_RWM_FULL 0x00000000 /* TRWM: TFIFO full */ | ||
| 86 | #define SPI_TXCTL_RWM_25 0x00001000 /* TRWM: TFIFO 25% empty */ | ||
| 87 | #define SPI_TXCTL_RWM_50 0x00002000 /* TRWM: TFIFO 50% empty */ | ||
| 88 | #define SPI_TXCTL_RWM_75 0x00003000 /* TRWM: TFIFO 75% empty */ | ||
| 89 | #define SPI_TXCTL_TUWM 0x00070000 /* FIFO Urgent Water-Mark */ | ||
| 90 | #define SPI_TXCTL_UWM_DIS 0x00000000 /* TUWM: Disabled */ | ||
| 91 | #define SPI_TXCTL_UWM_25 0x00010000 /* TUWM: TFIFO 25% empty */ | ||
| 92 | #define SPI_TXCTL_UWM_50 0x00020000 /* TUWM: TFIFO 50% empty */ | ||
| 93 | #define SPI_TXCTL_UWM_75 0x00030000 /* TUWM: TFIFO 75% empty */ | ||
| 94 | #define SPI_TXCTL_UWM_EMPTY 0x00040000 /* TUWM: TFIFO empty */ | ||
| 95 | /* SPI_CLOCK */ | ||
| 96 | #define SPI_CLK_BAUD 0x0000FFFF /* Baud Rate */ | ||
| 97 | /* SPI_DELAY */ | ||
| 98 | #define SPI_DLY_STOP 0x000000FF /* Transfer delay time in multiples of SCK period */ | ||
| 99 | #define SPI_DLY_LEADX 0x00000100 /* Extended (1 SCK) LEAD Control */ | ||
| 100 | #define SPI_DLY_LAGX 0x00000200 /* Extended (1 SCK) LAG control */ | ||
| 101 | /* SPI_SSEL */ | ||
| 102 | #define SPI_SLVSEL_SSE1 0x00000002 /* SPISSEL1 Enable */ | ||
| 103 | #define SPI_SLVSEL_SSE2 0x00000004 /* SPISSEL2 Enable */ | ||
| 104 | #define SPI_SLVSEL_SSE3 0x00000008 /* SPISSEL3 Enable */ | ||
| 105 | #define SPI_SLVSEL_SSE4 0x00000010 /* SPISSEL4 Enable */ | ||
| 106 | #define SPI_SLVSEL_SSE5 0x00000020 /* SPISSEL5 Enable */ | ||
| 107 | #define SPI_SLVSEL_SSE6 0x00000040 /* SPISSEL6 Enable */ | ||
| 108 | #define SPI_SLVSEL_SSE7 0x00000080 /* SPISSEL7 Enable */ | ||
| 109 | #define SPI_SLVSEL_SSEL1 0x00000200 /* SPISSEL1 Value */ | ||
| 110 | #define SPI_SLVSEL_SSEL2 0x00000400 /* SPISSEL2 Value */ | ||
| 111 | #define SPI_SLVSEL_SSEL3 0x00000800 /* SPISSEL3 Value */ | ||
| 112 | #define SPI_SLVSEL_SSEL4 0x00001000 /* SPISSEL4 Value */ | ||
| 113 | #define SPI_SLVSEL_SSEL5 0x00002000 /* SPISSEL5 Value */ | ||
| 114 | #define SPI_SLVSEL_SSEL6 0x00004000 /* SPISSEL6 Value */ | ||
| 115 | #define SPI_SLVSEL_SSEL7 0x00008000 /* SPISSEL7 Value */ | ||
| 116 | /* SPI_RWC */ | ||
| 117 | #define SPI_RWC_VALUE 0x0000FFFF /* Received Word-Count */ | ||
| 118 | /* SPI_RWCR */ | ||
| 119 | #define SPI_RWCR_VALUE 0x0000FFFF /* Received Word-Count Reload */ | ||
| 120 | /* SPI_TWC */ | ||
| 121 | #define SPI_TWC_VALUE 0x0000FFFF /* Transmitted Word-Count */ | ||
| 122 | /* SPI_TWCR */ | ||
| 123 | #define SPI_TWCR_VALUE 0x0000FFFF /* Transmitted Word-Count Reload */ | ||
| 124 | /* SPI_IMASK */ | ||
| 125 | #define SPI_IMSK_RUWM 0x00000002 /* Receive Urgent Water-Mark Interrupt Mask */ | ||
| 126 | #define SPI_IMSK_TUWM 0x00000004 /* Transmit Urgent Water-Mark Interrupt Mask */ | ||
| 127 | #define SPI_IMSK_ROM 0x00000010 /* Receive Over-Run Error Interrupt Mask */ | ||
| 128 | #define SPI_IMSK_TUM 0x00000020 /* Transmit Under-Run Error Interrupt Mask */ | ||
| 129 | #define SPI_IMSK_TCM 0x00000040 /* Transmit Collision Error Interrupt Mask */ | ||
| 130 | #define SPI_IMSK_MFM 0x00000080 /* Mode Fault Error Interrupt Mask */ | ||
| 131 | #define SPI_IMSK_RSM 0x00000100 /* Receive Start Interrupt Mask */ | ||
| 132 | #define SPI_IMSK_TSM 0x00000200 /* Transmit Start Interrupt Mask */ | ||
| 133 | #define SPI_IMSK_RFM 0x00000400 /* Receive Finish Interrupt Mask */ | ||
| 134 | #define SPI_IMSK_TFM 0x00000800 /* Transmit Finish Interrupt Mask */ | ||
| 135 | /* SPI_IMASKCL */ | ||
| 136 | #define SPI_IMSK_CLR_RUW 0x00000002 /* Receive Urgent Water-Mark Interrupt Mask */ | ||
| 137 | #define SPI_IMSK_CLR_TUWM 0x00000004 /* Transmit Urgent Water-Mark Interrupt Mask */ | ||
| 138 | #define SPI_IMSK_CLR_ROM 0x00000010 /* Receive Over-Run Error Interrupt Mask */ | ||
| 139 | #define SPI_IMSK_CLR_TUM 0x00000020 /* Transmit Under-Run Error Interrupt Mask */ | ||
| 140 | #define SPI_IMSK_CLR_TCM 0x00000040 /* Transmit Collision Error Interrupt Mask */ | ||
| 141 | #define SPI_IMSK_CLR_MFM 0x00000080 /* Mode Fault Error Interrupt Mask */ | ||
| 142 | #define SPI_IMSK_CLR_RSM 0x00000100 /* Receive Start Interrupt Mask */ | ||
| 143 | #define SPI_IMSK_CLR_TSM 0x00000200 /* Transmit Start Interrupt Mask */ | ||
| 144 | #define SPI_IMSK_CLR_RFM 0x00000400 /* Receive Finish Interrupt Mask */ | ||
| 145 | #define SPI_IMSK_CLR_TFM 0x00000800 /* Transmit Finish Interrupt Mask */ | ||
| 146 | /* SPI_IMASKST */ | ||
| 147 | #define SPI_IMSK_SET_RUWM 0x00000002 /* Receive Urgent Water-Mark Interrupt Mask */ | ||
| 148 | #define SPI_IMSK_SET_TUWM 0x00000004 /* Transmit Urgent Water-Mark Interrupt Mask */ | ||
| 149 | #define SPI_IMSK_SET_ROM 0x00000010 /* Receive Over-Run Error Interrupt Mask */ | ||
| 150 | #define SPI_IMSK_SET_TUM 0x00000020 /* Transmit Under-Run Error Interrupt Mask */ | ||
| 151 | #define SPI_IMSK_SET_TCM 0x00000040 /* Transmit Collision Error Interrupt Mask */ | ||
| 152 | #define SPI_IMSK_SET_MFM 0x00000080 /* Mode Fault Error Interrupt Mask */ | ||
| 153 | #define SPI_IMSK_SET_RSM 0x00000100 /* Receive Start Interrupt Mask */ | ||
| 154 | #define SPI_IMSK_SET_TSM 0x00000200 /* Transmit Start Interrupt Mask */ | ||
| 155 | #define SPI_IMSK_SET_RFM 0x00000400 /* Receive Finish Interrupt Mask */ | ||
| 156 | #define SPI_IMSK_SET_TFM 0x00000800 /* Transmit Finish Interrupt Mask */ | ||
| 157 | /* SPI_STATUS */ | ||
| 158 | #define SPI_STAT_SPIF 0x00000001 /* SPI Finished */ | ||
| 159 | #define SPI_STAT_RUWM 0x00000002 /* Receive Urgent Water-Mark Breached */ | ||
| 160 | #define SPI_STAT_TUWM 0x00000004 /* Transmit Urgent Water-Mark Breached */ | ||
| 161 | #define SPI_STAT_ROE 0x00000010 /* Receive Over-Run Error Indication */ | ||
| 162 | #define SPI_STAT_TUE 0x00000020 /* Transmit Under-Run Error Indication */ | ||
| 163 | #define SPI_STAT_TCE 0x00000040 /* Transmit Collision Error Indication */ | ||
| 164 | #define SPI_STAT_MODF 0x00000080 /* Mode Fault Error Indication */ | ||
| 165 | #define SPI_STAT_RS 0x00000100 /* Receive Start Indication */ | ||
| 166 | #define SPI_STAT_TS 0x00000200 /* Transmit Start Indication */ | ||
| 167 | #define SPI_STAT_RF 0x00000400 /* Receive Finish Indication */ | ||
| 168 | #define SPI_STAT_TF 0x00000800 /* Transmit Finish Indication */ | ||
| 169 | #define SPI_STAT_RFS 0x00007000 /* SPI_RFIFO status */ | ||
| 170 | #define SPI_STAT_RFIFO_EMPTY 0x00000000 /* RFS: RFIFO Empty */ | ||
| 171 | #define SPI_STAT_RFIFO_25 0x00001000 /* RFS: RFIFO 25% Full */ | ||
| 172 | #define SPI_STAT_RFIFO_50 0x00002000 /* RFS: RFIFO 50% Full */ | ||
| 173 | #define SPI_STAT_RFIFO_75 0x00003000 /* RFS: RFIFO 75% Full */ | ||
| 174 | #define SPI_STAT_RFIFO_FULL 0x00004000 /* RFS: RFIFO Full */ | ||
| 175 | #define SPI_STAT_TFS 0x00070000 /* SPI_TFIFO status */ | ||
| 176 | #define SPI_STAT_TFIFO_FULL 0x00000000 /* TFS: TFIFO full */ | ||
| 177 | #define SPI_STAT_TFIFO_25 0x00010000 /* TFS: TFIFO 25% empty */ | ||
| 178 | #define SPI_STAT_TFIFO_50 0x00020000 /* TFS: TFIFO 50% empty */ | ||
| 179 | #define SPI_STAT_TFIFO_75 0x00030000 /* TFS: TFIFO 75% empty */ | ||
| 180 | #define SPI_STAT_TFIFO_EMPTY 0x00040000 /* TFS: TFIFO empty */ | ||
| 181 | #define SPI_STAT_FCS 0x00100000 /* Flow-Control Stall Indication */ | ||
| 182 | #define SPI_STAT_RFE 0x00400000 /* SPI_RFIFO Empty */ | ||
| 183 | #define SPI_STAT_TFF 0x00800000 /* SPI_TFIFO Full */ | ||
| 184 | /* SPI_ILAT */ | ||
| 185 | #define SPI_ILAT_RUWMI 0x00000002 /* Receive Urgent Water Mark Interrupt */ | ||
| 186 | #define SPI_ILAT_TUWMI 0x00000004 /* Transmit Urgent Water Mark Interrupt */ | ||
| 187 | #define SPI_ILAT_ROI 0x00000010 /* Receive Over-Run Error Indication */ | ||
| 188 | #define SPI_ILAT_TUI 0x00000020 /* Transmit Under-Run Error Indication */ | ||
| 189 | #define SPI_ILAT_TCI 0x00000040 /* Transmit Collision Error Indication */ | ||
| 190 | #define SPI_ILAT_MFI 0x00000080 /* Mode Fault Error Indication */ | ||
| 191 | #define SPI_ILAT_RSI 0x00000100 /* Receive Start Indication */ | ||
| 192 | #define SPI_ILAT_TSI 0x00000200 /* Transmit Start Indication */ | ||
| 193 | #define SPI_ILAT_RFI 0x00000400 /* Receive Finish Indication */ | ||
| 194 | #define SPI_ILAT_TFI 0x00000800 /* Transmit Finish Indication */ | ||
| 195 | /* SPI_ILATCL */ | ||
| 196 | #define SPI_ILAT_CLR_RUWMI 0x00000002 /* Receive Urgent Water Mark Interrupt */ | ||
| 197 | #define SPI_ILAT_CLR_TUWMI 0x00000004 /* Transmit Urgent Water Mark Interrupt */ | ||
| 198 | #define SPI_ILAT_CLR_ROI 0x00000010 /* Receive Over-Run Error Indication */ | ||
| 199 | #define SPI_ILAT_CLR_TUI 0x00000020 /* Transmit Under-Run Error Indication */ | ||
| 200 | #define SPI_ILAT_CLR_TCI 0x00000040 /* Transmit Collision Error Indication */ | ||
| 201 | #define SPI_ILAT_CLR_MFI 0x00000080 /* Mode Fault Error Indication */ | ||
| 202 | #define SPI_ILAT_CLR_RSI 0x00000100 /* Receive Start Indication */ | ||
| 203 | #define SPI_ILAT_CLR_TSI 0x00000200 /* Transmit Start Indication */ | ||
| 204 | #define SPI_ILAT_CLR_RFI 0x00000400 /* Receive Finish Indication */ | ||
| 205 | #define SPI_ILAT_CLR_TFI 0x00000800 /* Transmit Finish Indication */ | ||
| 206 | |||
| 207 | /* | ||
| 208 | * adi spi3 registers layout | ||
| 209 | */ | ||
| 210 | struct adi_spi_regs { | ||
| 211 | u32 revid; | ||
| 212 | u32 control; | ||
| 213 | u32 rx_control; | ||
| 214 | u32 tx_control; | ||
| 215 | u32 clock; | ||
| 216 | u32 delay; | ||
| 217 | u32 ssel; | ||
| 218 | u32 rwc; | ||
| 219 | u32 rwcr; | ||
| 220 | u32 twc; | ||
| 221 | u32 twcr; | ||
| 222 | u32 reserved0; | ||
| 223 | u32 emask; | ||
| 224 | u32 emaskcl; | ||
| 225 | u32 emaskst; | ||
| 226 | u32 reserved1; | ||
| 227 | u32 status; | ||
| 228 | u32 elat; | ||
| 229 | u32 elatcl; | ||
| 230 | u32 reserved2; | ||
| 231 | u32 rfifo; | ||
| 232 | u32 reserved3; | ||
| 233 | u32 tfifo; | ||
| 234 | }; | ||
| 235 | |||
| 236 | #define MAX_CTRL_CS 8 /* cs in spi controller */ | ||
| 237 | |||
| 238 | /* device.platform_data for SSP controller devices */ | ||
| 239 | struct adi_spi3_master { | ||
| 240 | u16 num_chipselect; | ||
| 241 | u16 pin_req[7]; | ||
| 242 | }; | ||
| 243 | |||
| 244 | /* spi_board_info.controller_data for SPI slave devices, | ||
| 245 | * copied to spi_device.platform_data ... mostly for dma tuning | ||
| 246 | */ | ||
| 247 | struct adi_spi3_chip { | ||
| 248 | u32 control; | ||
| 249 | u16 cs_chg_udelay; /* Some devices require 16-bit delays */ | ||
| 250 | u32 tx_dummy_val; /* tx value for rx only transfer */ | ||
| 251 | bool enable_dma; | ||
| 252 | }; | ||
| 253 | |||
| 254 | #endif /* _ADI_SPI3_H_ */ | ||
diff --git a/include/linux/spi/rspi.h b/include/linux/spi/rspi.h index a25bd6f65e7f..e546b2ceb623 100644 --- a/include/linux/spi/rspi.h +++ b/include/linux/spi/rspi.h | |||
| @@ -25,8 +25,6 @@ struct rspi_plat_data { | |||
| 25 | unsigned int dma_tx_id; | 25 | unsigned int dma_tx_id; |
| 26 | unsigned int dma_rx_id; | 26 | unsigned int dma_rx_id; |
| 27 | 27 | ||
| 28 | unsigned dma_width_16bit:1; /* DMAC read/write width = 16-bit */ | ||
| 29 | |||
| 30 | u16 num_chipselect; | 28 | u16 num_chipselect; |
| 31 | }; | 29 | }; |
| 32 | 30 | ||
diff --git a/include/linux/sunrpc/sched.h b/include/linux/sunrpc/sched.h index 3a847de83fab..ad7dbe2cfecd 100644 --- a/include/linux/sunrpc/sched.h +++ b/include/linux/sunrpc/sched.h | |||
| @@ -142,18 +142,18 @@ struct rpc_task_setup { | |||
| 142 | test_and_set_bit(RPC_TASK_RUNNING, &(t)->tk_runstate) | 142 | test_and_set_bit(RPC_TASK_RUNNING, &(t)->tk_runstate) |
| 143 | #define rpc_clear_running(t) \ | 143 | #define rpc_clear_running(t) \ |
| 144 | do { \ | 144 | do { \ |
| 145 | smp_mb__before_clear_bit(); \ | 145 | smp_mb__before_atomic(); \ |
| 146 | clear_bit(RPC_TASK_RUNNING, &(t)->tk_runstate); \ | 146 | clear_bit(RPC_TASK_RUNNING, &(t)->tk_runstate); \ |
| 147 | smp_mb__after_clear_bit(); \ | 147 | smp_mb__after_atomic(); \ |
| 148 | } while (0) | 148 | } while (0) |
| 149 | 149 | ||
| 150 | #define RPC_IS_QUEUED(t) test_bit(RPC_TASK_QUEUED, &(t)->tk_runstate) | 150 | #define RPC_IS_QUEUED(t) test_bit(RPC_TASK_QUEUED, &(t)->tk_runstate) |
| 151 | #define rpc_set_queued(t) set_bit(RPC_TASK_QUEUED, &(t)->tk_runstate) | 151 | #define rpc_set_queued(t) set_bit(RPC_TASK_QUEUED, &(t)->tk_runstate) |
| 152 | #define rpc_clear_queued(t) \ | 152 | #define rpc_clear_queued(t) \ |
| 153 | do { \ | 153 | do { \ |
| 154 | smp_mb__before_clear_bit(); \ | 154 | smp_mb__before_atomic(); \ |
| 155 | clear_bit(RPC_TASK_QUEUED, &(t)->tk_runstate); \ | 155 | clear_bit(RPC_TASK_QUEUED, &(t)->tk_runstate); \ |
| 156 | smp_mb__after_clear_bit(); \ | 156 | smp_mb__after_atomic(); \ |
| 157 | } while (0) | 157 | } while (0) |
| 158 | 158 | ||
| 159 | #define RPC_IS_ACTIVATED(t) test_bit(RPC_TASK_ACTIVE, &(t)->tk_runstate) | 159 | #define RPC_IS_ACTIVATED(t) test_bit(RPC_TASK_ACTIVE, &(t)->tk_runstate) |
diff --git a/include/linux/sunrpc/xprt.h b/include/linux/sunrpc/xprt.h index 3e5efb2b236e..3876f0f1dfd3 100644 --- a/include/linux/sunrpc/xprt.h +++ b/include/linux/sunrpc/xprt.h | |||
| @@ -379,9 +379,9 @@ static inline int xprt_test_and_clear_connected(struct rpc_xprt *xprt) | |||
| 379 | 379 | ||
| 380 | static inline void xprt_clear_connecting(struct rpc_xprt *xprt) | 380 | static inline void xprt_clear_connecting(struct rpc_xprt *xprt) |
| 381 | { | 381 | { |
| 382 | smp_mb__before_clear_bit(); | 382 | smp_mb__before_atomic(); |
| 383 | clear_bit(XPRT_CONNECTING, &xprt->state); | 383 | clear_bit(XPRT_CONNECTING, &xprt->state); |
| 384 | smp_mb__after_clear_bit(); | 384 | smp_mb__after_atomic(); |
| 385 | } | 385 | } |
| 386 | 386 | ||
| 387 | static inline int xprt_connecting(struct rpc_xprt *xprt) | 387 | static inline int xprt_connecting(struct rpc_xprt *xprt) |
| @@ -411,9 +411,9 @@ static inline void xprt_clear_bound(struct rpc_xprt *xprt) | |||
| 411 | 411 | ||
| 412 | static inline void xprt_clear_binding(struct rpc_xprt *xprt) | 412 | static inline void xprt_clear_binding(struct rpc_xprt *xprt) |
| 413 | { | 413 | { |
| 414 | smp_mb__before_clear_bit(); | 414 | smp_mb__before_atomic(); |
| 415 | clear_bit(XPRT_BINDING, &xprt->state); | 415 | clear_bit(XPRT_BINDING, &xprt->state); |
| 416 | smp_mb__after_clear_bit(); | 416 | smp_mb__after_atomic(); |
| 417 | } | 417 | } |
| 418 | 418 | ||
| 419 | static inline int xprt_test_and_set_binding(struct rpc_xprt *xprt) | 419 | static inline int xprt_test_and_set_binding(struct rpc_xprt *xprt) |
diff --git a/include/linux/suspend.h b/include/linux/suspend.h index f73cabf59012..91d66fd8dce1 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h | |||
| @@ -187,6 +187,11 @@ struct platform_suspend_ops { | |||
| 187 | void (*recover)(void); | 187 | void (*recover)(void); |
| 188 | }; | 188 | }; |
| 189 | 189 | ||
| 190 | struct platform_freeze_ops { | ||
| 191 | int (*begin)(void); | ||
| 192 | void (*end)(void); | ||
| 193 | }; | ||
| 194 | |||
| 190 | #ifdef CONFIG_SUSPEND | 195 | #ifdef CONFIG_SUSPEND |
| 191 | /** | 196 | /** |
| 192 | * suspend_set_ops - set platform dependent suspend operations | 197 | * suspend_set_ops - set platform dependent suspend operations |
| @@ -194,6 +199,7 @@ struct platform_suspend_ops { | |||
| 194 | */ | 199 | */ |
| 195 | extern void suspend_set_ops(const struct platform_suspend_ops *ops); | 200 | extern void suspend_set_ops(const struct platform_suspend_ops *ops); |
| 196 | extern int suspend_valid_only_mem(suspend_state_t state); | 201 | extern int suspend_valid_only_mem(suspend_state_t state); |
| 202 | extern void freeze_set_ops(const struct platform_freeze_ops *ops); | ||
| 197 | extern void freeze_wake(void); | 203 | extern void freeze_wake(void); |
| 198 | 204 | ||
| 199 | /** | 205 | /** |
| @@ -220,6 +226,7 @@ extern int pm_suspend(suspend_state_t state); | |||
| 220 | 226 | ||
| 221 | static inline void suspend_set_ops(const struct platform_suspend_ops *ops) {} | 227 | static inline void suspend_set_ops(const struct platform_suspend_ops *ops) {} |
| 222 | static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; } | 228 | static inline int pm_suspend(suspend_state_t state) { return -ENOSYS; } |
| 229 | static inline void freeze_set_ops(const struct platform_freeze_ops *ops) {} | ||
| 223 | static inline void freeze_wake(void) {} | 230 | static inline void freeze_wake(void) {} |
| 224 | #endif /* !CONFIG_SUSPEND */ | 231 | #endif /* !CONFIG_SUSPEND */ |
| 225 | 232 | ||
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 5ffaa3443712..f97d0dbb59fa 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
| @@ -437,7 +437,7 @@ static inline int __must_check sysfs_create_file(struct kobject *kobj, | |||
| 437 | static inline void sysfs_remove_file(struct kobject *kobj, | 437 | static inline void sysfs_remove_file(struct kobject *kobj, |
| 438 | const struct attribute *attr) | 438 | const struct attribute *attr) |
| 439 | { | 439 | { |
| 440 | return sysfs_remove_file_ns(kobj, attr, NULL); | 440 | sysfs_remove_file_ns(kobj, attr, NULL); |
| 441 | } | 441 | } |
| 442 | 442 | ||
| 443 | static inline int sysfs_rename_link(struct kobject *kobj, struct kobject *target, | 443 | static inline int sysfs_rename_link(struct kobject *kobj, struct kobject *target, |
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index fddbe2023a5d..cb0cec94fda3 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h | |||
| @@ -104,20 +104,6 @@ static inline int test_ti_thread_flag(struct thread_info *ti, int flag) | |||
| 104 | #define test_thread_flag(flag) \ | 104 | #define test_thread_flag(flag) \ |
| 105 | test_ti_thread_flag(current_thread_info(), flag) | 105 | test_ti_thread_flag(current_thread_info(), flag) |
| 106 | 106 | ||
| 107 | static inline __deprecated void set_need_resched(void) | ||
| 108 | { | ||
| 109 | /* | ||
| 110 | * Use of this function in deprecated. | ||
| 111 | * | ||
| 112 | * As of this writing there are only a few users in the DRM tree left | ||
| 113 | * all of which are wrong and can be removed without causing too much | ||
| 114 | * grief. | ||
| 115 | * | ||
| 116 | * The DRM people are aware and are working on removing the last few | ||
| 117 | * instances. | ||
| 118 | */ | ||
| 119 | } | ||
| 120 | |||
| 121 | #define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED) | 107 | #define tif_need_resched() test_thread_flag(TIF_NEED_RESCHED) |
| 122 | 108 | ||
| 123 | #if defined TIF_RESTORE_SIGMASK && !defined HAVE_SET_RESTORE_SIGMASK | 109 | #if defined TIF_RESTORE_SIGMASK && !defined HAVE_SET_RESTORE_SIGMASK |
diff --git a/include/linux/topology.h b/include/linux/topology.h index 7062330a1329..973671ff9e7d 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
| @@ -66,121 +66,6 @@ int arch_update_cpu_topology(void); | |||
| 66 | #define PENALTY_FOR_NODE_WITH_CPUS (1) | 66 | #define PENALTY_FOR_NODE_WITH_CPUS (1) |
| 67 | #endif | 67 | #endif |
| 68 | 68 | ||
| 69 | /* | ||
| 70 | * Below are the 3 major initializers used in building sched_domains: | ||
| 71 | * SD_SIBLING_INIT, for SMT domains | ||
| 72 | * SD_CPU_INIT, for SMP domains | ||
| 73 | * | ||
| 74 | * Any architecture that cares to do any tuning to these values should do so | ||
| 75 | * by defining their own arch-specific initializer in include/asm/topology.h. | ||
| 76 | * A definition there will automagically override these default initializers | ||
| 77 | * and allow arch-specific performance tuning of sched_domains. | ||
| 78 | * (Only non-zero and non-null fields need be specified.) | ||
| 79 | */ | ||
| 80 | |||
| 81 | #ifdef CONFIG_SCHED_SMT | ||
| 82 | /* MCD - Do we really need this? It is always on if CONFIG_SCHED_SMT is, | ||
| 83 | * so can't we drop this in favor of CONFIG_SCHED_SMT? | ||
| 84 | */ | ||
| 85 | #define ARCH_HAS_SCHED_WAKE_IDLE | ||
| 86 | /* Common values for SMT siblings */ | ||
| 87 | #ifndef SD_SIBLING_INIT | ||
| 88 | #define SD_SIBLING_INIT (struct sched_domain) { \ | ||
| 89 | .min_interval = 1, \ | ||
| 90 | .max_interval = 2, \ | ||
| 91 | .busy_factor = 64, \ | ||
| 92 | .imbalance_pct = 110, \ | ||
| 93 | \ | ||
| 94 | .flags = 1*SD_LOAD_BALANCE \ | ||
| 95 | | 1*SD_BALANCE_NEWIDLE \ | ||
| 96 | | 1*SD_BALANCE_EXEC \ | ||
| 97 | | 1*SD_BALANCE_FORK \ | ||
| 98 | | 0*SD_BALANCE_WAKE \ | ||
| 99 | | 1*SD_WAKE_AFFINE \ | ||
| 100 | | 1*SD_SHARE_CPUPOWER \ | ||
| 101 | | 1*SD_SHARE_PKG_RESOURCES \ | ||
| 102 | | 0*SD_SERIALIZE \ | ||
| 103 | | 0*SD_PREFER_SIBLING \ | ||
| 104 | | arch_sd_sibling_asym_packing() \ | ||
| 105 | , \ | ||
| 106 | .last_balance = jiffies, \ | ||
| 107 | .balance_interval = 1, \ | ||
| 108 | .smt_gain = 1178, /* 15% */ \ | ||
| 109 | .max_newidle_lb_cost = 0, \ | ||
| 110 | .next_decay_max_lb_cost = jiffies, \ | ||
| 111 | } | ||
| 112 | #endif | ||
| 113 | #endif /* CONFIG_SCHED_SMT */ | ||
| 114 | |||
| 115 | #ifdef CONFIG_SCHED_MC | ||
| 116 | /* Common values for MC siblings. for now mostly derived from SD_CPU_INIT */ | ||
| 117 | #ifndef SD_MC_INIT | ||
| 118 | #define SD_MC_INIT (struct sched_domain) { \ | ||
| 119 | .min_interval = 1, \ | ||
| 120 | .max_interval = 4, \ | ||
| 121 | .busy_factor = 64, \ | ||
| 122 | .imbalance_pct = 125, \ | ||
| 123 | .cache_nice_tries = 1, \ | ||
| 124 | .busy_idx = 2, \ | ||
| 125 | .wake_idx = 0, \ | ||
| 126 | .forkexec_idx = 0, \ | ||
| 127 | \ | ||
| 128 | .flags = 1*SD_LOAD_BALANCE \ | ||
| 129 | | 1*SD_BALANCE_NEWIDLE \ | ||
| 130 | | 1*SD_BALANCE_EXEC \ | ||
| 131 | | 1*SD_BALANCE_FORK \ | ||
| 132 | | 0*SD_BALANCE_WAKE \ | ||
| 133 | | 1*SD_WAKE_AFFINE \ | ||
| 134 | | 0*SD_SHARE_CPUPOWER \ | ||
| 135 | | 1*SD_SHARE_PKG_RESOURCES \ | ||
| 136 | | 0*SD_SERIALIZE \ | ||
| 137 | , \ | ||
| 138 | .last_balance = jiffies, \ | ||
| 139 | .balance_interval = 1, \ | ||
| 140 | .max_newidle_lb_cost = 0, \ | ||
| 141 | .next_decay_max_lb_cost = jiffies, \ | ||
| 142 | } | ||
| 143 | #endif | ||
| 144 | #endif /* CONFIG_SCHED_MC */ | ||
| 145 | |||
| 146 | /* Common values for CPUs */ | ||
| 147 | #ifndef SD_CPU_INIT | ||
| 148 | #define SD_CPU_INIT (struct sched_domain) { \ | ||
| 149 | .min_interval = 1, \ | ||
| 150 | .max_interval = 4, \ | ||
| 151 | .busy_factor = 64, \ | ||
| 152 | .imbalance_pct = 125, \ | ||
| 153 | .cache_nice_tries = 1, \ | ||
| 154 | .busy_idx = 2, \ | ||
| 155 | .idle_idx = 1, \ | ||
| 156 | .newidle_idx = 0, \ | ||
| 157 | .wake_idx = 0, \ | ||
| 158 | .forkexec_idx = 0, \ | ||
| 159 | \ | ||
| 160 | .flags = 1*SD_LOAD_BALANCE \ | ||
| 161 | | 1*SD_BALANCE_NEWIDLE \ | ||
| 162 | | 1*SD_BALANCE_EXEC \ | ||
| 163 | | 1*SD_BALANCE_FORK \ | ||
| 164 | | 0*SD_BALANCE_WAKE \ | ||
| 165 | | 1*SD_WAKE_AFFINE \ | ||
| 166 | | 0*SD_SHARE_CPUPOWER \ | ||
| 167 | | 0*SD_SHARE_PKG_RESOURCES \ | ||
| 168 | | 0*SD_SERIALIZE \ | ||
| 169 | | 1*SD_PREFER_SIBLING \ | ||
| 170 | , \ | ||
| 171 | .last_balance = jiffies, \ | ||
| 172 | .balance_interval = 1, \ | ||
| 173 | .max_newidle_lb_cost = 0, \ | ||
| 174 | .next_decay_max_lb_cost = jiffies, \ | ||
| 175 | } | ||
| 176 | #endif | ||
| 177 | |||
| 178 | #ifdef CONFIG_SCHED_BOOK | ||
| 179 | #ifndef SD_BOOK_INIT | ||
| 180 | #error Please define an appropriate SD_BOOK_INIT in include/asm/topology.h!!! | ||
| 181 | #endif | ||
| 182 | #endif /* CONFIG_SCHED_BOOK */ | ||
| 183 | |||
| 184 | #ifdef CONFIG_USE_PERCPU_NUMA_NODE_ID | 69 | #ifdef CONFIG_USE_PERCPU_NUMA_NODE_ID |
| 185 | DECLARE_PER_CPU(int, numa_node); | 70 | DECLARE_PER_CPU(int, numa_node); |
| 186 | 71 | ||
| @@ -295,4 +180,17 @@ static inline int cpu_to_mem(int cpu) | |||
| 295 | #define topology_core_cpumask(cpu) cpumask_of(cpu) | 180 | #define topology_core_cpumask(cpu) cpumask_of(cpu) |
| 296 | #endif | 181 | #endif |
| 297 | 182 | ||
| 183 | #ifdef CONFIG_SCHED_SMT | ||
| 184 | static inline const struct cpumask *cpu_smt_mask(int cpu) | ||
| 185 | { | ||
| 186 | return topology_thread_cpumask(cpu); | ||
| 187 | } | ||
| 188 | #endif | ||
| 189 | |||
| 190 | static inline const struct cpumask *cpu_cpu_mask(int cpu) | ||
| 191 | { | ||
| 192 | return cpumask_of_node(cpu_to_node(cpu)); | ||
| 193 | } | ||
| 194 | |||
| 195 | |||
| 298 | #endif /* _LINUX_TOPOLOGY_H */ | 196 | #endif /* _LINUX_TOPOLOGY_H */ |
diff --git a/include/linux/torture.h b/include/linux/torture.h index b2e2b468e511..5ca58fcbaf1b 100644 --- a/include/linux/torture.h +++ b/include/linux/torture.h | |||
| @@ -49,12 +49,6 @@ | |||
| 49 | #define VERBOSE_TOROUT_ERRSTRING(s) \ | 49 | #define VERBOSE_TOROUT_ERRSTRING(s) \ |
| 50 | do { if (verbose) pr_alert("%s" TORTURE_FLAG "!!! %s\n", torture_type, s); } while (0) | 50 | do { if (verbose) pr_alert("%s" TORTURE_FLAG "!!! %s\n", torture_type, s); } while (0) |
| 51 | 51 | ||
| 52 | /* Definitions for a non-string torture-test module parameter. */ | ||
| 53 | #define torture_parm(type, name, init, msg) \ | ||
| 54 | static type name = init; \ | ||
| 55 | module_param(name, type, 0444); \ | ||
| 56 | MODULE_PARM_DESC(name, msg); | ||
| 57 | |||
| 58 | /* Definitions for online/offline exerciser. */ | 52 | /* Definitions for online/offline exerciser. */ |
| 59 | int torture_onoff_init(long ooholdoff, long oointerval); | 53 | int torture_onoff_init(long ooholdoff, long oointerval); |
| 60 | char *torture_onoff_stats(char *page); | 54 | char *torture_onoff_stats(char *page); |
| @@ -81,7 +75,7 @@ void stutter_wait(const char *title); | |||
| 81 | int torture_stutter_init(int s); | 75 | int torture_stutter_init(int s); |
| 82 | 76 | ||
| 83 | /* Initialization and cleanup. */ | 77 | /* Initialization and cleanup. */ |
| 84 | void torture_init_begin(char *ttype, bool v, int *runnable); | 78 | bool torture_init_begin(char *ttype, bool v, int *runnable); |
| 85 | void torture_init_end(void); | 79 | void torture_init_end(void); |
| 86 | bool torture_cleanup(void); | 80 | bool torture_cleanup(void); |
| 87 | bool torture_must_stop(void); | 81 | bool torture_must_stop(void); |
diff --git a/include/linux/tracehook.h b/include/linux/tracehook.h index 1e98b5530425..6f8ab7da27c4 100644 --- a/include/linux/tracehook.h +++ b/include/linux/tracehook.h | |||
| @@ -191,7 +191,7 @@ static inline void tracehook_notify_resume(struct pt_regs *regs) | |||
| 191 | * pairs with task_work_add()->set_notify_resume() after | 191 | * pairs with task_work_add()->set_notify_resume() after |
| 192 | * hlist_add_head(task->task_works); | 192 | * hlist_add_head(task->task_works); |
| 193 | */ | 193 | */ |
| 194 | smp_mb__after_clear_bit(); | 194 | smp_mb__after_atomic(); |
| 195 | if (unlikely(current->task_works)) | 195 | if (unlikely(current->task_works)) |
| 196 | task_work_run(); | 196 | task_work_run(); |
| 197 | } | 197 | } |
diff --git a/include/linux/tty_ldisc.h b/include/linux/tty_ldisc.h index add26da2faeb..00c9d688d7b7 100644 --- a/include/linux/tty_ldisc.h +++ b/include/linux/tty_ldisc.h | |||
| @@ -92,7 +92,10 @@ | |||
| 92 | * This function is called by the low-level tty driver to signal | 92 | * This function is called by the low-level tty driver to signal |
| 93 | * that line discpline should try to send more characters to the | 93 | * that line discpline should try to send more characters to the |
| 94 | * low-level driver for transmission. If the line discpline does | 94 | * low-level driver for transmission. If the line discpline does |
| 95 | * not have any more data to send, it can just return. | 95 | * not have any more data to send, it can just return. If the line |
| 96 | * discipline does have some data to send, please arise a tasklet | ||
| 97 | * or workqueue to do the real data transfer. Do not send data in | ||
| 98 | * this hook, it may leads to a deadlock. | ||
| 96 | * | 99 | * |
| 97 | * int (*hangup)(struct tty_struct *) | 100 | * int (*hangup)(struct tty_struct *) |
| 98 | * | 101 | * |
diff --git a/include/linux/types.h b/include/linux/types.h index 4d118ba11349..a0bb7048687f 100644 --- a/include/linux/types.h +++ b/include/linux/types.h | |||
| @@ -142,6 +142,7 @@ typedef unsigned long blkcnt_t; | |||
| 142 | #define pgoff_t unsigned long | 142 | #define pgoff_t unsigned long |
| 143 | #endif | 143 | #endif |
| 144 | 144 | ||
| 145 | /* A dma_addr_t can hold any valid DMA or bus address for the platform */ | ||
| 145 | #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT | 146 | #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT |
| 146 | typedef u64 dma_addr_t; | 147 | typedef u64 dma_addr_t; |
| 147 | #else | 148 | #else |
diff --git a/include/linux/usb.h b/include/linux/usb.h index 6b7ec376fb4d..d2465bc0e73c 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -352,6 +352,8 @@ struct usb_bus { | |||
| 352 | struct usb_bus *hs_companion; /* Companion EHCI bus, if any */ | 352 | struct usb_bus *hs_companion; /* Companion EHCI bus, if any */ |
| 353 | struct list_head bus_list; /* list of busses */ | 353 | struct list_head bus_list; /* list of busses */ |
| 354 | 354 | ||
| 355 | struct mutex usb_address0_mutex; /* unaddressed device mutex */ | ||
| 356 | |||
| 355 | int bandwidth_allocated; /* on this bus: how much of the time | 357 | int bandwidth_allocated; /* on this bus: how much of the time |
| 356 | * reserved for periodic (intr/iso) | 358 | * reserved for periodic (intr/iso) |
| 357 | * requests is used, on average? | 359 | * requests is used, on average? |
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h index d3ca3b53837c..7373203140e7 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h | |||
| @@ -57,6 +57,61 @@ | |||
| 57 | struct usb_configuration; | 57 | struct usb_configuration; |
| 58 | 58 | ||
| 59 | /** | 59 | /** |
| 60 | * struct usb_os_desc_ext_prop - describes one "Extended Property" | ||
| 61 | * @entry: used to keep a list of extended properties | ||
| 62 | * @type: Extended Property type | ||
| 63 | * @name_len: Extended Property unicode name length, including terminating '\0' | ||
| 64 | * @name: Extended Property name | ||
| 65 | * @data_len: Length of Extended Property blob (for unicode store double len) | ||
| 66 | * @data: Extended Property blob | ||
| 67 | * @item: Represents this Extended Property in configfs | ||
| 68 | */ | ||
| 69 | struct usb_os_desc_ext_prop { | ||
| 70 | struct list_head entry; | ||
| 71 | u8 type; | ||
| 72 | int name_len; | ||
| 73 | char *name; | ||
| 74 | int data_len; | ||
| 75 | char *data; | ||
| 76 | struct config_item item; | ||
| 77 | }; | ||
| 78 | |||
| 79 | /** | ||
| 80 | * struct usb_os_desc - describes OS descriptors associated with one interface | ||
| 81 | * @ext_compat_id: 16 bytes of "Compatible ID" and "Subcompatible ID" | ||
| 82 | * @ext_prop: Extended Properties list | ||
| 83 | * @ext_prop_len: Total length of Extended Properties blobs | ||
| 84 | * @ext_prop_count: Number of Extended Properties | ||
| 85 | * @opts_mutex: Optional mutex protecting config data of a usb_function_instance | ||
| 86 | * @group: Represents OS descriptors associated with an interface in configfs | ||
| 87 | * @owner: Module associated with this OS descriptor | ||
| 88 | */ | ||
| 89 | struct usb_os_desc { | ||
| 90 | char *ext_compat_id; | ||
| 91 | struct list_head ext_prop; | ||
| 92 | int ext_prop_len; | ||
| 93 | int ext_prop_count; | ||
| 94 | struct mutex *opts_mutex; | ||
| 95 | struct config_group group; | ||
| 96 | struct module *owner; | ||
| 97 | }; | ||
| 98 | |||
| 99 | /** | ||
| 100 | * struct usb_os_desc_table - describes OS descriptors associated with one | ||
| 101 | * interface of a usb_function | ||
| 102 | * @if_id: Interface id | ||
| 103 | * @os_desc: "Extended Compatibility ID" and "Extended Properties" of the | ||
| 104 | * interface | ||
| 105 | * | ||
| 106 | * Each interface can have at most one "Extended Compatibility ID" and a | ||
| 107 | * number of "Extended Properties". | ||
| 108 | */ | ||
| 109 | struct usb_os_desc_table { | ||
| 110 | int if_id; | ||
| 111 | struct usb_os_desc *os_desc; | ||
| 112 | }; | ||
| 113 | |||
| 114 | /** | ||
| 60 | * struct usb_function - describes one function of a configuration | 115 | * struct usb_function - describes one function of a configuration |
| 61 | * @name: For diagnostics, identifies the function. | 116 | * @name: For diagnostics, identifies the function. |
| 62 | * @strings: tables of strings, keyed by identifiers assigned during bind() | 117 | * @strings: tables of strings, keyed by identifiers assigned during bind() |
| @@ -73,6 +128,10 @@ struct usb_configuration; | |||
| 73 | * be available at super speed. | 128 | * be available at super speed. |
| 74 | * @config: assigned when @usb_add_function() is called; this is the | 129 | * @config: assigned when @usb_add_function() is called; this is the |
| 75 | * configuration with which this function is associated. | 130 | * configuration with which this function is associated. |
| 131 | * @os_desc_table: Table of (interface id, os descriptors) pairs. The function | ||
| 132 | * can expose more than one interface. If an interface is a member of | ||
| 133 | * an IAD, only the first interface of IAD has its entry in the table. | ||
| 134 | * @os_desc_n: Number of entries in os_desc_table | ||
| 76 | * @bind: Before the gadget can register, all of its functions bind() to the | 135 | * @bind: Before the gadget can register, all of its functions bind() to the |
| 77 | * available resources including string and interface identifiers used | 136 | * available resources including string and interface identifiers used |
| 78 | * in interface or class descriptors; endpoints; I/O buffers; and so on. | 137 | * in interface or class descriptors; endpoints; I/O buffers; and so on. |
| @@ -129,6 +188,9 @@ struct usb_function { | |||
| 129 | 188 | ||
| 130 | struct usb_configuration *config; | 189 | struct usb_configuration *config; |
| 131 | 190 | ||
| 191 | struct usb_os_desc_table *os_desc_table; | ||
| 192 | unsigned os_desc_n; | ||
| 193 | |||
| 132 | /* REVISIT: bind() functions can be marked __init, which | 194 | /* REVISIT: bind() functions can be marked __init, which |
| 133 | * makes trouble for section mismatch analysis. See if | 195 | * makes trouble for section mismatch analysis. See if |
| 134 | * we can't restructure things to avoid mismatching. | 196 | * we can't restructure things to avoid mismatching. |
| @@ -327,6 +389,8 @@ extern void usb_composite_unregister(struct usb_composite_driver *driver); | |||
| 327 | extern void usb_composite_setup_continue(struct usb_composite_dev *cdev); | 389 | extern void usb_composite_setup_continue(struct usb_composite_dev *cdev); |
| 328 | extern int composite_dev_prepare(struct usb_composite_driver *composite, | 390 | extern int composite_dev_prepare(struct usb_composite_driver *composite, |
| 329 | struct usb_composite_dev *cdev); | 391 | struct usb_composite_dev *cdev); |
| 392 | extern int composite_os_desc_req_prepare(struct usb_composite_dev *cdev, | ||
| 393 | struct usb_ep *ep0); | ||
| 330 | void composite_dev_cleanup(struct usb_composite_dev *cdev); | 394 | void composite_dev_cleanup(struct usb_composite_dev *cdev); |
| 331 | 395 | ||
| 332 | static inline struct usb_composite_driver *to_cdriver( | 396 | static inline struct usb_composite_driver *to_cdriver( |
| @@ -335,11 +399,19 @@ static inline struct usb_composite_driver *to_cdriver( | |||
| 335 | return container_of(gdrv, struct usb_composite_driver, gadget_driver); | 399 | return container_of(gdrv, struct usb_composite_driver, gadget_driver); |
| 336 | } | 400 | } |
| 337 | 401 | ||
| 402 | #define OS_STRING_QW_SIGN_LEN 14 | ||
| 403 | #define OS_STRING_IDX 0xEE | ||
| 404 | |||
| 338 | /** | 405 | /** |
| 339 | * struct usb_composite_device - represents one composite usb gadget | 406 | * struct usb_composite_device - represents one composite usb gadget |
| 340 | * @gadget: read-only, abstracts the gadget's usb peripheral controller | 407 | * @gadget: read-only, abstracts the gadget's usb peripheral controller |
| 341 | * @req: used for control responses; buffer is pre-allocated | 408 | * @req: used for control responses; buffer is pre-allocated |
| 409 | * @os_desc_req: used for OS descriptors responses; buffer is pre-allocated | ||
| 342 | * @config: the currently active configuration | 410 | * @config: the currently active configuration |
| 411 | * @qw_sign: qwSignature part of the OS string | ||
| 412 | * @b_vendor_code: bMS_VendorCode part of the OS string | ||
| 413 | * @use_os_string: false by default, interested gadgets set it | ||
| 414 | * @os_desc_config: the configuration to be used with OS descriptors | ||
| 343 | * | 415 | * |
| 344 | * One of these devices is allocated and initialized before the | 416 | * One of these devices is allocated and initialized before the |
| 345 | * associated device driver's bind() is called. | 417 | * associated device driver's bind() is called. |
| @@ -369,9 +441,16 @@ static inline struct usb_composite_driver *to_cdriver( | |||
| 369 | struct usb_composite_dev { | 441 | struct usb_composite_dev { |
| 370 | struct usb_gadget *gadget; | 442 | struct usb_gadget *gadget; |
| 371 | struct usb_request *req; | 443 | struct usb_request *req; |
| 444 | struct usb_request *os_desc_req; | ||
| 372 | 445 | ||
| 373 | struct usb_configuration *config; | 446 | struct usb_configuration *config; |
| 374 | 447 | ||
| 448 | /* OS String is a custom (yet popular) extension to the USB standard. */ | ||
| 449 | u8 qw_sign[OS_STRING_QW_SIGN_LEN]; | ||
| 450 | u8 b_vendor_code; | ||
| 451 | struct usb_configuration *os_desc_config; | ||
| 452 | unsigned int use_os_string:1; | ||
| 453 | |||
| 375 | /* private: */ | 454 | /* private: */ |
| 376 | /* internals */ | 455 | /* internals */ |
| 377 | unsigned int suspended:1; | 456 | unsigned int suspended:1; |
diff --git a/include/linux/usb/msm_hsusb.h b/include/linux/usb/msm_hsusb.h index 32754835a39b..b0a39243295a 100644 --- a/include/linux/usb/msm_hsusb.h +++ b/include/linux/usb/msm_hsusb.h | |||
| @@ -23,21 +23,6 @@ | |||
| 23 | #include <linux/clk.h> | 23 | #include <linux/clk.h> |
| 24 | 24 | ||
| 25 | /** | 25 | /** |
| 26 | * Supported USB modes | ||
| 27 | * | ||
| 28 | * USB_PERIPHERAL Only peripheral mode is supported. | ||
| 29 | * USB_HOST Only host mode is supported. | ||
| 30 | * USB_OTG OTG mode is supported. | ||
| 31 | * | ||
| 32 | */ | ||
| 33 | enum usb_mode_type { | ||
| 34 | USB_NONE = 0, | ||
| 35 | USB_PERIPHERAL, | ||
| 36 | USB_HOST, | ||
| 37 | USB_OTG, | ||
| 38 | }; | ||
| 39 | |||
| 40 | /** | ||
| 41 | * OTG control | 26 | * OTG control |
| 42 | * | 27 | * |
| 43 | * OTG_NO_CONTROL Id/VBUS notifications not required. Useful in host | 28 | * OTG_NO_CONTROL Id/VBUS notifications not required. Useful in host |
| @@ -115,27 +100,23 @@ enum usb_chg_type { | |||
| 115 | /** | 100 | /** |
| 116 | * struct msm_otg_platform_data - platform device data | 101 | * struct msm_otg_platform_data - platform device data |
| 117 | * for msm_otg driver. | 102 | * for msm_otg driver. |
| 118 | * @phy_init_seq: PHY configuration sequence. val, reg pairs | 103 | * @phy_init_seq: PHY configuration sequence values. Value of -1 is reserved as |
| 119 | * terminated by -1. | 104 | * "do not overwrite default vaule at this address". |
| 105 | * @phy_init_sz: PHY configuration sequence size. | ||
| 120 | * @vbus_power: VBUS power on/off routine. | 106 | * @vbus_power: VBUS power on/off routine. |
| 121 | * @power_budget: VBUS power budget in mA (0 will be treated as 500mA). | 107 | * @power_budget: VBUS power budget in mA (0 will be treated as 500mA). |
| 122 | * @mode: Supported mode (OTG/peripheral/host). | 108 | * @mode: Supported mode (OTG/peripheral/host). |
| 123 | * @otg_control: OTG switch controlled by user/Id pin | 109 | * @otg_control: OTG switch controlled by user/Id pin |
| 124 | * @default_mode: Default operational mode. Applicable only if | ||
| 125 | * OTG switch is controller by user. | ||
| 126 | * @pclk_src_name: pclk is derived from ebi1_usb_clk in case of 7x27 and 8k | ||
| 127 | * dfab_usb_hs_clk in case of 8660 and 8960. | ||
| 128 | */ | 110 | */ |
| 129 | struct msm_otg_platform_data { | 111 | struct msm_otg_platform_data { |
| 130 | int *phy_init_seq; | 112 | int *phy_init_seq; |
| 113 | int phy_init_sz; | ||
| 131 | void (*vbus_power)(bool on); | 114 | void (*vbus_power)(bool on); |
| 132 | unsigned power_budget; | 115 | unsigned power_budget; |
| 133 | enum usb_mode_type mode; | 116 | enum usb_dr_mode mode; |
| 134 | enum otg_control_type otg_control; | 117 | enum otg_control_type otg_control; |
| 135 | enum usb_mode_type default_mode; | ||
| 136 | enum msm_usb_phy_type phy_type; | 118 | enum msm_usb_phy_type phy_type; |
| 137 | void (*setup_gpio)(enum usb_otg_state state); | 119 | void (*setup_gpio)(enum usb_otg_state state); |
| 138 | char *pclk_src_name; | ||
| 139 | int (*link_clk_reset)(struct clk *link_clk, bool assert); | 120 | int (*link_clk_reset)(struct clk *link_clk, bool assert); |
| 140 | int (*phy_clk_reset)(struct clk *phy_clk); | 121 | int (*phy_clk_reset)(struct clk *phy_clk); |
| 141 | }; | 122 | }; |
| @@ -147,7 +128,6 @@ struct msm_otg_platform_data { | |||
| 147 | * @irq: IRQ number assigned for HSUSB controller. | 128 | * @irq: IRQ number assigned for HSUSB controller. |
| 148 | * @clk: clock struct of usb_hs_clk. | 129 | * @clk: clock struct of usb_hs_clk. |
| 149 | * @pclk: clock struct of usb_hs_pclk. | 130 | * @pclk: clock struct of usb_hs_pclk. |
| 150 | * @pclk_src: pclk source for voting. | ||
| 151 | * @phy_reset_clk: clock struct of usb_phy_clk. | 131 | * @phy_reset_clk: clock struct of usb_phy_clk. |
| 152 | * @core_clk: clock struct of usb_hs_core_clk. | 132 | * @core_clk: clock struct of usb_hs_core_clk. |
| 153 | * @regs: ioremapped register base address. | 133 | * @regs: ioremapped register base address. |
| @@ -168,7 +148,6 @@ struct msm_otg { | |||
| 168 | int irq; | 148 | int irq; |
| 169 | struct clk *clk; | 149 | struct clk *clk; |
| 170 | struct clk *pclk; | 150 | struct clk *pclk; |
| 171 | struct clk *pclk_src; | ||
| 172 | struct clk *phy_reset_clk; | 151 | struct clk *phy_reset_clk; |
| 173 | struct clk *core_clk; | 152 | struct clk *core_clk; |
| 174 | void __iomem *regs; | 153 | void __iomem *regs; |
| @@ -179,10 +158,18 @@ struct msm_otg { | |||
| 179 | atomic_t in_lpm; | 158 | atomic_t in_lpm; |
| 180 | int async_int; | 159 | int async_int; |
| 181 | unsigned cur_power; | 160 | unsigned cur_power; |
| 161 | int phy_number; | ||
| 182 | struct delayed_work chg_work; | 162 | struct delayed_work chg_work; |
| 183 | enum usb_chg_state chg_state; | 163 | enum usb_chg_state chg_state; |
| 184 | enum usb_chg_type chg_type; | 164 | enum usb_chg_type chg_type; |
| 185 | u8 dcd_retries; | 165 | u8 dcd_retries; |
| 166 | struct regulator *v3p3; | ||
| 167 | struct regulator *v1p8; | ||
| 168 | struct regulator *vddcx; | ||
| 169 | |||
| 170 | struct reset_control *phy_rst; | ||
| 171 | struct reset_control *link_rst; | ||
| 172 | int vdd_levels[3]; | ||
| 186 | }; | 173 | }; |
| 187 | 174 | ||
| 188 | #endif | 175 | #endif |
diff --git a/include/linux/usb/msm_hsusb_hw.h b/include/linux/usb/msm_hsusb_hw.h index 6e97a2d3d39f..a29f6030afb1 100644 --- a/include/linux/usb/msm_hsusb_hw.h +++ b/include/linux/usb/msm_hsusb_hw.h | |||
| @@ -16,6 +16,9 @@ | |||
| 16 | #ifndef __LINUX_USB_GADGET_MSM72K_UDC_H__ | 16 | #ifndef __LINUX_USB_GADGET_MSM72K_UDC_H__ |
| 17 | #define __LINUX_USB_GADGET_MSM72K_UDC_H__ | 17 | #define __LINUX_USB_GADGET_MSM72K_UDC_H__ |
| 18 | 18 | ||
| 19 | /* USB phy selector - in TCSR address range */ | ||
| 20 | #define USB2_PHY_SEL 0xfd4ab000 | ||
| 21 | |||
| 19 | #define USB_AHBBURST (MSM_USB_BASE + 0x0090) | 22 | #define USB_AHBBURST (MSM_USB_BASE + 0x0090) |
| 20 | #define USB_AHBMODE (MSM_USB_BASE + 0x0098) | 23 | #define USB_AHBMODE (MSM_USB_BASE + 0x0098) |
| 21 | #define USB_CAPLENGTH (MSM_USB_BASE + 0x0100) /* 8 bit */ | 24 | #define USB_CAPLENGTH (MSM_USB_BASE + 0x0100) /* 8 bit */ |
| @@ -25,13 +28,15 @@ | |||
| 25 | #define USB_OTGSC (MSM_USB_BASE + 0x01A4) | 28 | #define USB_OTGSC (MSM_USB_BASE + 0x01A4) |
| 26 | #define USB_USBMODE (MSM_USB_BASE + 0x01A8) | 29 | #define USB_USBMODE (MSM_USB_BASE + 0x01A8) |
| 27 | #define USB_PHY_CTRL (MSM_USB_BASE + 0x0240) | 30 | #define USB_PHY_CTRL (MSM_USB_BASE + 0x0240) |
| 31 | #define USB_PHY_CTRL2 (MSM_USB_BASE + 0x0278) | ||
| 28 | 32 | ||
| 29 | #define USBCMD_RESET 2 | 33 | #define USBCMD_RESET 2 |
| 30 | #define USB_USBINTR (MSM_USB_BASE + 0x0148) | 34 | #define USB_USBINTR (MSM_USB_BASE + 0x0148) |
| 31 | 35 | ||
| 32 | #define PORTSC_PHCD (1 << 23) /* phy suspend mode */ | 36 | #define PORTSC_PHCD (1 << 23) /* phy suspend mode */ |
| 33 | #define PORTSC_PTS_MASK (3 << 30) | 37 | #define PORTSC_PTS_MASK (3 << 30) |
| 34 | #define PORTSC_PTS_ULPI (3 << 30) | 38 | #define PORTSC_PTS_ULPI (2 << 30) |
| 39 | #define PORTSC_PTS_SERIAL (3 << 30) | ||
| 35 | 40 | ||
| 36 | #define USB_ULPI_VIEWPORT (MSM_USB_BASE + 0x0170) | 41 | #define USB_ULPI_VIEWPORT (MSM_USB_BASE + 0x0170) |
| 37 | #define ULPI_RUN (1 << 30) | 42 | #define ULPI_RUN (1 << 30) |
| @@ -41,9 +46,14 @@ | |||
| 41 | #define ULPI_DATA(n) ((n) & 255) | 46 | #define ULPI_DATA(n) ((n) & 255) |
| 42 | #define ULPI_DATA_READ(n) (((n) >> 8) & 255) | 47 | #define ULPI_DATA_READ(n) (((n) >> 8) & 255) |
| 43 | 48 | ||
| 49 | /* synopsys 28nm phy registers */ | ||
| 50 | #define ULPI_PWR_CLK_MNG_REG 0x88 | ||
| 51 | #define OTG_COMP_DISABLE BIT(0) | ||
| 52 | |||
| 44 | #define ASYNC_INTR_CTRL (1 << 29) /* Enable async interrupt */ | 53 | #define ASYNC_INTR_CTRL (1 << 29) /* Enable async interrupt */ |
| 45 | #define ULPI_STP_CTRL (1 << 30) /* Block communication with PHY */ | 54 | #define ULPI_STP_CTRL (1 << 30) /* Block communication with PHY */ |
| 46 | #define PHY_RETEN (1 << 1) /* PHY retention enable/disable */ | 55 | #define PHY_RETEN (1 << 1) /* PHY retention enable/disable */ |
| 56 | #define PHY_POR_ASSERT (1 << 0) /* USB2 28nm PHY POR ASSERT */ | ||
| 47 | 57 | ||
| 48 | /* OTG definitions */ | 58 | /* OTG definitions */ |
| 49 | #define OTGSC_INTSTS_MASK (0x7f << 16) | 59 | #define OTGSC_INTSTS_MASK (0x7f << 16) |
diff --git a/include/linux/usb/usb_phy_gen_xceiv.h b/include/linux/usb/usb_phy_generic.h index cc8d818a83be..68adae83affc 100644 --- a/include/linux/usb/usb_phy_gen_xceiv.h +++ b/include/linux/usb/usb_phy_generic.h | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/usb/otg.h> | 4 | #include <linux/usb/otg.h> |
| 5 | 5 | ||
| 6 | struct usb_phy_gen_xceiv_platform_data { | 6 | struct usb_phy_generic_platform_data { |
| 7 | enum usb_phy_type type; | 7 | enum usb_phy_type type; |
| 8 | unsigned long clk_rate; | 8 | unsigned long clk_rate; |
| 9 | 9 | ||
| @@ -13,16 +13,17 @@ struct usb_phy_gen_xceiv_platform_data { | |||
| 13 | int gpio_reset; | 13 | int gpio_reset; |
| 14 | }; | 14 | }; |
| 15 | 15 | ||
| 16 | #if defined(CONFIG_NOP_USB_XCEIV) || (defined(CONFIG_NOP_USB_XCEIV_MODULE) && defined(MODULE)) | 16 | #if IS_ENABLED(CONFIG_NOP_USB_XCEIV) |
| 17 | /* sometimes transceivers are accessed only through e.g. ULPI */ | 17 | /* sometimes transceivers are accessed only through e.g. ULPI */ |
| 18 | extern void usb_nop_xceiv_register(void); | 18 | extern struct platform_device *usb_phy_generic_register(void); |
| 19 | extern void usb_nop_xceiv_unregister(void); | 19 | extern void usb_phy_generic_unregister(struct platform_device *); |
| 20 | #else | 20 | #else |
| 21 | static inline void usb_nop_xceiv_register(void) | 21 | static inline struct platform_device *usb_phy_generic_register(void) |
| 22 | { | 22 | { |
| 23 | return NULL; | ||
| 23 | } | 24 | } |
| 24 | 25 | ||
| 25 | static inline void usb_nop_xceiv_unregister(void) | 26 | static inline void usb_phy_generic_unregister(struct platform_device *pdev) |
| 26 | { | 27 | { |
| 27 | } | 28 | } |
| 28 | #endif | 29 | #endif |
diff --git a/include/linux/vexpress.h b/include/linux/vexpress.h index 617c01b8f74a..a4c9547aae64 100644 --- a/include/linux/vexpress.h +++ b/include/linux/vexpress.h | |||
| @@ -15,28 +15,15 @@ | |||
| 15 | #define _LINUX_VEXPRESS_H | 15 | #define _LINUX_VEXPRESS_H |
| 16 | 16 | ||
| 17 | #include <linux/device.h> | 17 | #include <linux/device.h> |
| 18 | #include <linux/platform_device.h> | ||
| 18 | #include <linux/reboot.h> | 19 | #include <linux/reboot.h> |
| 20 | #include <linux/regmap.h> | ||
| 19 | 21 | ||
| 20 | #define VEXPRESS_SITE_MB 0 | 22 | #define VEXPRESS_SITE_MB 0 |
| 21 | #define VEXPRESS_SITE_DB1 1 | 23 | #define VEXPRESS_SITE_DB1 1 |
| 22 | #define VEXPRESS_SITE_DB2 2 | 24 | #define VEXPRESS_SITE_DB2 2 |
| 23 | #define VEXPRESS_SITE_MASTER 0xf | 25 | #define VEXPRESS_SITE_MASTER 0xf |
| 24 | 26 | ||
| 25 | #define VEXPRESS_CONFIG_STATUS_DONE 0 | ||
| 26 | #define VEXPRESS_CONFIG_STATUS_WAIT 1 | ||
| 27 | |||
| 28 | #define VEXPRESS_GPIO_MMC_CARDIN 0 | ||
| 29 | #define VEXPRESS_GPIO_MMC_WPROT 1 | ||
| 30 | #define VEXPRESS_GPIO_FLASH_WPn 2 | ||
| 31 | #define VEXPRESS_GPIO_LED0 3 | ||
| 32 | #define VEXPRESS_GPIO_LED1 4 | ||
| 33 | #define VEXPRESS_GPIO_LED2 5 | ||
| 34 | #define VEXPRESS_GPIO_LED3 6 | ||
| 35 | #define VEXPRESS_GPIO_LED4 7 | ||
| 36 | #define VEXPRESS_GPIO_LED5 8 | ||
| 37 | #define VEXPRESS_GPIO_LED6 9 | ||
| 38 | #define VEXPRESS_GPIO_LED7 10 | ||
| 39 | |||
| 40 | #define VEXPRESS_RES_FUNC(_site, _func) \ | 27 | #define VEXPRESS_RES_FUNC(_site, _func) \ |
| 41 | { \ | 28 | { \ |
| 42 | .start = (_site), \ | 29 | .start = (_site), \ |
| @@ -44,84 +31,43 @@ | |||
| 44 | .flags = IORESOURCE_BUS, \ | 31 | .flags = IORESOURCE_BUS, \ |
| 45 | } | 32 | } |
| 46 | 33 | ||
| 47 | /* Config bridge API */ | 34 | /* Config infrastructure */ |
| 48 | 35 | ||
| 49 | /** | 36 | void vexpress_config_set_master(u32 site); |
| 50 | * struct vexpress_config_bridge_info - description of the platform | 37 | u32 vexpress_config_get_master(void); |
| 51 | * configuration infrastructure bridge. | ||
| 52 | * | ||
| 53 | * @name: Bridge name | ||
| 54 | * | ||
| 55 | * @func_get: Obtains pointer to a configuration function for a given | ||
| 56 | * device or a Device Tree node, to be used with @func_put | ||
| 57 | * and @func_exec. The node pointer should take precedence | ||
| 58 | * over device pointer when both are passed. | ||
| 59 | * | ||
| 60 | * @func_put: Tells the bridge that the function will not be used any | ||
| 61 | * more, so all allocated resources can be released. | ||
| 62 | * | ||
| 63 | * @func_exec: Executes a configuration function read or write operation. | ||
| 64 | * The offset selects a 32 bit word of the value accessed. | ||
| 65 | * Must return VEXPRESS_CONFIG_STATUS_DONE when operation | ||
| 66 | * is finished immediately, VEXPRESS_CONFIG_STATUS_WAIT when | ||
| 67 | * will be completed in some time or negative value in case | ||
| 68 | * of error. | ||
| 69 | */ | ||
| 70 | struct vexpress_config_bridge_info { | ||
| 71 | const char *name; | ||
| 72 | void *(*func_get)(struct device *dev, struct device_node *node); | ||
| 73 | void (*func_put)(void *func); | ||
| 74 | int (*func_exec)(void *func, int offset, bool write, u32 *data); | ||
| 75 | }; | ||
| 76 | 38 | ||
| 77 | struct vexpress_config_bridge; | 39 | void vexpress_config_lock(void *arg); |
| 40 | void vexpress_config_unlock(void *arg); | ||
| 78 | 41 | ||
| 79 | struct vexpress_config_bridge *vexpress_config_bridge_register( | 42 | int vexpress_config_get_topo(struct device_node *node, u32 *site, |
| 80 | struct device_node *node, | 43 | u32 *position, u32 *dcc); |
| 81 | struct vexpress_config_bridge_info *info); | ||
| 82 | void vexpress_config_bridge_unregister(struct vexpress_config_bridge *bridge); | ||
| 83 | 44 | ||
| 84 | void vexpress_config_complete(struct vexpress_config_bridge *bridge, | 45 | /* Config bridge API */ |
| 85 | int status); | ||
| 86 | 46 | ||
| 87 | /* Config function API */ | 47 | struct vexpress_config_bridge_ops { |
| 48 | struct regmap * (*regmap_init)(struct device *dev, void *context); | ||
| 49 | void (*regmap_exit)(struct regmap *regmap, void *context); | ||
| 50 | }; | ||
| 88 | 51 | ||
| 89 | struct vexpress_config_func; | 52 | struct device *vexpress_config_bridge_register(struct device *parent, |
| 53 | struct vexpress_config_bridge_ops *ops, void *context); | ||
| 90 | 54 | ||
| 91 | struct vexpress_config_func *__vexpress_config_func_get(struct device *dev, | 55 | /* Config regmap API */ |
| 92 | struct device_node *node); | ||
| 93 | #define vexpress_config_func_get_by_dev(dev) \ | ||
| 94 | __vexpress_config_func_get(dev, NULL) | ||
| 95 | #define vexpress_config_func_get_by_node(node) \ | ||
| 96 | __vexpress_config_func_get(NULL, node) | ||
| 97 | void vexpress_config_func_put(struct vexpress_config_func *func); | ||
| 98 | 56 | ||
| 99 | /* Both may sleep! */ | 57 | struct regmap *devm_regmap_init_vexpress_config(struct device *dev); |
| 100 | int vexpress_config_read(struct vexpress_config_func *func, int offset, | ||
| 101 | u32 *data); | ||
| 102 | int vexpress_config_write(struct vexpress_config_func *func, int offset, | ||
| 103 | u32 data); | ||
| 104 | 58 | ||
| 105 | /* Platform control */ | 59 | /* Platform control */ |
| 106 | 60 | ||
| 61 | unsigned int vexpress_get_mci_cardin(struct device *dev); | ||
| 107 | u32 vexpress_get_procid(int site); | 62 | u32 vexpress_get_procid(int site); |
| 108 | u32 vexpress_get_hbi(int site); | ||
| 109 | void *vexpress_get_24mhz_clock_base(void); | 63 | void *vexpress_get_24mhz_clock_base(void); |
| 110 | void vexpress_flags_set(u32 data); | 64 | void vexpress_flags_set(u32 data); |
| 111 | 65 | ||
| 112 | #define vexpress_get_site_by_node(node) __vexpress_get_site(NULL, node) | ||
| 113 | #define vexpress_get_site_by_dev(dev) __vexpress_get_site(dev, NULL) | ||
| 114 | unsigned __vexpress_get_site(struct device *dev, struct device_node *node); | ||
| 115 | |||
| 116 | void vexpress_sysreg_early_init(void __iomem *base); | 66 | void vexpress_sysreg_early_init(void __iomem *base); |
| 117 | void vexpress_sysreg_of_early_init(void); | 67 | int vexpress_syscfg_device_register(struct platform_device *pdev); |
| 118 | 68 | ||
| 119 | /* Clocks */ | 69 | /* Clocks */ |
| 120 | 70 | ||
| 121 | struct clk *vexpress_osc_setup(struct device *dev); | ||
| 122 | void vexpress_osc_of_setup(struct device_node *node); | ||
| 123 | |||
| 124 | void vexpress_clk_init(void __iomem *sp810_base); | 71 | void vexpress_clk_init(void __iomem *sp810_base); |
| 125 | void vexpress_clk_of_init(void); | ||
| 126 | 72 | ||
| 127 | #endif | 73 | #endif |
