diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/efi.h | 5 | ||||
-rw-r--r-- | include/i2c/i2c-early.h | 10 | ||||
-rw-r--r-- | include/image-metadata.h | 4 | ||||
-rw-r--r-- | include/linux/clk.h | 114 | ||||
-rw-r--r-- | include/linux/nls.h | 40 | ||||
-rw-r--r-- | include/mfd/syscon.h | 5 | ||||
-rw-r--r-- | include/soc/at91/atmel-sfr.h | 34 | ||||
-rw-r--r-- | include/usb/ch9.h | 1 |
8 files changed, 201 insertions, 12 deletions
diff --git a/include/efi.h b/include/efi.h index 7cc5fe05fa..218333f824 100644 --- a/include/efi.h +++ b/include/efi.h @@ -234,7 +234,10 @@ typedef struct { efi_status_t (EFIAPI *exit_boot_services)(efi_handle_t, unsigned long); void *get_next_monotonic_count; efi_status_t (EFIAPI *stall)(unsigned long usecs); - void *set_watchdog_timer; + efi_status_t (EFIAPI *set_watchdog_timer)(unsigned long timeout, + uint64_t watchdog_code, + unsigned long data_size, + s16 *watchdog_data); efi_status_t(EFIAPI *connect_controller)(efi_handle_t controller_handle, efi_handle_t *driver_image_handle, struct efi_device_path *remaining_device_path, diff --git a/include/i2c/i2c-early.h b/include/i2c/i2c-early.h new file mode 100644 index 0000000000..27efd25109 --- /dev/null +++ b/include/i2c/i2c-early.h @@ -0,0 +1,10 @@ +#ifndef __I2C_EARLY_H +#define __I2C_EARLY_H + +#include <i2c/i2c.h> + +int i2c_fsl_xfer(void *ctx, struct i2c_msg *msgs, int num); + +void *ls1046_i2c_init(void __iomem *regs); + +#endif /* __I2C_EARLY_H */ diff --git a/include/image-metadata.h b/include/image-metadata.h index 8739bffb92..5904d95acd 100644 --- a/include/image-metadata.h +++ b/include/image-metadata.h @@ -118,6 +118,10 @@ static inline void imd_used(const void *unused) #define IMD_USED(_name) \ imd_used(&__barebox_imd_##_name) +#define IMD_USED_OF(_name) ({ \ + extern char __barebox_imd_OF_ ## _name[]; \ + imd_used(&__barebox_imd_OF_ ## _name); \ + }) #endif /* __BAREBOX__ */ diff --git a/include/linux/clk.h b/include/linux/clk.h index 978a0a8a9a..ee888dc083 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -25,6 +25,22 @@ struct device_d; */ struct clk; +/** + * struct clk_bulk_data - Data used for bulk clk operations. + * + * @id: clock consumer ID + * @clk: struct clk * to store the associated clock + * + * The CLK APIs provide a series of clk_bulk_() API calls as + * a convenience to consumers which require multiple clks. This + * structure is used to manage data for these calls. + */ +struct clk_bulk_data { + const char *id; + struct clk *clk; +}; + + #ifdef CONFIG_HAVE_CLK /** @@ -45,6 +61,29 @@ struct clk; struct clk *clk_get(struct device_d *dev, const char *id); /** + * clk_bulk_get - lookup and obtain a number of references to clock producer. + * @dev: device for clock "consumer" + * @num_clks: the number of clk_bulk_data + * @clks: the clk_bulk_data table of consumer + * + * This helper function allows drivers to get several clk consumers in one + * operation. If any of the clk cannot be acquired then any clks + * that were obtained will be freed before returning to the caller. + * + * Returns 0 if all clocks specified in clk_bulk_data table are obtained + * successfully, or valid IS_ERR() condition containing errno. + * The implementation uses @dev and @clk_bulk_data.id to determine the + * clock consumer, and thereby the clock producer. + * The clock returned is stored in each @clk_bulk_data.clk field. + * + * Drivers must assume that the clock source is not enabled. + * + * clk_bulk_get should not be called from within interrupt context. + */ +int __must_check clk_bulk_get(struct device_d *dev, int num_clks, + struct clk_bulk_data *clks); + +/** * clk_enable - inform the system when the clock source should be running. * @clk: clock source * @@ -55,6 +94,18 @@ struct clk *clk_get(struct device_d *dev, const char *id); int clk_enable(struct clk *clk); /** + * clk_bulk_enable - inform the system when the set of clks should be running. + * @num_clks: the number of clk_bulk_data + * @clks: the clk_bulk_data table of consumer + * + * May be called from atomic contexts. + * + * Returns success (0) or negative errno. + */ +int __must_check clk_bulk_enable(int num_clks, + const struct clk_bulk_data *clks); + +/** * clk_disable - inform the system when the clock source is no longer required. * @clk: clock source * @@ -69,6 +120,24 @@ int clk_enable(struct clk *clk); void clk_disable(struct clk *clk); /** + * clk_bulk_disable - inform the system when the set of clks is no + * longer required. + * @num_clks: the number of clk_bulk_data + * @clks: the clk_bulk_data table of consumer + * + * Inform the system that a set of clks is no longer required by + * a driver and may be shut down. + * + * May be called from atomic contexts. + * + * Implementation detail: if the set of clks is shared between + * multiple drivers, clk_bulk_enable() calls must be balanced by the + * same number of clk_bulk_disable() calls for the clock source to be + * disabled. + */ +void clk_bulk_disable(int num_clks, const struct clk_bulk_data *clks); + +/** * clk_get_rate - obtain the current clock rate (in Hz) for a clock source. * This is only valid once the clock source has been enabled. * @clk: clock source @@ -76,17 +145,17 @@ void clk_disable(struct clk *clk); unsigned long clk_get_rate(struct clk *clk); /** - * clk_put - "free" the clock source - * @clk: clock source + * clk_bulk_put - "free" the clock source + * @num_clks: the number of clk_bulk_data + * @clks: the clk_bulk_data table of consumer * - * Note: drivers must ensure that all clk_enable calls made on this - * clock source are balanced by clk_disable calls prior to calling + * Note: drivers must ensure that all clk_bulk_enable calls made on this + * clock source are balanced by clk_bulk_disable calls prior to calling * this function. * - * clk_put should not be called from within interrupt context. + * clk_bulk_put should not be called from within interrupt context. */ -void clk_put(struct clk *clk); - +void clk_bulk_put(int num_clks, struct clk_bulk_data *clks); /* * The remaining APIs are optional for machine class support. @@ -166,24 +235,36 @@ static inline struct clk *clk_get(struct device_d *dev, const char *id) return NULL; } -static inline int clk_enable(struct clk *clk) +static inline int __must_check clk_bulk_get(struct device_d *dev, int num_clks, + struct clk_bulk_data *clks) { return 0; } -static inline void clk_disable(struct clk *clk) +static inline void clk_bulk_put(int num_clks, struct clk_bulk_data *clks) {} + +static inline int clk_enable(struct clk *clk) { + return 0; } -static inline unsigned long clk_get_rate(struct clk *clk) +static inline int __must_check clk_bulk_enable(int num_clks, struct clk_bulk_data *clks) { return 0; } -static inline void clk_put(struct clk *clk) +static inline void clk_disable(struct clk *clk) { } +static inline void clk_bulk_disable(int num_clks, + struct clk_bulk_data *clks) {} + +static inline unsigned long clk_get_rate(struct clk *clk) +{ + return 0; +} + static inline long clk_round_rate(struct clk *clk, unsigned long rate) { return 0; @@ -195,6 +276,10 @@ static inline int clk_set_rate(struct clk *clk, unsigned long rate) } #endif +static inline void clk_put(struct clk *clk) +{ +} + #ifdef CONFIG_COMMON_CLK #include <linux/list.h> @@ -385,6 +470,11 @@ int of_clk_add_provider(struct device_node *np, struct clk *(*clk_src_get)(struct of_phandle_args *args, void *data), void *data); + +static inline unsigned int clk_get_num_parents(const struct clk *hw) +{ + return hw->num_parents; +} #else @@ -430,6 +520,8 @@ static inline int of_clk_add_provider(struct device_node *np, } #endif +#define CLK_OF_DECLARE_DRIVER(name, compat, fn) CLK_OF_DECLARE(name, compat, fn) + struct string_list; int clk_name_complete(struct string_list *sl, char *instr); diff --git a/include/linux/nls.h b/include/linux/nls.h new file mode 100644 index 0000000000..62fb7b5a97 --- /dev/null +++ b/include/linux/nls.h @@ -0,0 +1,40 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_NLS_H +#define _LINUX_NLS_H + +/* Unicode has changed over the years. Unicode code points no longer + * fit into 16 bits; as of Unicode 5 valid code points range from 0 + * to 0x10ffff (17 planes, where each plane holds 65536 code points). + * + * The original decision to represent Unicode characters as 16-bit + * wchar_t values is now outdated. But plane 0 still includes the + * most commonly used characters, so we will retain it. The newer + * 32-bit unicode_t type can be used when it is necessary to + * represent the full Unicode character set. + */ + +/* Plane-0 Unicode character */ +typedef u16 wchar_t; +#define MAX_WCHAR_T 0xffff + +/* Arbitrary Unicode character */ +typedef u32 unicode_t; + +/* this value hold the maximum octet of charset */ +#define NLS_MAX_CHARSET_SIZE 6 /* for UTF-8 */ + +/* Byte order for UTF-16 strings */ +enum utf16_endian { + UTF16_HOST_ENDIAN, + UTF16_LITTLE_ENDIAN, + UTF16_BIG_ENDIAN +}; + +/* nls_base.c */ + +extern int utf8_to_utf32(const u8 *s, int len, unicode_t *pu); +extern int utf8s_to_utf16s(const u8 *s, int len, + enum utf16_endian endian, wchar_t *pwcs, int maxlen); + +#endif /* _LINUX_NLS_H */ + diff --git a/include/mfd/syscon.h b/include/mfd/syscon.h index 63b893e4ae..902f9fa2f3 100644 --- a/include/mfd/syscon.h +++ b/include/mfd/syscon.h @@ -21,6 +21,7 @@ void __iomem *syscon_base_lookup_by_pdevname(const char *s); void __iomem *syscon_base_lookup_by_phandle (struct device_node *np, const char *property); struct regmap *syscon_node_to_regmap(struct device_node *np); +struct regmap *syscon_regmap_lookup_by_compatible(const char *s); #else static inline void __iomem *syscon_base_lookup_by_pdevname(const char *s) { @@ -37,6 +38,10 @@ static inline struct regmap *syscon_node_to_regmap(struct device_node *np) { return ERR_PTR(-ENOSYS); } +static inline struct regmap *syscon_regmap_lookup_by_compatible(const char *s) +{ + return ERR_PTR(-ENOSYS); +} #endif #endif diff --git a/include/soc/at91/atmel-sfr.h b/include/soc/at91/atmel-sfr.h new file mode 100644 index 0000000000..482337af06 --- /dev/null +++ b/include/soc/at91/atmel-sfr.h @@ -0,0 +1,34 @@ +/* + * Atmel SFR (Special Function Registers) register offsets and bit definitions. + * + * Copyright (C) 2016 Atmel + * + * Author: Ludovic Desroches <ludovic.desroches@atmel.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef _LINUX_MFD_SYSCON_ATMEL_SFR_H +#define _LINUX_MFD_SYSCON_ATMEL_SFR_H + +#define AT91_SFR_DDRCFG 0x04 /* DDR Configuration Register */ +/* 0x08 ~ 0x0c: Reserved */ +#define AT91_SFR_OHCIICR 0x10 /* OHCI INT Configuration Register */ +#define AT91_SFR_OHCIISR 0x14 /* OHCI INT Status Register */ +#define AT91_SFR_UTMICKTRIM 0x30 /* UTMI Clock Trimming Register */ +#define AT91_SFR_I2SCLKSEL 0x90 /* I2SC Register */ + +/* Field definitions */ +#define AT91_OHCIICR_SUSPEND_A BIT(8) +#define AT91_OHCIICR_SUSPEND_B BIT(9) +#define AT91_OHCIICR_SUSPEND_C BIT(10) + +#define AT91_OHCIICR_USB_SUSPEND (AT91_OHCIICR_SUSPEND_A | \ + AT91_OHCIICR_SUSPEND_B | \ + AT91_OHCIICR_SUSPEND_C) + +#define AT91_UTMICKTRIM_FREQ GENMASK(1, 0) + +#endif /* _LINUX_MFD_SYSCON_ATMEL_SFR_H */ diff --git a/include/usb/ch9.h b/include/usb/ch9.h index b44d41e85f..89d83e0d09 100644 --- a/include/usb/ch9.h +++ b/include/usb/ch9.h @@ -913,6 +913,7 @@ enum usb_device_speed { USB_SPEED_HIGH, /* usb 2.0 */ USB_SPEED_WIRELESS, /* wireless (usb 2.5) */ USB_SPEED_SUPER, /* usb 3.0 */ + USB_SPEED_SUPER_PLUS, /* usb 3.1 */ }; |