diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-03-07 14:23:37 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-03-07 14:23:37 +0100 |
commit | eae7bc9688f80eb105d159d544391dbd16be27fe (patch) | |
tree | 774ce8125c639f7e6530b2508a630afc83d6be76 /include | |
parent | a9ba3bc6bfebac17f76f9833d3745fce79c5ea6b (diff) | |
parent | 1192a7add658e93ba9242a2fc53a23108eb05e8c (diff) | |
download | barebox-eae7bc9688f80eb105d159d544391dbd16be27fe.tar.gz barebox-eae7bc9688f80eb105d159d544391dbd16be27fe.tar.xz |
Merge branch 'for-next/imx8-usb'
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/clk.h | 107 | ||||
-rw-r--r-- | include/linux/nls.h | 40 | ||||
-rw-r--r-- | include/usb/ch9.h | 1 |
3 files changed, 137 insertions, 11 deletions
diff --git a/include/linux/clk.h b/include/linux/clk.h index 20498574f8..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,22 +235,34 @@ 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) @@ -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> 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/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 */ }; |