mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-05 03:59:04 -04:00
Merge tag 'asoc-v6.2' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-next
ASoC: Updates for v6.2 This is a fairly sedate release for the core code, but there's been a lot of driver work especially around the x86 platforms and device tree updates: - More cleanups of the DAPM code from Morimoto-san. - Factoring out of mapping hw_params onto SoundWire configuration by Charles Keepax. - The ever ongoing overhauls of the Intel DSP code continue, including support for loading libraries and probes with IPC4 on SOF. - Support for more sample formats on JZ4740. - Lots of device tree conversions and fixups. - Support for Allwinner D1, a range of AMD and Intel systems, Mediatek systems with multiple DMICs, Nuvoton NAU8318, NXP fsl_rpmsg and i.MX93, Qualcomm AudioReach Enable, MFC and SAL, RealTek RT1318 and Rockchip RK3588 There's more cross tree updates than usual, though all fairly minor: - Some OMAP board file updates that were depedencies for removing their providers in ASoC, as part of a wider effort removing the support for the relevant OMAP platforms. - A new I2C API required for updates to the new I2C probe API. - A DRM update making use of a new API for fixing the capabilities advertised via hdmi-codec. Since this is being sent early I might send some more stuff if you've not yet sent your pull request and there's more come in.
This commit is contained in:
@@ -71,7 +71,7 @@ int ghes_register_vendor_record_notifier(struct notifier_block *nb);
|
||||
void ghes_unregister_vendor_record_notifier(struct notifier_block *nb);
|
||||
#endif
|
||||
|
||||
int ghes_estatus_pool_init(int num_ghes);
|
||||
int ghes_estatus_pool_init(unsigned int num_ghes);
|
||||
|
||||
/* From drivers/edac/ghes_edac.c */
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef compat_arg_u64
|
||||
#ifdef CONFIG_CPU_BIG_ENDIAN
|
||||
#ifndef CONFIG_CPU_BIG_ENDIAN
|
||||
#define compat_arg_u64(name) u32 name##_lo, u32 name##_hi
|
||||
#define compat_arg_u64_dual(name) u32, name##_lo, u32, name##_hi
|
||||
#else
|
||||
|
||||
@@ -102,6 +102,15 @@ struct ms_hyperv_tsc_page {
|
||||
volatile s64 tsc_offset;
|
||||
} __packed;
|
||||
|
||||
union hv_reference_tsc_msr {
|
||||
u64 as_uint64;
|
||||
struct {
|
||||
u64 enable:1;
|
||||
u64 reserved:11;
|
||||
u64 pfn:52;
|
||||
} __packed;
|
||||
};
|
||||
|
||||
/*
|
||||
* The guest OS needs to register the guest ID with the hypervisor.
|
||||
* The guest ID is a 64 bit entity and the structure of this ID is
|
||||
|
||||
@@ -162,6 +162,16 @@
|
||||
#define PATCHABLE_DISCARDS *(__patchable_function_entries)
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_ARCH_SUPPORTS_CFI_CLANG
|
||||
/*
|
||||
* Simply points to ftrace_stub, but with the proper protocol.
|
||||
* Defined by the linker script in linux/vmlinux.lds.h
|
||||
*/
|
||||
#define FTRACE_STUB_HACK ftrace_stub_graph = ftrace_stub;
|
||||
#else
|
||||
#define FTRACE_STUB_HACK
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FTRACE_MCOUNT_RECORD
|
||||
/*
|
||||
* The ftrace call sites are logged to a section whose name depends on the
|
||||
@@ -169,10 +179,6 @@
|
||||
* FTRACE_CALLSITE_SECTION. We capture all of them here to avoid header
|
||||
* dependencies for FTRACE_CALLSITE_SECTION's definition.
|
||||
*
|
||||
* Need to also make ftrace_stub_graph point to ftrace_stub
|
||||
* so that the same stub location may have different protocols
|
||||
* and not mess up with C verifiers.
|
||||
*
|
||||
* ftrace_ops_list_func will be defined as arch_ftrace_ops_list_func
|
||||
* as some archs will have a different prototype for that function
|
||||
* but ftrace_ops_list_func() will have a single prototype.
|
||||
@@ -182,11 +188,11 @@
|
||||
KEEP(*(__mcount_loc)) \
|
||||
KEEP_PATCHABLE \
|
||||
__stop_mcount_loc = .; \
|
||||
ftrace_stub_graph = ftrace_stub; \
|
||||
FTRACE_STUB_HACK \
|
||||
ftrace_ops_list_func = arch_ftrace_ops_list_func;
|
||||
#else
|
||||
# ifdef CONFIG_FUNCTION_TRACER
|
||||
# define MCOUNT_REC() ftrace_stub_graph = ftrace_stub; \
|
||||
# define MCOUNT_REC() FTRACE_STUB_HACK \
|
||||
ftrace_ops_list_func = arch_ftrace_ops_list_func;
|
||||
# else
|
||||
# define MCOUNT_REC()
|
||||
@@ -341,6 +347,7 @@
|
||||
#define DATA_DATA \
|
||||
*(.xiptext) \
|
||||
*(DATA_MAIN) \
|
||||
*(.data..decrypted) \
|
||||
*(.ref.data) \
|
||||
*(.data..shared_aligned) /* percpu related */ \
|
||||
MEM_KEEP(init.data*) \
|
||||
@@ -989,7 +996,6 @@
|
||||
#ifdef CONFIG_AMD_MEM_ENCRYPT
|
||||
#define PERCPU_DECRYPTED_SECTION \
|
||||
. = ALIGN(PAGE_SIZE); \
|
||||
*(.data..decrypted) \
|
||||
*(.data..percpu..decrypted) \
|
||||
. = ALIGN(PAGE_SIZE);
|
||||
#else
|
||||
|
||||
@@ -32,6 +32,15 @@
|
||||
|
||||
#define MAX_WAIT_SCHED_ENTITY_Q_EMPTY msecs_to_jiffies(1000)
|
||||
|
||||
/**
|
||||
* DRM_SCHED_FENCE_DONT_PIPELINE - Prefent dependency pipelining
|
||||
*
|
||||
* Setting this flag on a scheduler fence prevents pipelining of jobs depending
|
||||
* on this fence. In other words we always insert a full CPU round trip before
|
||||
* dependen jobs are pushed to the hw queue.
|
||||
*/
|
||||
#define DRM_SCHED_FENCE_DONT_PIPELINE DMA_FENCE_FLAG_USER_BITS
|
||||
|
||||
struct drm_gem_object;
|
||||
|
||||
struct drm_gpu_scheduler;
|
||||
|
||||
@@ -853,7 +853,8 @@ static inline bool blk_mq_add_to_batch(struct request *req,
|
||||
struct io_comp_batch *iob, int ioerror,
|
||||
void (*complete)(struct io_comp_batch *))
|
||||
{
|
||||
if (!iob || (req->rq_flags & RQF_ELV) || ioerror)
|
||||
if (!iob || (req->rq_flags & RQF_ELV) || ioerror ||
|
||||
(req->end_io && !blk_rq_is_passthrough(req)))
|
||||
return false;
|
||||
|
||||
if (!iob->complete)
|
||||
|
||||
@@ -311,6 +311,13 @@ struct queue_limits {
|
||||
unsigned char discard_misaligned;
|
||||
unsigned char raid_partial_stripes_expensive;
|
||||
enum blk_zoned_model zoned;
|
||||
|
||||
/*
|
||||
* Drivers that set dma_alignment to less than 511 must be prepared to
|
||||
* handle individual bvec's that are not a multiple of a SECTOR_SIZE
|
||||
* due to possible offsets.
|
||||
*/
|
||||
unsigned int dma_alignment;
|
||||
};
|
||||
|
||||
typedef int (*report_zones_cb)(struct blk_zone *zone, unsigned int idx,
|
||||
@@ -456,12 +463,6 @@ struct request_queue {
|
||||
unsigned long nr_requests; /* Max # of requests */
|
||||
|
||||
unsigned int dma_pad_mask;
|
||||
/*
|
||||
* Drivers that set dma_alignment to less than 511 must be prepared to
|
||||
* handle individual bvec's that are not a multiple of a SECTOR_SIZE
|
||||
* due to possible offsets.
|
||||
*/
|
||||
unsigned int dma_alignment;
|
||||
|
||||
#ifdef CONFIG_BLK_INLINE_ENCRYPTION
|
||||
struct blk_crypto_profile *crypto_profile;
|
||||
@@ -944,7 +945,6 @@ extern void blk_queue_io_min(struct request_queue *q, unsigned int min);
|
||||
extern void blk_limits_io_opt(struct queue_limits *limits, unsigned int opt);
|
||||
extern void blk_queue_io_opt(struct request_queue *q, unsigned int opt);
|
||||
extern void blk_set_queue_depth(struct request_queue *q, unsigned int depth);
|
||||
extern void blk_set_default_limits(struct queue_limits *lim);
|
||||
extern void blk_set_stacking_limits(struct queue_limits *lim);
|
||||
extern int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
|
||||
sector_t offset);
|
||||
@@ -1324,7 +1324,7 @@ static inline sector_t bdev_zone_sectors(struct block_device *bdev)
|
||||
|
||||
static inline int queue_dma_alignment(const struct request_queue *q)
|
||||
{
|
||||
return q ? q->dma_alignment : 511;
|
||||
return q ? q->limits.dma_alignment : 511;
|
||||
}
|
||||
|
||||
static inline unsigned int bdev_dma_alignment(struct block_device *bdev)
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <linux/bpfptr.h>
|
||||
#include <linux/btf.h>
|
||||
#include <linux/rcupdate_trace.h>
|
||||
#include <linux/static_call.h>
|
||||
|
||||
struct bpf_verifier_env;
|
||||
struct bpf_verifier_log;
|
||||
@@ -314,7 +315,7 @@ static inline void __copy_map_value(struct bpf_map *map, void *dst, void *src, b
|
||||
u32 next_off = map->off_arr->field_off[i];
|
||||
|
||||
memcpy(dst + curr_off, src + curr_off, next_off - curr_off);
|
||||
curr_off += map->off_arr->field_sz[i];
|
||||
curr_off = next_off + map->off_arr->field_sz[i];
|
||||
}
|
||||
memcpy(dst + curr_off, src + curr_off, map->value_size - curr_off);
|
||||
}
|
||||
@@ -343,7 +344,7 @@ static inline void zero_map_value(struct bpf_map *map, void *dst)
|
||||
u32 next_off = map->off_arr->field_off[i];
|
||||
|
||||
memset(dst + curr_off, 0, next_off - curr_off);
|
||||
curr_off += map->off_arr->field_sz[i];
|
||||
curr_off = next_off + map->off_arr->field_sz[i];
|
||||
}
|
||||
memset(dst + curr_off, 0, map->value_size - curr_off);
|
||||
}
|
||||
@@ -953,6 +954,10 @@ struct bpf_dispatcher {
|
||||
void *rw_image;
|
||||
u32 image_off;
|
||||
struct bpf_ksym ksym;
|
||||
#ifdef CONFIG_HAVE_STATIC_CALL
|
||||
struct static_call_key *sc_key;
|
||||
void *sc_tramp;
|
||||
#endif
|
||||
};
|
||||
|
||||
static __always_inline __nocfi unsigned int bpf_dispatcher_nop_func(
|
||||
@@ -970,6 +975,34 @@ struct bpf_trampoline *bpf_trampoline_get(u64 key,
|
||||
struct bpf_attach_target_info *tgt_info);
|
||||
void bpf_trampoline_put(struct bpf_trampoline *tr);
|
||||
int arch_prepare_bpf_dispatcher(void *image, void *buf, s64 *funcs, int num_funcs);
|
||||
|
||||
/*
|
||||
* When the architecture supports STATIC_CALL replace the bpf_dispatcher_fn
|
||||
* indirection with a direct call to the bpf program. If the architecture does
|
||||
* not have STATIC_CALL, avoid a double-indirection.
|
||||
*/
|
||||
#ifdef CONFIG_HAVE_STATIC_CALL
|
||||
|
||||
#define __BPF_DISPATCHER_SC_INIT(_name) \
|
||||
.sc_key = &STATIC_CALL_KEY(_name), \
|
||||
.sc_tramp = STATIC_CALL_TRAMP_ADDR(_name),
|
||||
|
||||
#define __BPF_DISPATCHER_SC(name) \
|
||||
DEFINE_STATIC_CALL(bpf_dispatcher_##name##_call, bpf_dispatcher_nop_func)
|
||||
|
||||
#define __BPF_DISPATCHER_CALL(name) \
|
||||
static_call(bpf_dispatcher_##name##_call)(ctx, insnsi, bpf_func)
|
||||
|
||||
#define __BPF_DISPATCHER_UPDATE(_d, _new) \
|
||||
__static_call_update((_d)->sc_key, (_d)->sc_tramp, (_new))
|
||||
|
||||
#else
|
||||
#define __BPF_DISPATCHER_SC_INIT(name)
|
||||
#define __BPF_DISPATCHER_SC(name)
|
||||
#define __BPF_DISPATCHER_CALL(name) bpf_func(ctx, insnsi)
|
||||
#define __BPF_DISPATCHER_UPDATE(_d, _new)
|
||||
#endif
|
||||
|
||||
#define BPF_DISPATCHER_INIT(_name) { \
|
||||
.mutex = __MUTEX_INITIALIZER(_name.mutex), \
|
||||
.func = &_name##_func, \
|
||||
@@ -981,32 +1014,29 @@ int arch_prepare_bpf_dispatcher(void *image, void *buf, s64 *funcs, int num_func
|
||||
.name = #_name, \
|
||||
.lnode = LIST_HEAD_INIT(_name.ksym.lnode), \
|
||||
}, \
|
||||
__BPF_DISPATCHER_SC_INIT(_name##_call) \
|
||||
}
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
#define BPF_DISPATCHER_ATTRIBUTES __attribute__((patchable_function_entry(5)))
|
||||
#else
|
||||
#define BPF_DISPATCHER_ATTRIBUTES
|
||||
#endif
|
||||
|
||||
#define DEFINE_BPF_DISPATCHER(name) \
|
||||
notrace BPF_DISPATCHER_ATTRIBUTES \
|
||||
__BPF_DISPATCHER_SC(name); \
|
||||
noinline __nocfi unsigned int bpf_dispatcher_##name##_func( \
|
||||
const void *ctx, \
|
||||
const struct bpf_insn *insnsi, \
|
||||
bpf_func_t bpf_func) \
|
||||
{ \
|
||||
return bpf_func(ctx, insnsi); \
|
||||
return __BPF_DISPATCHER_CALL(name); \
|
||||
} \
|
||||
EXPORT_SYMBOL(bpf_dispatcher_##name##_func); \
|
||||
struct bpf_dispatcher bpf_dispatcher_##name = \
|
||||
BPF_DISPATCHER_INIT(bpf_dispatcher_##name);
|
||||
|
||||
#define DECLARE_BPF_DISPATCHER(name) \
|
||||
unsigned int bpf_dispatcher_##name##_func( \
|
||||
const void *ctx, \
|
||||
const struct bpf_insn *insnsi, \
|
||||
bpf_func_t bpf_func); \
|
||||
extern struct bpf_dispatcher bpf_dispatcher_##name;
|
||||
|
||||
#define BPF_DISPATCHER_FUNC(name) bpf_dispatcher_##name##_func
|
||||
#define BPF_DISPATCHER_PTR(name) (&bpf_dispatcher_##name)
|
||||
void bpf_dispatcher_change_prog(struct bpf_dispatcher *d, struct bpf_prog *from,
|
||||
|
||||
@@ -152,6 +152,22 @@ static inline bool can_is_canxl_dev_mtu(unsigned int mtu)
|
||||
return (mtu >= CANXL_MIN_MTU && mtu <= CANXL_MAX_MTU);
|
||||
}
|
||||
|
||||
/* drop skb if it does not contain a valid CAN frame for sending */
|
||||
static inline bool can_dev_dropped_skb(struct net_device *dev, struct sk_buff *skb)
|
||||
{
|
||||
struct can_priv *priv = netdev_priv(dev);
|
||||
|
||||
if (priv->ctrlmode & CAN_CTRLMODE_LISTENONLY) {
|
||||
netdev_info_once(dev,
|
||||
"interface in listen only mode, dropping skb\n");
|
||||
kfree_skb(skb);
|
||||
dev->stats.tx_dropped++;
|
||||
return true;
|
||||
}
|
||||
|
||||
return can_dropped_invalid_skb(dev, skb);
|
||||
}
|
||||
|
||||
void can_setup(struct net_device *dev);
|
||||
|
||||
struct net_device *alloc_candev_mqs(int sizeof_priv, unsigned int echo_skb_max,
|
||||
|
||||
@@ -106,6 +106,7 @@ struct cgroup_subsys_state *css_tryget_online_from_dir(struct dentry *dentry,
|
||||
|
||||
struct cgroup *cgroup_get_from_path(const char *path);
|
||||
struct cgroup *cgroup_get_from_fd(int fd);
|
||||
struct cgroup *cgroup_v1v2_get_from_fd(int fd);
|
||||
|
||||
int cgroup_attach_task_all(struct task_struct *from, struct task_struct *);
|
||||
int cgroup_transfer_tasks(struct cgroup *to, struct cgroup *from);
|
||||
|
||||
@@ -542,11 +542,10 @@ struct counter_array {
|
||||
#define DEFINE_COUNTER_ARRAY_CAPTURE(_name, _length) \
|
||||
DEFINE_COUNTER_ARRAY_U64(_name, _length)
|
||||
|
||||
#define DEFINE_COUNTER_ARRAY_POLARITY(_name, _enums, _length) \
|
||||
DEFINE_COUNTER_AVAILABLE(_name##_available, _enums); \
|
||||
#define DEFINE_COUNTER_ARRAY_POLARITY(_name, _available, _length) \
|
||||
struct counter_array _name = { \
|
||||
.type = COUNTER_COMP_SIGNAL_POLARITY, \
|
||||
.avail = &(_name##_available), \
|
||||
.avail = &(_available), \
|
||||
.length = (_length), \
|
||||
}
|
||||
|
||||
|
||||
@@ -61,9 +61,9 @@ struct sk_buff;
|
||||
|
||||
/* Special struct emulating a Ethernet header */
|
||||
struct qca_mgmt_ethhdr {
|
||||
u32 command; /* command bit 31:0 */
|
||||
u32 seq; /* seq 63:32 */
|
||||
u32 mdio_data; /* first 4byte mdio */
|
||||
__le32 command; /* command bit 31:0 */
|
||||
__le32 seq; /* seq 63:32 */
|
||||
__le32 mdio_data; /* first 4byte mdio */
|
||||
__be16 hdr; /* qca hdr */
|
||||
} __packed;
|
||||
|
||||
@@ -73,7 +73,7 @@ enum mdio_cmd {
|
||||
};
|
||||
|
||||
struct mib_ethhdr {
|
||||
u32 data[3]; /* first 3 mib counter */
|
||||
__le32 data[3]; /* first 3 mib counter */
|
||||
__be16 hdr; /* qca hdr */
|
||||
} __packed;
|
||||
|
||||
|
||||
@@ -389,6 +389,7 @@ void efi_native_runtime_setup(void);
|
||||
#define EFI_LOAD_FILE2_PROTOCOL_GUID EFI_GUID(0x4006c0c1, 0xfcb3, 0x403e, 0x99, 0x6d, 0x4a, 0x6c, 0x87, 0x24, 0xe0, 0x6d)
|
||||
#define EFI_RT_PROPERTIES_TABLE_GUID EFI_GUID(0xeb66918a, 0x7eef, 0x402a, 0x84, 0x2e, 0x93, 0x1d, 0x21, 0xc3, 0x8a, 0xe9)
|
||||
#define EFI_DXE_SERVICES_TABLE_GUID EFI_GUID(0x05ad34ba, 0x6f02, 0x4214, 0x95, 0x2e, 0x4d, 0xa0, 0x39, 0x8e, 0x2b, 0xb9)
|
||||
#define EFI_SMBIOS_PROTOCOL_GUID EFI_GUID(0x03583ff6, 0xcb36, 0x4940, 0x94, 0x7e, 0xb9, 0xb3, 0x9f, 0x4a, 0xfa, 0xf7)
|
||||
|
||||
#define EFI_IMAGE_SECURITY_DATABASE_GUID EFI_GUID(0xd719b2cb, 0x3d3a, 0x4596, 0xa3, 0xbc, 0xda, 0xd0, 0x0e, 0x67, 0x65, 0x6f)
|
||||
#define EFI_SHIM_LOCK_GUID EFI_GUID(0x605dab50, 0xe046, 0x4300, 0xab, 0xb6, 0x3d, 0xd8, 0x10, 0xdd, 0x8b, 0x23)
|
||||
@@ -1085,9 +1086,6 @@ efi_status_t efivar_set_variable_locked(efi_char16_t *name, efi_guid_t *vendor,
|
||||
efi_status_t efivar_set_variable(efi_char16_t *name, efi_guid_t *vendor,
|
||||
u32 attr, unsigned long data_size, void *data);
|
||||
|
||||
efi_status_t check_var_size(u32 attributes, unsigned long size);
|
||||
efi_status_t check_var_size_nonblocking(u32 attributes, unsigned long size);
|
||||
|
||||
#if IS_ENABLED(CONFIG_EFI_CAPSULE_LOADER)
|
||||
extern bool efi_capsule_pending(int *reset_type);
|
||||
|
||||
@@ -1225,7 +1223,7 @@ efi_status_t efi_random_get_seed(void);
|
||||
arch_efi_call_virt_teardown(); \
|
||||
})
|
||||
|
||||
#define EFI_RANDOM_SEED_SIZE 64U
|
||||
#define EFI_RANDOM_SEED_SIZE 32U // BLAKE2S_HASH_SIZE
|
||||
|
||||
struct linux_efi_random_seed {
|
||||
u32 size;
|
||||
|
||||
@@ -555,7 +555,7 @@ static inline struct apertures_struct *alloc_apertures(unsigned int max_num) {
|
||||
|
||||
#elif defined(__i386__) || defined(__alpha__) || defined(__x86_64__) || \
|
||||
defined(__hppa__) || defined(__sh__) || defined(__powerpc__) || \
|
||||
defined(__arm__) || defined(__aarch64__)
|
||||
defined(__arm__) || defined(__aarch64__) || defined(__mips__)
|
||||
|
||||
#define fb_readb __raw_readb
|
||||
#define fb_readw __raw_readw
|
||||
|
||||
@@ -43,11 +43,24 @@ extern __kernel_size_t __underlying_strlen(const char *p) __RENAME(strlen);
|
||||
extern char *__underlying_strncat(char *p, const char *q, __kernel_size_t count) __RENAME(strncat);
|
||||
extern char *__underlying_strncpy(char *p, const char *q, __kernel_size_t size) __RENAME(strncpy);
|
||||
#else
|
||||
#define __underlying_memchr __builtin_memchr
|
||||
#define __underlying_memcmp __builtin_memcmp
|
||||
|
||||
#if defined(__SANITIZE_MEMORY__)
|
||||
/*
|
||||
* For KMSAN builds all memcpy/memset/memmove calls should be replaced by the
|
||||
* corresponding __msan_XXX functions.
|
||||
*/
|
||||
#include <linux/kmsan_string.h>
|
||||
#define __underlying_memcpy __msan_memcpy
|
||||
#define __underlying_memmove __msan_memmove
|
||||
#define __underlying_memset __msan_memset
|
||||
#else
|
||||
#define __underlying_memcpy __builtin_memcpy
|
||||
#define __underlying_memmove __builtin_memmove
|
||||
#define __underlying_memset __builtin_memset
|
||||
#endif
|
||||
|
||||
#define __underlying_memchr __builtin_memchr
|
||||
#define __underlying_memcmp __builtin_memcmp
|
||||
#define __underlying_strcat __builtin_strcat
|
||||
#define __underlying_strcpy __builtin_strcpy
|
||||
#define __underlying_strlen __builtin_strlen
|
||||
@@ -441,13 +454,18 @@ __FORTIFY_INLINE bool fortify_memcpy_chk(__kernel_size_t size,
|
||||
|
||||
#define __fortify_memcpy_chk(p, q, size, p_size, q_size, \
|
||||
p_size_field, q_size_field, op) ({ \
|
||||
size_t __fortify_size = (size_t)(size); \
|
||||
WARN_ONCE(fortify_memcpy_chk(__fortify_size, p_size, q_size, \
|
||||
p_size_field, q_size_field, #op), \
|
||||
const size_t __fortify_size = (size_t)(size); \
|
||||
const size_t __p_size = (p_size); \
|
||||
const size_t __q_size = (q_size); \
|
||||
const size_t __p_size_field = (p_size_field); \
|
||||
const size_t __q_size_field = (q_size_field); \
|
||||
WARN_ONCE(fortify_memcpy_chk(__fortify_size, __p_size, \
|
||||
__q_size, __p_size_field, \
|
||||
__q_size_field, #op), \
|
||||
#op ": detected field-spanning write (size %zu) of single %s (size %zu)\n", \
|
||||
__fortify_size, \
|
||||
"field \"" #p "\" at " __FILE__ ":" __stringify(__LINE__), \
|
||||
p_size_field); \
|
||||
__p_size_field); \
|
||||
__underlying_##op(p, q, __fortify_size); \
|
||||
})
|
||||
|
||||
|
||||
@@ -307,7 +307,7 @@ fscrypt_free_dummy_policy(struct fscrypt_dummy_policy *dummy_policy)
|
||||
}
|
||||
|
||||
/* keyring.c */
|
||||
void fscrypt_sb_delete(struct super_block *sb);
|
||||
void fscrypt_destroy_keyring(struct super_block *sb);
|
||||
int fscrypt_ioctl_add_key(struct file *filp, void __user *arg);
|
||||
int fscrypt_add_test_dummy_key(struct super_block *sb,
|
||||
const struct fscrypt_dummy_policy *dummy_policy);
|
||||
@@ -521,7 +521,7 @@ fscrypt_free_dummy_policy(struct fscrypt_dummy_policy *dummy_policy)
|
||||
}
|
||||
|
||||
/* keyring.c */
|
||||
static inline void fscrypt_sb_delete(struct super_block *sb)
|
||||
static inline void fscrypt_destroy_keyring(struct super_block *sb)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -189,6 +189,7 @@ s32 i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client,
|
||||
u8 *values);
|
||||
int i2c_get_device_id(const struct i2c_client *client,
|
||||
struct i2c_device_identity *id);
|
||||
const struct i2c_device_id *i2c_client_get_device_id(const struct i2c_client *client);
|
||||
#endif /* I2C */
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,6 +16,9 @@ enum io_uring_cmd_flags {
|
||||
IO_URING_F_SQE128 = 4,
|
||||
IO_URING_F_CQE32 = 8,
|
||||
IO_URING_F_IOPOLL = 16,
|
||||
|
||||
/* the request is executed from poll, it should not be freed */
|
||||
IO_URING_F_MULTISHOT = 32,
|
||||
};
|
||||
|
||||
struct io_uring_cmd {
|
||||
|
||||
@@ -455,7 +455,7 @@ extern void iommu_set_default_translated(bool cmd_line);
|
||||
extern bool iommu_default_passthrough(void);
|
||||
extern struct iommu_resv_region *
|
||||
iommu_alloc_resv_region(phys_addr_t start, size_t length, int prot,
|
||||
enum iommu_resv_type type);
|
||||
enum iommu_resv_type type, gfp_t gfp);
|
||||
extern int iommu_get_group_resv_regions(struct iommu_group *group,
|
||||
struct list_head *head);
|
||||
|
||||
|
||||
21
include/linux/kmsan_string.h
Normal file
21
include/linux/kmsan_string.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* KMSAN string functions API used in other headers.
|
||||
*
|
||||
* Copyright (C) 2022 Google LLC
|
||||
* Author: Alexander Potapenko <glider@google.com>
|
||||
*
|
||||
*/
|
||||
#ifndef _LINUX_KMSAN_STRING_H
|
||||
#define _LINUX_KMSAN_STRING_H
|
||||
|
||||
/*
|
||||
* KMSAN overrides the default memcpy/memset/memmove implementations in the
|
||||
* kernel, which requires having __msan_XXX function prototypes in several other
|
||||
* headers. Keep them in one place instead of open-coding.
|
||||
*/
|
||||
void *__msan_memcpy(void *dst, const void *src, size_t size);
|
||||
void *__msan_memset(void *s, int c, size_t n);
|
||||
void *__msan_memmove(void *dest, const void *src, size_t len);
|
||||
|
||||
#endif /* _LINUX_KMSAN_STRING_H */
|
||||
@@ -1240,8 +1240,18 @@ int kvm_vcpu_write_guest(struct kvm_vcpu *vcpu, gpa_t gpa, const void *data,
|
||||
void kvm_vcpu_mark_page_dirty(struct kvm_vcpu *vcpu, gfn_t gfn);
|
||||
|
||||
/**
|
||||
* kvm_gfn_to_pfn_cache_init - prepare a cached kernel mapping and HPA for a
|
||||
* given guest physical address.
|
||||
* kvm_gpc_init - initialize gfn_to_pfn_cache.
|
||||
*
|
||||
* @gpc: struct gfn_to_pfn_cache object.
|
||||
*
|
||||
* This sets up a gfn_to_pfn_cache by initializing locks. Note, the cache must
|
||||
* be zero-allocated (or zeroed by the caller before init).
|
||||
*/
|
||||
void kvm_gpc_init(struct gfn_to_pfn_cache *gpc);
|
||||
|
||||
/**
|
||||
* kvm_gpc_activate - prepare a cached kernel mapping and HPA for a given guest
|
||||
* physical address.
|
||||
*
|
||||
* @kvm: pointer to kvm instance.
|
||||
* @gpc: struct gfn_to_pfn_cache object.
|
||||
@@ -1265,9 +1275,9 @@ void kvm_vcpu_mark_page_dirty(struct kvm_vcpu *vcpu, gfn_t gfn);
|
||||
* kvm_gfn_to_pfn_cache_check() to ensure that the cache is valid before
|
||||
* accessing the target page.
|
||||
*/
|
||||
int kvm_gfn_to_pfn_cache_init(struct kvm *kvm, struct gfn_to_pfn_cache *gpc,
|
||||
struct kvm_vcpu *vcpu, enum pfn_cache_usage usage,
|
||||
gpa_t gpa, unsigned long len);
|
||||
int kvm_gpc_activate(struct kvm *kvm, struct gfn_to_pfn_cache *gpc,
|
||||
struct kvm_vcpu *vcpu, enum pfn_cache_usage usage,
|
||||
gpa_t gpa, unsigned long len);
|
||||
|
||||
/**
|
||||
* kvm_gfn_to_pfn_cache_check - check validity of a gfn_to_pfn_cache.
|
||||
@@ -1324,7 +1334,7 @@ int kvm_gfn_to_pfn_cache_refresh(struct kvm *kvm, struct gfn_to_pfn_cache *gpc,
|
||||
void kvm_gfn_to_pfn_cache_unmap(struct kvm *kvm, struct gfn_to_pfn_cache *gpc);
|
||||
|
||||
/**
|
||||
* kvm_gfn_to_pfn_cache_destroy - destroy and unlink a gfn_to_pfn_cache.
|
||||
* kvm_gpc_deactivate - deactivate and unlink a gfn_to_pfn_cache.
|
||||
*
|
||||
* @kvm: pointer to kvm instance.
|
||||
* @gpc: struct gfn_to_pfn_cache object.
|
||||
@@ -1332,7 +1342,7 @@ void kvm_gfn_to_pfn_cache_unmap(struct kvm *kvm, struct gfn_to_pfn_cache *gpc);
|
||||
* This removes a cache from the @kvm's list to be processed on MMU notifier
|
||||
* invocation.
|
||||
*/
|
||||
void kvm_gfn_to_pfn_cache_destroy(struct kvm *kvm, struct gfn_to_pfn_cache *gpc);
|
||||
void kvm_gpc_deactivate(struct kvm *kvm, struct gfn_to_pfn_cache *gpc);
|
||||
|
||||
void kvm_sigset_activate(struct kvm_vcpu *vcpu);
|
||||
void kvm_sigset_deactivate(struct kvm_vcpu *vcpu);
|
||||
@@ -1390,6 +1400,8 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
|
||||
struct kvm_enable_cap *cap);
|
||||
long kvm_arch_vm_ioctl(struct file *filp,
|
||||
unsigned int ioctl, unsigned long arg);
|
||||
long kvm_arch_vm_compat_ioctl(struct file *filp, unsigned int ioctl,
|
||||
unsigned long arg);
|
||||
|
||||
int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu);
|
||||
int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu);
|
||||
|
||||
@@ -638,6 +638,12 @@ static inline void mt_set_in_rcu(struct maple_tree *mt)
|
||||
}
|
||||
}
|
||||
|
||||
static inline unsigned int mt_height(const struct maple_tree *mt)
|
||||
|
||||
{
|
||||
return (mt->ma_flags & MT_FLAGS_HEIGHT_MASK) >> MT_FLAGS_HEIGHT_OFFSET;
|
||||
}
|
||||
|
||||
void *mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max);
|
||||
void *mt_find_after(struct maple_tree *mt, unsigned long *index,
|
||||
unsigned long max);
|
||||
@@ -664,6 +670,7 @@ extern atomic_t maple_tree_tests_passed;
|
||||
|
||||
void mt_dump(const struct maple_tree *mt);
|
||||
void mt_validate(struct maple_tree *mt);
|
||||
void mt_cache_shrink(void);
|
||||
#define MT_BUG_ON(__tree, __x) do { \
|
||||
atomic_inc(&maple_tree_tests_run); \
|
||||
if (__x) { \
|
||||
|
||||
@@ -970,7 +970,7 @@ void mlx5_cmd_allowed_opcode(struct mlx5_core_dev *dev, u16 opcode);
|
||||
struct mlx5_async_ctx {
|
||||
struct mlx5_core_dev *dev;
|
||||
atomic_t num_inflight;
|
||||
struct wait_queue_head wait;
|
||||
struct completion inflight_done;
|
||||
};
|
||||
|
||||
struct mlx5_async_work;
|
||||
|
||||
@@ -41,6 +41,7 @@ struct net;
|
||||
#define SOCK_NOSPACE 2
|
||||
#define SOCK_PASSCRED 3
|
||||
#define SOCK_PASSSEC 4
|
||||
#define SOCK_SUPPORT_ZC 5
|
||||
|
||||
#ifndef ARCH_HAS_SOCKET_TYPES
|
||||
/**
|
||||
|
||||
@@ -3663,8 +3663,9 @@ static inline bool netif_attr_test_online(unsigned long j,
|
||||
static inline unsigned int netif_attrmask_next(int n, const unsigned long *srcp,
|
||||
unsigned int nr_bits)
|
||||
{
|
||||
/* n is a prior cpu */
|
||||
cpu_max_bits_warn(n + 1, nr_bits);
|
||||
/* -1 is a legal arg here. */
|
||||
if (n != -1)
|
||||
cpu_max_bits_warn(n, nr_bits);
|
||||
|
||||
if (srcp)
|
||||
return find_next_bit(srcp, nr_bits, n + 1);
|
||||
@@ -3685,8 +3686,9 @@ static inline int netif_attrmask_next_and(int n, const unsigned long *src1p,
|
||||
const unsigned long *src2p,
|
||||
unsigned int nr_bits)
|
||||
{
|
||||
/* n is a prior cpu */
|
||||
cpu_max_bits_warn(n + 1, nr_bits);
|
||||
/* -1 is a legal arg here. */
|
||||
if (n != -1)
|
||||
cpu_max_bits_warn(n, nr_bits);
|
||||
|
||||
if (src1p && src2p)
|
||||
return find_next_and_bit(src1p, src2p, nr_bits, n + 1);
|
||||
|
||||
@@ -51,8 +51,8 @@ static inline bool __must_check __must_check_overflow(bool overflow)
|
||||
return unlikely(overflow);
|
||||
}
|
||||
|
||||
/** check_add_overflow() - Calculate addition with overflow checking
|
||||
*
|
||||
/**
|
||||
* check_add_overflow() - Calculate addition with overflow checking
|
||||
* @a: first addend
|
||||
* @b: second addend
|
||||
* @d: pointer to store sum
|
||||
@@ -66,8 +66,8 @@ static inline bool __must_check __must_check_overflow(bool overflow)
|
||||
#define check_add_overflow(a, b, d) \
|
||||
__must_check_overflow(__builtin_add_overflow(a, b, d))
|
||||
|
||||
/** check_sub_overflow() - Calculate subtraction with overflow checking
|
||||
*
|
||||
/**
|
||||
* check_sub_overflow() - Calculate subtraction with overflow checking
|
||||
* @a: minuend; value to subtract from
|
||||
* @b: subtrahend; value to subtract from @a
|
||||
* @d: pointer to store difference
|
||||
@@ -81,8 +81,8 @@ static inline bool __must_check __must_check_overflow(bool overflow)
|
||||
#define check_sub_overflow(a, b, d) \
|
||||
__must_check_overflow(__builtin_sub_overflow(a, b, d))
|
||||
|
||||
/** check_mul_overflow() - Calculate multiplication with overflow checking
|
||||
*
|
||||
/**
|
||||
* check_mul_overflow() - Calculate multiplication with overflow checking
|
||||
* @a: first factor
|
||||
* @b: second factor
|
||||
* @d: pointer to store product
|
||||
@@ -96,23 +96,24 @@ static inline bool __must_check __must_check_overflow(bool overflow)
|
||||
#define check_mul_overflow(a, b, d) \
|
||||
__must_check_overflow(__builtin_mul_overflow(a, b, d))
|
||||
|
||||
/** check_shl_overflow() - Calculate a left-shifted value and check overflow
|
||||
*
|
||||
/**
|
||||
* check_shl_overflow() - Calculate a left-shifted value and check overflow
|
||||
* @a: Value to be shifted
|
||||
* @s: How many bits left to shift
|
||||
* @d: Pointer to where to store the result
|
||||
*
|
||||
* Computes *@d = (@a << @s)
|
||||
*
|
||||
* Returns true if '*d' cannot hold the result or when 'a << s' doesn't
|
||||
* Returns true if '*@d' cannot hold the result or when '@a << @s' doesn't
|
||||
* make sense. Example conditions:
|
||||
* - 'a << s' causes bits to be lost when stored in *d.
|
||||
* - 's' is garbage (e.g. negative) or so large that the result of
|
||||
* 'a << s' is guaranteed to be 0.
|
||||
* - 'a' is negative.
|
||||
* - 'a << s' sets the sign bit, if any, in '*d'.
|
||||
*
|
||||
* '*d' will hold the results of the attempted shift, but is not
|
||||
* - '@a << @s' causes bits to be lost when stored in *@d.
|
||||
* - '@s' is garbage (e.g. negative) or so large that the result of
|
||||
* '@a << @s' is guaranteed to be 0.
|
||||
* - '@a' is negative.
|
||||
* - '@a << @s' sets the sign bit, if any, in '*@d'.
|
||||
*
|
||||
* '*@d' will hold the results of the attempted shift, but is not
|
||||
* considered "safe for use" if true is returned.
|
||||
*/
|
||||
#define check_shl_overflow(a, s, d) __must_check_overflow(({ \
|
||||
@@ -129,7 +130,6 @@ static inline bool __must_check __must_check_overflow(bool overflow)
|
||||
|
||||
/**
|
||||
* size_mul() - Calculate size_t multiplication with saturation at SIZE_MAX
|
||||
*
|
||||
* @factor1: first factor
|
||||
* @factor2: second factor
|
||||
*
|
||||
@@ -149,7 +149,6 @@ static inline size_t __must_check size_mul(size_t factor1, size_t factor2)
|
||||
|
||||
/**
|
||||
* size_add() - Calculate size_t addition with saturation at SIZE_MAX
|
||||
*
|
||||
* @addend1: first addend
|
||||
* @addend2: second addend
|
||||
*
|
||||
@@ -169,7 +168,6 @@ static inline size_t __must_check size_add(size_t addend1, size_t addend2)
|
||||
|
||||
/**
|
||||
* size_sub() - Calculate size_t subtraction with saturation at SIZE_MAX
|
||||
*
|
||||
* @minuend: value to subtract from
|
||||
* @subtrahend: value to subtract from @minuend
|
||||
*
|
||||
@@ -192,7 +190,6 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
|
||||
|
||||
/**
|
||||
* array_size() - Calculate size of 2-dimensional array.
|
||||
*
|
||||
* @a: dimension one
|
||||
* @b: dimension two
|
||||
*
|
||||
@@ -205,7 +202,6 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
|
||||
|
||||
/**
|
||||
* array3_size() - Calculate size of 3-dimensional array.
|
||||
*
|
||||
* @a: dimension one
|
||||
* @b: dimension two
|
||||
* @c: dimension three
|
||||
@@ -220,7 +216,6 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
|
||||
/**
|
||||
* flex_array_size() - Calculate size of a flexible array member
|
||||
* within an enclosing structure.
|
||||
*
|
||||
* @p: Pointer to the structure.
|
||||
* @member: Name of the flexible array member.
|
||||
* @count: Number of elements in the array.
|
||||
@@ -237,7 +232,6 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend)
|
||||
|
||||
/**
|
||||
* struct_size() - Calculate size of structure with trailing flexible array.
|
||||
*
|
||||
* @p: Pointer to the structure.
|
||||
* @member: Name of the array member.
|
||||
* @count: Number of elements in the array.
|
||||
|
||||
@@ -756,11 +756,14 @@ struct perf_event {
|
||||
struct fasync_struct *fasync;
|
||||
|
||||
/* delayed work for NMIs and such */
|
||||
int pending_wakeup;
|
||||
int pending_kill;
|
||||
int pending_disable;
|
||||
unsigned int pending_wakeup;
|
||||
unsigned int pending_kill;
|
||||
unsigned int pending_disable;
|
||||
unsigned int pending_sigtrap;
|
||||
unsigned long pending_addr; /* SIGTRAP */
|
||||
struct irq_work pending;
|
||||
struct irq_work pending_irq;
|
||||
struct callback_head pending_task;
|
||||
unsigned int pending_work;
|
||||
|
||||
atomic_t event_limit;
|
||||
|
||||
@@ -877,6 +880,14 @@ struct perf_event_context {
|
||||
#endif
|
||||
void *task_ctx_data; /* pmu specific data */
|
||||
struct rcu_head rcu_head;
|
||||
|
||||
/*
|
||||
* Sum (event->pending_sigtrap + event->pending_work)
|
||||
*
|
||||
* The SIGTRAP is targeted at ctx->task, as such it won't do changing
|
||||
* that until the signal is delivered.
|
||||
*/
|
||||
local_t nr_pending;
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -122,6 +122,7 @@ enum phylink_op_type {
|
||||
* (See commit 7cceb599d15d ("net: phylink: avoid mac_config calls")
|
||||
* @poll_fixed_state: if true, starts link_poll,
|
||||
* if MAC link is at %MLO_AN_FIXED mode.
|
||||
* @mac_managed_pm: if true, indicate the MAC driver is responsible for PHY PM.
|
||||
* @ovr_an_inband: if true, override PCS to MLO_AN_INBAND
|
||||
* @get_fixed_state: callback to execute to determine the fixed link state,
|
||||
* if MAC link is at %MLO_AN_FIXED mode.
|
||||
@@ -134,6 +135,7 @@ struct phylink_config {
|
||||
enum phylink_op_type type;
|
||||
bool legacy_pre_march2020;
|
||||
bool poll_fixed_state;
|
||||
bool mac_managed_pm;
|
||||
bool ovr_an_inband;
|
||||
void (*get_fixed_state)(struct phylink_config *config,
|
||||
struct phylink_link_state *state);
|
||||
|
||||
@@ -100,7 +100,7 @@ __ring_buffer_alloc(unsigned long size, unsigned flags, struct lock_class_key *k
|
||||
|
||||
int ring_buffer_wait(struct trace_buffer *buffer, int cpu, int full);
|
||||
__poll_t ring_buffer_poll_wait(struct trace_buffer *buffer, int cpu,
|
||||
struct file *filp, poll_table *poll_table);
|
||||
struct file *filp, poll_table *poll_table, int full);
|
||||
void ring_buffer_wake_waiters(struct trace_buffer *buffer, int cpu);
|
||||
|
||||
#define RING_BUFFER_ALL_CPUS -1
|
||||
|
||||
@@ -376,7 +376,7 @@ static inline void sk_psock_report_error(struct sk_psock *psock, int err)
|
||||
}
|
||||
|
||||
struct sk_psock *sk_psock_init(struct sock *sk, int node);
|
||||
void sk_psock_stop(struct sk_psock *psock, bool wait);
|
||||
void sk_psock_stop(struct sk_psock *psock);
|
||||
|
||||
#if IS_ENABLED(CONFIG_BPF_STREAM_PARSER)
|
||||
int sk_psock_init_strp(struct sock *sk, struct sk_psock *psock);
|
||||
|
||||
@@ -470,35 +470,12 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node) __assume_kmalloc_alignm
|
||||
void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t flags, int node) __assume_slab_alignment
|
||||
__malloc;
|
||||
|
||||
#ifdef CONFIG_TRACING
|
||||
void *kmalloc_trace(struct kmem_cache *s, gfp_t flags, size_t size)
|
||||
__assume_kmalloc_alignment __alloc_size(3);
|
||||
|
||||
void *kmalloc_node_trace(struct kmem_cache *s, gfp_t gfpflags,
|
||||
int node, size_t size) __assume_kmalloc_alignment
|
||||
__alloc_size(4);
|
||||
#else /* CONFIG_TRACING */
|
||||
/* Save a function call when CONFIG_TRACING=n */
|
||||
static __always_inline __alloc_size(3)
|
||||
void *kmalloc_trace(struct kmem_cache *s, gfp_t flags, size_t size)
|
||||
{
|
||||
void *ret = kmem_cache_alloc(s, flags);
|
||||
|
||||
ret = kasan_kmalloc(s, ret, size, flags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static __always_inline __alloc_size(4)
|
||||
void *kmalloc_node_trace(struct kmem_cache *s, gfp_t gfpflags,
|
||||
int node, size_t size)
|
||||
{
|
||||
void *ret = kmem_cache_alloc_node(s, gfpflags, node);
|
||||
|
||||
ret = kasan_kmalloc(s, ret, size, gfpflags);
|
||||
return ret;
|
||||
}
|
||||
#endif /* CONFIG_TRACING */
|
||||
|
||||
void *kmalloc_large(size_t size, gfp_t flags) __assume_page_alignment
|
||||
__alloc_size(1);
|
||||
|
||||
|
||||
@@ -286,8 +286,6 @@ int sdw_intel_startup(struct sdw_intel_ctx *ctx);
|
||||
|
||||
void sdw_intel_exit(struct sdw_intel_ctx *ctx);
|
||||
|
||||
void sdw_intel_enable_irq(void __iomem *mmio_base, bool enable);
|
||||
|
||||
irqreturn_t sdw_intel_thread(int irq, void *dev_id);
|
||||
|
||||
#define SDW_INTEL_QUIRK_MASK_BUS_DISABLE BIT(1)
|
||||
|
||||
@@ -225,7 +225,7 @@ static inline void *spi_mem_get_drvdata(struct spi_mem *mem)
|
||||
/**
|
||||
* struct spi_controller_mem_ops - SPI memory operations
|
||||
* @adjust_op_size: shrink the data xfer of an operation to match controller's
|
||||
* limitations (can be alignment of max RX/TX size
|
||||
* limitations (can be alignment or max RX/TX size
|
||||
* limitations)
|
||||
* @supports_op: check if an operation is supported by the controller
|
||||
* @exec_op: execute a SPI memory operation
|
||||
|
||||
@@ -26,13 +26,13 @@ struct trace_export {
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct trace_array;
|
||||
|
||||
#ifdef CONFIG_TRACING
|
||||
|
||||
int register_ftrace_export(struct trace_export *export);
|
||||
int unregister_ftrace_export(struct trace_export *export);
|
||||
|
||||
struct trace_array;
|
||||
|
||||
void trace_printk_init_buffers(void);
|
||||
__printf(3, 4)
|
||||
int trace_array_printk(struct trace_array *tr, unsigned long ip,
|
||||
|
||||
@@ -146,9 +146,9 @@ static inline bool userfaultfd_armed(struct vm_area_struct *vma)
|
||||
static inline bool vma_can_userfault(struct vm_area_struct *vma,
|
||||
unsigned long vm_flags)
|
||||
{
|
||||
if (vm_flags & VM_UFFD_MINOR)
|
||||
return is_vm_hugetlb_page(vma) || vma_is_shmem(vma);
|
||||
|
||||
if ((vm_flags & VM_UFFD_MINOR) &&
|
||||
(!is_vm_hugetlb_page(vma) && !vma_is_shmem(vma)))
|
||||
return false;
|
||||
#ifndef CONFIG_PTE_MARKER_UFFD_WP
|
||||
/*
|
||||
* If user requested uffd-wp but not enabled pte markers for
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <uapi/linux/utsname.h>
|
||||
|
||||
enum uts_proc {
|
||||
UTS_PROC_ARCH,
|
||||
UTS_PROC_OSTYPE,
|
||||
UTS_PROC_OSRELEASE,
|
||||
UTS_PROC_VERSION,
|
||||
|
||||
@@ -189,6 +189,7 @@ int vfio_register_emulated_iommu_dev(struct vfio_device *device);
|
||||
void vfio_unregister_group_dev(struct vfio_device *device);
|
||||
|
||||
int vfio_assign_device_set(struct vfio_device *device, void *set_id);
|
||||
unsigned int vfio_device_set_open_count(struct vfio_device_set *dev_set);
|
||||
|
||||
int vfio_mig_get_next_state(struct vfio_device *device,
|
||||
enum vfio_device_mig_state cur_fsm,
|
||||
|
||||
@@ -35,6 +35,7 @@ enum ir_kbd_get_key_fn {
|
||||
IR_KBD_GET_KEY_PIXELVIEW,
|
||||
IR_KBD_GET_KEY_HAUP,
|
||||
IR_KBD_GET_KEY_KNC1,
|
||||
IR_KBD_GET_KEY_GENIATECH,
|
||||
IR_KBD_GET_KEY_FUSIONHDTV,
|
||||
IR_KBD_GET_KEY_HAUP_XVR,
|
||||
IR_KBD_GET_KEY_AVERMEDIA_CARDBUS,
|
||||
|
||||
@@ -191,21 +191,6 @@ struct usb_device;
|
||||
#define MEDIA_DEV_NOTIFY_PRE_LINK_CH 0
|
||||
#define MEDIA_DEV_NOTIFY_POST_LINK_CH 1
|
||||
|
||||
/**
|
||||
* media_entity_enum_init - Initialise an entity enumeration
|
||||
*
|
||||
* @ent_enum: Entity enumeration to be initialised
|
||||
* @mdev: The related media device
|
||||
*
|
||||
* Return: zero on success or a negative error code.
|
||||
*/
|
||||
static inline __must_check int media_entity_enum_init(
|
||||
struct media_entity_enum *ent_enum, struct media_device *mdev)
|
||||
{
|
||||
return __media_entity_enum_init(ent_enum,
|
||||
mdev->entity_internal_idx_max + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* media_device_init() - Initializes a media device element
|
||||
*
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <linux/fwnode.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/media.h>
|
||||
#include <linux/minmax.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Enums used internally at the media controller to represent graphs */
|
||||
@@ -99,12 +100,34 @@ struct media_graph {
|
||||
/**
|
||||
* struct media_pipeline - Media pipeline related information
|
||||
*
|
||||
* @streaming_count: Streaming start count - streaming stop count
|
||||
* @graph: Media graph walk during pipeline start / stop
|
||||
* @allocated: Media pipeline allocated and freed by the framework
|
||||
* @mdev: The media device the pipeline is part of
|
||||
* @pads: List of media_pipeline_pad
|
||||
* @start_count: Media pipeline start - stop count
|
||||
*/
|
||||
struct media_pipeline {
|
||||
int streaming_count;
|
||||
struct media_graph graph;
|
||||
bool allocated;
|
||||
struct media_device *mdev;
|
||||
struct list_head pads;
|
||||
int start_count;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct media_pipeline_pad - A pad part of a media pipeline
|
||||
*
|
||||
* @list: Entry in the media_pad pads list
|
||||
* @pipe: The media_pipeline that the pad is part of
|
||||
* @pad: The media pad
|
||||
*
|
||||
* This structure associate a pad with a media pipeline. Instances of
|
||||
* media_pipeline_pad are created by media_pipeline_start() when it builds the
|
||||
* pipeline, and stored in the &media_pad.pads list. media_pipeline_stop()
|
||||
* removes the entries from the list and deletes them.
|
||||
*/
|
||||
struct media_pipeline_pad {
|
||||
struct list_head list;
|
||||
struct media_pipeline *pipe;
|
||||
struct media_pad *pad;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -186,6 +209,8 @@ enum media_pad_signal_type {
|
||||
* @flags: Pad flags, as defined in
|
||||
* :ref:`include/uapi/linux/media.h <media_header>`
|
||||
* (seek for ``MEDIA_PAD_FL_*``)
|
||||
* @pipe: Pipeline this pad belongs to. Use media_entity_pipeline() to
|
||||
* access this field.
|
||||
*/
|
||||
struct media_pad {
|
||||
struct media_gobj graph_obj; /* must be first field in struct */
|
||||
@@ -193,6 +218,12 @@ struct media_pad {
|
||||
u16 index;
|
||||
enum media_pad_signal_type sig_type;
|
||||
unsigned long flags;
|
||||
|
||||
/*
|
||||
* The fields below are private, and should only be accessed via
|
||||
* appropriate functions.
|
||||
*/
|
||||
struct media_pipeline *pipe;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -206,6 +237,14 @@ struct media_pad {
|
||||
* @link_validate: Return whether a link is valid from the entity point of
|
||||
* view. The media_pipeline_start() function
|
||||
* validates all links by calling this operation. Optional.
|
||||
* @has_pad_interdep: Return whether a two pads inside the entity are
|
||||
* interdependent. If two pads are interdependent they are
|
||||
* part of the same pipeline and enabling one of the pads
|
||||
* means that the other pad will become "locked" and
|
||||
* doesn't allow configuration changes. pad0 and pad1 are
|
||||
* guaranteed to not both be sinks or sources.
|
||||
* Optional: If the operation isn't implemented all pads
|
||||
* will be considered as interdependent.
|
||||
*
|
||||
* .. note::
|
||||
*
|
||||
@@ -219,6 +258,8 @@ struct media_entity_operations {
|
||||
const struct media_pad *local,
|
||||
const struct media_pad *remote, u32 flags);
|
||||
int (*link_validate)(struct media_link *link);
|
||||
bool (*has_pad_interdep)(struct media_entity *entity, unsigned int pad0,
|
||||
unsigned int pad1);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -269,7 +310,6 @@ enum media_entity_type {
|
||||
* @links: List of data links.
|
||||
* @ops: Entity operations.
|
||||
* @use_count: Use count for the entity.
|
||||
* @pipe: Pipeline this entity belongs to.
|
||||
* @info: Union with devnode information. Kept just for backward
|
||||
* compatibility.
|
||||
* @info.dev: Contains device major and minor info.
|
||||
@@ -305,8 +345,6 @@ struct media_entity {
|
||||
|
||||
int use_count;
|
||||
|
||||
struct media_pipeline *pipe;
|
||||
|
||||
union {
|
||||
struct {
|
||||
u32 major;
|
||||
@@ -315,6 +353,18 @@ struct media_entity {
|
||||
} info;
|
||||
};
|
||||
|
||||
/**
|
||||
* media_entity_for_each_pad - Iterate on all pads in an entity
|
||||
* @entity: The entity the pads belong to
|
||||
* @iter: The iterator pad
|
||||
*
|
||||
* Iterate on all pads in a media entity.
|
||||
*/
|
||||
#define media_entity_for_each_pad(entity, iter) \
|
||||
for (iter = (entity)->pads; \
|
||||
iter < &(entity)->pads[(entity)->num_pads]; \
|
||||
++iter)
|
||||
|
||||
/**
|
||||
* struct media_interface - A media interface graph object.
|
||||
*
|
||||
@@ -426,15 +476,15 @@ static inline bool is_media_entity_v4l2_subdev(struct media_entity *entity)
|
||||
}
|
||||
|
||||
/**
|
||||
* __media_entity_enum_init - Initialise an entity enumeration
|
||||
* media_entity_enum_init - Initialise an entity enumeration
|
||||
*
|
||||
* @ent_enum: Entity enumeration to be initialised
|
||||
* @idx_max: Maximum number of entities in the enumeration
|
||||
* @mdev: The related media device
|
||||
*
|
||||
* Return: Returns zero on success or a negative error code.
|
||||
* Return: zero on success or a negative error code.
|
||||
*/
|
||||
__must_check int __media_entity_enum_init(struct media_entity_enum *ent_enum,
|
||||
int idx_max);
|
||||
__must_check int media_entity_enum_init(struct media_entity_enum *ent_enum,
|
||||
struct media_device *mdev);
|
||||
|
||||
/**
|
||||
* media_entity_enum_cleanup - Release resources of an entity enumeration
|
||||
@@ -923,6 +973,18 @@ media_entity_remote_source_pad_unique(const struct media_entity *entity)
|
||||
return media_entity_remote_pad_unique(entity, MEDIA_PAD_FL_SOURCE);
|
||||
}
|
||||
|
||||
/**
|
||||
* media_pad_is_streaming - Test if a pad is part of a streaming pipeline
|
||||
* @pad: The pad
|
||||
*
|
||||
* Return: True if the pad is part of a pipeline started with the
|
||||
* media_pipeline_start() function, false otherwise.
|
||||
*/
|
||||
static inline bool media_pad_is_streaming(const struct media_pad *pad)
|
||||
{
|
||||
return pad->pipe;
|
||||
}
|
||||
|
||||
/**
|
||||
* media_entity_is_streaming - Test if an entity is part of a streaming pipeline
|
||||
* @entity: The entity
|
||||
@@ -932,9 +994,49 @@ media_entity_remote_source_pad_unique(const struct media_entity *entity)
|
||||
*/
|
||||
static inline bool media_entity_is_streaming(const struct media_entity *entity)
|
||||
{
|
||||
return entity->pipe;
|
||||
struct media_pad *pad;
|
||||
|
||||
media_entity_for_each_pad(entity, pad) {
|
||||
if (media_pad_is_streaming(pad))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* media_entity_pipeline - Get the media pipeline an entity is part of
|
||||
* @entity: The entity
|
||||
*
|
||||
* DEPRECATED: use media_pad_pipeline() instead.
|
||||
*
|
||||
* This function returns the media pipeline that an entity has been associated
|
||||
* with when constructing the pipeline with media_pipeline_start(). The pointer
|
||||
* remains valid until media_pipeline_stop() is called.
|
||||
*
|
||||
* In general, entities can be part of multiple pipelines, when carrying
|
||||
* multiple streams (either on different pads, or on the same pad using
|
||||
* multiplexed streams). This function is to be used only for entities that
|
||||
* do not support multiple pipelines.
|
||||
*
|
||||
* Return: The media_pipeline the entity is part of, or NULL if the entity is
|
||||
* not part of any pipeline.
|
||||
*/
|
||||
struct media_pipeline *media_entity_pipeline(struct media_entity *entity);
|
||||
|
||||
/**
|
||||
* media_pad_pipeline - Get the media pipeline a pad is part of
|
||||
* @pad: The pad
|
||||
*
|
||||
* This function returns the media pipeline that a pad has been associated
|
||||
* with when constructing the pipeline with media_pipeline_start(). The pointer
|
||||
* remains valid until media_pipeline_stop() is called.
|
||||
*
|
||||
* Return: The media_pipeline the pad is part of, or NULL if the pad is
|
||||
* not part of any pipeline.
|
||||
*/
|
||||
struct media_pipeline *media_pad_pipeline(struct media_pad *pad);
|
||||
|
||||
/**
|
||||
* media_entity_get_fwnode_pad - Get pad number from fwnode
|
||||
*
|
||||
@@ -1013,53 +1115,66 @@ struct media_entity *media_graph_walk_next(struct media_graph *graph);
|
||||
|
||||
/**
|
||||
* media_pipeline_start - Mark a pipeline as streaming
|
||||
* @entity: Starting entity
|
||||
* @pipe: Media pipeline to be assigned to all entities in the pipeline.
|
||||
* @pad: Starting pad
|
||||
* @pipe: Media pipeline to be assigned to all pads in the pipeline.
|
||||
*
|
||||
* Mark all entities connected to a given entity through enabled links, either
|
||||
* Mark all pads connected to a given pad through enabled links, either
|
||||
* directly or indirectly, as streaming. The given pipeline object is assigned
|
||||
* to every entity in the pipeline and stored in the media_entity pipe field.
|
||||
* to every pad in the pipeline and stored in the media_pad pipe field.
|
||||
*
|
||||
* Calls to this function can be nested, in which case the same number of
|
||||
* media_pipeline_stop() calls will be required to stop streaming. The
|
||||
* pipeline pointer must be identical for all nested calls to
|
||||
* media_pipeline_start().
|
||||
*/
|
||||
__must_check int media_pipeline_start(struct media_entity *entity,
|
||||
__must_check int media_pipeline_start(struct media_pad *pad,
|
||||
struct media_pipeline *pipe);
|
||||
/**
|
||||
* __media_pipeline_start - Mark a pipeline as streaming
|
||||
*
|
||||
* @entity: Starting entity
|
||||
* @pipe: Media pipeline to be assigned to all entities in the pipeline.
|
||||
* @pad: Starting pad
|
||||
* @pipe: Media pipeline to be assigned to all pads in the pipeline.
|
||||
*
|
||||
* ..note:: This is the non-locking version of media_pipeline_start()
|
||||
*/
|
||||
__must_check int __media_pipeline_start(struct media_entity *entity,
|
||||
__must_check int __media_pipeline_start(struct media_pad *pad,
|
||||
struct media_pipeline *pipe);
|
||||
|
||||
/**
|
||||
* media_pipeline_stop - Mark a pipeline as not streaming
|
||||
* @entity: Starting entity
|
||||
* @pad: Starting pad
|
||||
*
|
||||
* Mark all entities connected to a given entity through enabled links, either
|
||||
* directly or indirectly, as not streaming. The media_entity pipe field is
|
||||
* Mark all pads connected to a given pads through enabled links, either
|
||||
* directly or indirectly, as not streaming. The media_pad pipe field is
|
||||
* reset to %NULL.
|
||||
*
|
||||
* If multiple calls to media_pipeline_start() have been made, the same
|
||||
* number of calls to this function are required to mark the pipeline as not
|
||||
* streaming.
|
||||
*/
|
||||
void media_pipeline_stop(struct media_entity *entity);
|
||||
void media_pipeline_stop(struct media_pad *pad);
|
||||
|
||||
/**
|
||||
* __media_pipeline_stop - Mark a pipeline as not streaming
|
||||
*
|
||||
* @entity: Starting entity
|
||||
* @pad: Starting pad
|
||||
*
|
||||
* .. note:: This is the non-locking version of media_pipeline_stop()
|
||||
*/
|
||||
void __media_pipeline_stop(struct media_entity *entity);
|
||||
void __media_pipeline_stop(struct media_pad *pad);
|
||||
|
||||
/**
|
||||
* media_pipeline_alloc_start - Mark a pipeline as streaming
|
||||
* @pad: Starting pad
|
||||
*
|
||||
* media_pipeline_alloc_start() is similar to media_pipeline_start() but instead
|
||||
* of working on a given pipeline the function will use an existing pipeline if
|
||||
* the pad is already part of a pipeline, or allocate a new pipeline.
|
||||
*
|
||||
* Calls to media_pipeline_alloc_start() must be matched with
|
||||
* media_pipeline_stop().
|
||||
*/
|
||||
__must_check int media_pipeline_alloc_start(struct media_pad *pad);
|
||||
|
||||
/**
|
||||
* media_devnode_create() - creates and initializes a device node interface
|
||||
|
||||
@@ -175,7 +175,8 @@ struct v4l2_subdev *v4l2_i2c_new_subdev_board(struct v4l2_device *v4l2_dev,
|
||||
*
|
||||
* @sd: pointer to &struct v4l2_subdev
|
||||
* @client: pointer to struct i2c_client
|
||||
* @devname: the name of the device; if NULL, the I²C device's name will be used
|
||||
* @devname: the name of the device; if NULL, the I²C device drivers's name
|
||||
* will be used
|
||||
* @postfix: sub-device specific string to put right after the I²C device name;
|
||||
* may be NULL
|
||||
*/
|
||||
|
||||
@@ -121,21 +121,19 @@ struct v4l2_ctrl_ops {
|
||||
* struct v4l2_ctrl_type_ops - The control type operations that the driver
|
||||
* has to provide.
|
||||
*
|
||||
* @equal: return true if both values are equal.
|
||||
* @init: initialize the value.
|
||||
* @equal: return true if all ctrl->elems array elements are equal.
|
||||
* @init: initialize the value for array elements from from_idx to ctrl->elems.
|
||||
* @log: log the value.
|
||||
* @validate: validate the value. Return 0 on success and a negative value
|
||||
* otherwise.
|
||||
* @validate: validate the value for ctrl->new_elems array elements.
|
||||
* Return 0 on success and a negative value otherwise.
|
||||
*/
|
||||
struct v4l2_ctrl_type_ops {
|
||||
bool (*equal)(const struct v4l2_ctrl *ctrl, u32 elems,
|
||||
union v4l2_ctrl_ptr ptr1,
|
||||
union v4l2_ctrl_ptr ptr2);
|
||||
void (*init)(const struct v4l2_ctrl *ctrl, u32 from_idx, u32 tot_elems,
|
||||
bool (*equal)(const struct v4l2_ctrl *ctrl,
|
||||
union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2);
|
||||
void (*init)(const struct v4l2_ctrl *ctrl, u32 from_idx,
|
||||
union v4l2_ctrl_ptr ptr);
|
||||
void (*log)(const struct v4l2_ctrl *ctrl);
|
||||
int (*validate)(const struct v4l2_ctrl *ctrl, u32 elems,
|
||||
union v4l2_ctrl_ptr ptr);
|
||||
int (*validate)(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr);
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1543,13 +1541,12 @@ int v4l2_ctrl_new_fwnode_properties(struct v4l2_ctrl_handler *hdl,
|
||||
* v4l2_ctrl_type_op_equal - Default v4l2_ctrl_type_ops equal callback.
|
||||
*
|
||||
* @ctrl: The v4l2_ctrl pointer.
|
||||
* @elems: The number of elements to compare.
|
||||
* @ptr1: A v4l2 control value.
|
||||
* @ptr2: A v4l2 control value.
|
||||
*
|
||||
* Return: true if values are equal, otherwise false.
|
||||
*/
|
||||
bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl, u32 elems,
|
||||
bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl,
|
||||
union v4l2_ctrl_ptr ptr1, union v4l2_ctrl_ptr ptr2);
|
||||
|
||||
/**
|
||||
@@ -1557,13 +1554,12 @@ bool v4l2_ctrl_type_op_equal(const struct v4l2_ctrl *ctrl, u32 elems,
|
||||
*
|
||||
* @ctrl: The v4l2_ctrl pointer.
|
||||
* @from_idx: Starting element index.
|
||||
* @elems: The number of elements to initialize.
|
||||
* @ptr: The v4l2 control value.
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void v4l2_ctrl_type_op_init(const struct v4l2_ctrl *ctrl, u32 from_idx,
|
||||
u32 elems, union v4l2_ctrl_ptr ptr);
|
||||
union v4l2_ctrl_ptr ptr);
|
||||
|
||||
/**
|
||||
* v4l2_ctrl_type_op_log - Default v4l2_ctrl_type_ops log callback.
|
||||
@@ -1578,12 +1574,10 @@ void v4l2_ctrl_type_op_log(const struct v4l2_ctrl *ctrl);
|
||||
* v4l2_ctrl_type_op_validate - Default v4l2_ctrl_type_ops validate callback.
|
||||
*
|
||||
* @ctrl: The v4l2_ctrl pointer.
|
||||
* @elems: The number of elements in the control.
|
||||
* @ptr: The v4l2 control value.
|
||||
*
|
||||
* Return: 0 on success, a negative error code on failure.
|
||||
*/
|
||||
int v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl, u32 elems,
|
||||
union v4l2_ctrl_ptr ptr);
|
||||
int v4l2_ctrl_type_op_validate(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr ptr);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -539,4 +539,106 @@ static inline int video_is_registered(struct video_device *vdev)
|
||||
return test_bit(V4L2_FL_REGISTERED, &vdev->flags);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_MEDIA_CONTROLLER)
|
||||
|
||||
/**
|
||||
* video_device_pipeline_start - Mark a pipeline as streaming
|
||||
* @vdev: Starting video device
|
||||
* @pipe: Media pipeline to be assigned to all entities in the pipeline.
|
||||
*
|
||||
* Mark all entities connected to a given video device through enabled links,
|
||||
* either directly or indirectly, as streaming. The given pipeline object is
|
||||
* assigned to every pad in the pipeline and stored in the media_pad pipe
|
||||
* field.
|
||||
*
|
||||
* Calls to this function can be nested, in which case the same number of
|
||||
* video_device_pipeline_stop() calls will be required to stop streaming. The
|
||||
* pipeline pointer must be identical for all nested calls to
|
||||
* video_device_pipeline_start().
|
||||
*
|
||||
* The video device must contain a single pad.
|
||||
*
|
||||
* This is a convenience wrapper around media_pipeline_start().
|
||||
*/
|
||||
__must_check int video_device_pipeline_start(struct video_device *vdev,
|
||||
struct media_pipeline *pipe);
|
||||
|
||||
/**
|
||||
* __video_device_pipeline_start - Mark a pipeline as streaming
|
||||
* @vdev: Starting video device
|
||||
* @pipe: Media pipeline to be assigned to all entities in the pipeline.
|
||||
*
|
||||
* ..note:: This is the non-locking version of video_device_pipeline_start()
|
||||
*
|
||||
* The video device must contain a single pad.
|
||||
*
|
||||
* This is a convenience wrapper around __media_pipeline_start().
|
||||
*/
|
||||
__must_check int __video_device_pipeline_start(struct video_device *vdev,
|
||||
struct media_pipeline *pipe);
|
||||
|
||||
/**
|
||||
* video_device_pipeline_stop - Mark a pipeline as not streaming
|
||||
* @vdev: Starting video device
|
||||
*
|
||||
* Mark all entities connected to a given video device through enabled links,
|
||||
* either directly or indirectly, as not streaming. The media_pad pipe field
|
||||
* is reset to %NULL.
|
||||
*
|
||||
* If multiple calls to media_pipeline_start() have been made, the same
|
||||
* number of calls to this function are required to mark the pipeline as not
|
||||
* streaming.
|
||||
*
|
||||
* The video device must contain a single pad.
|
||||
*
|
||||
* This is a convenience wrapper around media_pipeline_stop().
|
||||
*/
|
||||
void video_device_pipeline_stop(struct video_device *vdev);
|
||||
|
||||
/**
|
||||
* __video_device_pipeline_stop - Mark a pipeline as not streaming
|
||||
* @vdev: Starting video device
|
||||
*
|
||||
* .. note:: This is the non-locking version of media_pipeline_stop()
|
||||
*
|
||||
* The video device must contain a single pad.
|
||||
*
|
||||
* This is a convenience wrapper around __media_pipeline_stop().
|
||||
*/
|
||||
void __video_device_pipeline_stop(struct video_device *vdev);
|
||||
|
||||
/**
|
||||
* video_device_pipeline_alloc_start - Mark a pipeline as streaming
|
||||
* @vdev: Starting video device
|
||||
*
|
||||
* video_device_pipeline_alloc_start() is similar to video_device_pipeline_start()
|
||||
* but instead of working on a given pipeline the function will use an
|
||||
* existing pipeline if the video device is already part of a pipeline, or
|
||||
* allocate a new pipeline.
|
||||
*
|
||||
* Calls to video_device_pipeline_alloc_start() must be matched with
|
||||
* video_device_pipeline_stop().
|
||||
*/
|
||||
__must_check int video_device_pipeline_alloc_start(struct video_device *vdev);
|
||||
|
||||
/**
|
||||
* video_device_pipeline - Get the media pipeline a video device is part of
|
||||
* @vdev: The video device
|
||||
*
|
||||
* This function returns the media pipeline that a video device has been
|
||||
* associated with when constructing the pipeline with
|
||||
* video_device_pipeline_start(). The pointer remains valid until
|
||||
* video_device_pipeline_stop() is called.
|
||||
*
|
||||
* Return: The media_pipeline the video device is part of, or NULL if the video
|
||||
* device is not part of any pipeline.
|
||||
*
|
||||
* The video device must contain a single pad.
|
||||
*
|
||||
* This is a convenience wrapper around media_entity_pipeline().
|
||||
*/
|
||||
struct media_pipeline *video_device_pipeline(struct video_device *vdev);
|
||||
|
||||
#endif /* CONFIG_MEDIA_CONTROLLER */
|
||||
|
||||
#endif /* _V4L2_DEV_H */
|
||||
|
||||
@@ -45,10 +45,6 @@ struct v4l2_async_subdev;
|
||||
*/
|
||||
struct v4l2_fwnode_endpoint {
|
||||
struct fwnode_endpoint base;
|
||||
/*
|
||||
* Fields below this line will be zeroed by
|
||||
* v4l2_fwnode_endpoint_parse()
|
||||
*/
|
||||
enum v4l2_mbus_type bus_type;
|
||||
struct {
|
||||
struct v4l2_mbus_config_parallel parallel;
|
||||
|
||||
@@ -358,7 +358,11 @@ struct v4l2_mbus_frame_desc_entry {
|
||||
} bus;
|
||||
};
|
||||
|
||||
#define V4L2_FRAME_DESC_ENTRY_MAX 4
|
||||
/*
|
||||
* If this number is too small, it should be dropped altogether and the
|
||||
* API switched to a dynamic number of frame descriptor entries.
|
||||
*/
|
||||
#define V4L2_FRAME_DESC_ENTRY_MAX 8
|
||||
|
||||
/**
|
||||
* enum v4l2_mbus_frame_desc_type - media bus frame description type
|
||||
@@ -1046,6 +1050,8 @@ v4l2_subdev_get_pad_format(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *state,
|
||||
unsigned int pad)
|
||||
{
|
||||
if (WARN_ON(!state))
|
||||
return NULL;
|
||||
if (WARN_ON(pad >= sd->entity.num_pads))
|
||||
pad = 0;
|
||||
return &state->pads[pad].try_fmt;
|
||||
@@ -1064,6 +1070,8 @@ v4l2_subdev_get_pad_crop(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *state,
|
||||
unsigned int pad)
|
||||
{
|
||||
if (WARN_ON(!state))
|
||||
return NULL;
|
||||
if (WARN_ON(pad >= sd->entity.num_pads))
|
||||
pad = 0;
|
||||
return &state->pads[pad].try_crop;
|
||||
@@ -1082,6 +1090,8 @@ v4l2_subdev_get_pad_compose(struct v4l2_subdev *sd,
|
||||
struct v4l2_subdev_state *state,
|
||||
unsigned int pad)
|
||||
{
|
||||
if (WARN_ON(!state))
|
||||
return NULL;
|
||||
if (WARN_ON(pad >= sd->entity.num_pads))
|
||||
pad = 0;
|
||||
return &state->pads[pad].try_compose;
|
||||
|
||||
@@ -37,16 +37,25 @@ struct genl_info;
|
||||
* do additional, common, filtering and return an error
|
||||
* @post_doit: called after an operation's doit callback, it may
|
||||
* undo operations done by pre_doit, for example release locks
|
||||
* @module: pointer to the owning module (set to THIS_MODULE)
|
||||
* @mcgrps: multicast groups used by this family
|
||||
* @n_mcgrps: number of multicast groups
|
||||
* @resv_start_op: first operation for which reserved fields of the header
|
||||
* can be validated, new families should leave this field at zero
|
||||
* can be validated and policies are required (see below);
|
||||
* new families should leave this field at zero
|
||||
* @mcgrp_offset: starting number of multicast group IDs in this family
|
||||
* (private)
|
||||
* @ops: the operations supported by this family
|
||||
* @n_ops: number of operations supported by this family
|
||||
* @small_ops: the small-struct operations supported by this family
|
||||
* @n_small_ops: number of small-struct operations supported by this family
|
||||
*
|
||||
* Attribute policies (the combination of @policy and @maxattr fields)
|
||||
* can be attached at the family level or at the operation level.
|
||||
* If both are present the per-operation policy takes precedence.
|
||||
* For operations before @resv_start_op lack of policy means that the core
|
||||
* will perform no attribute parsing or validation. For newer operations
|
||||
* if policy is not provided core will reject all TLV attributes.
|
||||
*/
|
||||
struct genl_family {
|
||||
int id; /* private */
|
||||
@@ -173,9 +182,9 @@ struct genl_ops {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct genl_info - info that is available during dumpit op call
|
||||
* struct genl_dumpit_info - info that is available during dumpit op call
|
||||
* @family: generic netlink family - for internal genl code usage
|
||||
* @ops: generic netlink ops - for internal genl code usage
|
||||
* @op: generic netlink ops - for internal genl code usage
|
||||
* @attrs: netlink attributes
|
||||
*/
|
||||
struct genl_dumpit_info {
|
||||
@@ -354,6 +363,7 @@ int genlmsg_multicast_allns(const struct genl_family *family,
|
||||
|
||||
/**
|
||||
* genlmsg_unicast - unicast a netlink message
|
||||
* @net: network namespace to look up @portid in
|
||||
* @skb: netlink message as socket buffer
|
||||
* @portid: netlink portid of the destination socket
|
||||
*/
|
||||
@@ -373,7 +383,7 @@ static inline int genlmsg_reply(struct sk_buff *skb, struct genl_info *info)
|
||||
}
|
||||
|
||||
/**
|
||||
* gennlmsg_data - head of message payload
|
||||
* genlmsg_data - head of message payload
|
||||
* @gnlh: genetlink message header
|
||||
*/
|
||||
static inline void *genlmsg_data(const struct genlmsghdr *gnlh)
|
||||
|
||||
@@ -563,7 +563,7 @@ static inline void iph_to_flow_copy_v4addrs(struct flow_keys *flow,
|
||||
BUILD_BUG_ON(offsetof(typeof(flow->addrs), v4addrs.dst) !=
|
||||
offsetof(typeof(flow->addrs), v4addrs.src) +
|
||||
sizeof(flow->addrs.v4addrs.src));
|
||||
memcpy(&flow->addrs.v4addrs, &iph->saddr, sizeof(flow->addrs.v4addrs));
|
||||
memcpy(&flow->addrs.v4addrs, &iph->addrs, sizeof(flow->addrs.v4addrs));
|
||||
flow->control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS;
|
||||
}
|
||||
|
||||
|
||||
@@ -897,7 +897,7 @@ static inline void iph_to_flow_copy_v6addrs(struct flow_keys *flow,
|
||||
BUILD_BUG_ON(offsetof(typeof(flow->addrs), v6addrs.dst) !=
|
||||
offsetof(typeof(flow->addrs), v6addrs.src) +
|
||||
sizeof(flow->addrs.v6addrs.src));
|
||||
memcpy(&flow->addrs.v6addrs, &iph->saddr, sizeof(flow->addrs.v6addrs));
|
||||
memcpy(&flow->addrs.v6addrs, &iph->addrs, sizeof(flow->addrs.v6addrs));
|
||||
flow->control.addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
|
||||
}
|
||||
|
||||
|
||||
@@ -181,6 +181,8 @@ enum {
|
||||
NLA_S64,
|
||||
NLA_BITFIELD32,
|
||||
NLA_REJECT,
|
||||
NLA_BE16,
|
||||
NLA_BE32,
|
||||
__NLA_TYPE_MAX,
|
||||
};
|
||||
|
||||
@@ -231,6 +233,7 @@ enum nla_policy_validation {
|
||||
* NLA_U32, NLA_U64,
|
||||
* NLA_S8, NLA_S16,
|
||||
* NLA_S32, NLA_S64,
|
||||
* NLA_BE16, NLA_BE32,
|
||||
* NLA_MSECS Leaving the length field zero will verify the
|
||||
* given type fits, using it verifies minimum length
|
||||
* just like "All other"
|
||||
@@ -261,6 +264,8 @@ enum nla_policy_validation {
|
||||
* NLA_U16,
|
||||
* NLA_U32,
|
||||
* NLA_U64,
|
||||
* NLA_BE16,
|
||||
* NLA_BE32,
|
||||
* NLA_S8,
|
||||
* NLA_S16,
|
||||
* NLA_S32,
|
||||
@@ -317,19 +322,10 @@ struct nla_policy {
|
||||
u8 validation_type;
|
||||
u16 len;
|
||||
union {
|
||||
const u32 bitfield32_valid;
|
||||
const u32 mask;
|
||||
const char *reject_message;
|
||||
const struct nla_policy *nested_policy;
|
||||
struct netlink_range_validation *range;
|
||||
struct netlink_range_validation_signed *range_signed;
|
||||
struct {
|
||||
s16 min, max;
|
||||
u8 network_byte_order:1;
|
||||
};
|
||||
int (*validate)(const struct nlattr *attr,
|
||||
struct netlink_ext_ack *extack);
|
||||
/* This entry is special, and used for the attribute at index 0
|
||||
/**
|
||||
* @strict_start_type: first attribute to validate strictly
|
||||
*
|
||||
* This entry is special, and used for the attribute at index 0
|
||||
* only, and specifies special data about the policy, namely it
|
||||
* specifies the "boundary type" where strict length validation
|
||||
* starts for any attribute types >= this value, also, strict
|
||||
@@ -348,6 +344,19 @@ struct nla_policy {
|
||||
* was added to enforce strict validation from thereon.
|
||||
*/
|
||||
u16 strict_start_type;
|
||||
|
||||
/* private: use NLA_POLICY_*() to set */
|
||||
const u32 bitfield32_valid;
|
||||
const u32 mask;
|
||||
const char *reject_message;
|
||||
const struct nla_policy *nested_policy;
|
||||
struct netlink_range_validation *range;
|
||||
struct netlink_range_validation_signed *range_signed;
|
||||
struct {
|
||||
s16 min, max;
|
||||
};
|
||||
int (*validate)(const struct nlattr *attr,
|
||||
struct netlink_ext_ack *extack);
|
||||
};
|
||||
};
|
||||
|
||||
@@ -369,6 +378,8 @@ struct nla_policy {
|
||||
(tp == NLA_U8 || tp == NLA_U16 || tp == NLA_U32 || tp == NLA_U64)
|
||||
#define __NLA_IS_SINT_TYPE(tp) \
|
||||
(tp == NLA_S8 || tp == NLA_S16 || tp == NLA_S32 || tp == NLA_S64)
|
||||
#define __NLA_IS_BEINT_TYPE(tp) \
|
||||
(tp == NLA_BE16 || tp == NLA_BE32)
|
||||
|
||||
#define __NLA_ENSURE(condition) BUILD_BUG_ON_ZERO(!(condition))
|
||||
#define NLA_ENSURE_UINT_TYPE(tp) \
|
||||
@@ -382,6 +393,7 @@ struct nla_policy {
|
||||
#define NLA_ENSURE_INT_OR_BINARY_TYPE(tp) \
|
||||
(__NLA_ENSURE(__NLA_IS_UINT_TYPE(tp) || \
|
||||
__NLA_IS_SINT_TYPE(tp) || \
|
||||
__NLA_IS_BEINT_TYPE(tp) || \
|
||||
tp == NLA_MSECS || \
|
||||
tp == NLA_BINARY) + tp)
|
||||
#define NLA_ENSURE_NO_VALIDATION_PTR(tp) \
|
||||
@@ -389,6 +401,8 @@ struct nla_policy {
|
||||
tp != NLA_REJECT && \
|
||||
tp != NLA_NESTED && \
|
||||
tp != NLA_NESTED_ARRAY) + tp)
|
||||
#define NLA_ENSURE_BEINT_TYPE(tp) \
|
||||
(__NLA_ENSURE(__NLA_IS_BEINT_TYPE(tp)) + tp)
|
||||
|
||||
#define NLA_POLICY_RANGE(tp, _min, _max) { \
|
||||
.type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp), \
|
||||
@@ -419,14 +433,6 @@ struct nla_policy {
|
||||
.type = NLA_ENSURE_INT_OR_BINARY_TYPE(tp), \
|
||||
.validation_type = NLA_VALIDATE_MAX, \
|
||||
.max = _max, \
|
||||
.network_byte_order = 0, \
|
||||
}
|
||||
|
||||
#define NLA_POLICY_MAX_BE(tp, _max) { \
|
||||
.type = NLA_ENSURE_UINT_TYPE(tp), \
|
||||
.validation_type = NLA_VALIDATE_MAX, \
|
||||
.max = _max, \
|
||||
.network_byte_order = 1, \
|
||||
}
|
||||
|
||||
#define NLA_POLICY_MASK(tp, _mask) { \
|
||||
|
||||
@@ -323,7 +323,7 @@ struct sk_filter;
|
||||
* @sk_tskey: counter to disambiguate concurrent tstamp requests
|
||||
* @sk_zckey: counter to order MSG_ZEROCOPY notifications
|
||||
* @sk_socket: Identd and reporting IO signals
|
||||
* @sk_user_data: RPC layer private data
|
||||
* @sk_user_data: RPC layer private data. Write-protected by @sk_callback_lock.
|
||||
* @sk_frag: cached page frag
|
||||
* @sk_peek_off: current peek_offset value
|
||||
* @sk_send_head: front of stuff to transmit
|
||||
@@ -1889,6 +1889,13 @@ void sock_kfree_s(struct sock *sk, void *mem, int size);
|
||||
void sock_kzfree_s(struct sock *sk, void *mem, int size);
|
||||
void sk_send_sigurg(struct sock *sk);
|
||||
|
||||
static inline void sock_replace_proto(struct sock *sk, struct proto *proto)
|
||||
{
|
||||
if (sk->sk_socket)
|
||||
clear_bit(SOCK_SUPPORT_ZC, &sk->sk_socket->flags);
|
||||
WRITE_ONCE(sk->sk_prot, proto);
|
||||
}
|
||||
|
||||
struct sockcm_cookie {
|
||||
u64 transmit_time;
|
||||
u32 mark;
|
||||
@@ -2585,7 +2592,7 @@ static inline gfp_t gfp_any(void)
|
||||
|
||||
static inline gfp_t gfp_memcg_charge(void)
|
||||
{
|
||||
return in_softirq() ? GFP_NOWAIT : GFP_KERNEL;
|
||||
return in_softirq() ? GFP_ATOMIC : GFP_KERNEL;
|
||||
}
|
||||
|
||||
static inline long sock_rcvtimeo(const struct sock *sk, bool noblock)
|
||||
|
||||
@@ -43,21 +43,20 @@ struct sock *reuseport_migrate_sock(struct sock *sk,
|
||||
extern int reuseport_attach_prog(struct sock *sk, struct bpf_prog *prog);
|
||||
extern int reuseport_detach_prog(struct sock *sk);
|
||||
|
||||
static inline bool reuseport_has_conns(struct sock *sk, bool set)
|
||||
static inline bool reuseport_has_conns(struct sock *sk)
|
||||
{
|
||||
struct sock_reuseport *reuse;
|
||||
bool ret = false;
|
||||
|
||||
rcu_read_lock();
|
||||
reuse = rcu_dereference(sk->sk_reuseport_cb);
|
||||
if (reuse) {
|
||||
if (set)
|
||||
reuse->has_conns = 1;
|
||||
ret = reuse->has_conns;
|
||||
}
|
||||
if (reuse && reuse->has_conns)
|
||||
ret = true;
|
||||
rcu_read_unlock();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void reuseport_has_conns_set(struct sock *sk);
|
||||
|
||||
#endif /* _SOCK_REUSEPORT_H */
|
||||
|
||||
@@ -26,7 +26,10 @@
|
||||
#define DDR3PHY_PGSR (0x0C) /* DDR3PHY PHY General Status Register */
|
||||
#define DDR3PHY_PGSR_IDONE (1 << 0) /* Initialization Done */
|
||||
|
||||
#define DDR3PHY_ACIOCR (0x24) /* DDR3PHY AC I/O Configuration Register */
|
||||
#define DDR3PHY_ACDLLCR (0x14) /* DDR3PHY AC DLL Control Register */
|
||||
#define DDR3PHY_ACDLLCR_DLLSRST (1 << 30) /* DLL Soft Reset */
|
||||
|
||||
#define DDR3PHY_ACIOCR (0x24) /* DDR3PHY AC I/O Configuration Register */
|
||||
#define DDR3PHY_ACIOCR_CSPDD_CS0 (1 << 18) /* CS#[0] Power Down Driver */
|
||||
#define DDR3PHY_ACIOCR_CKPDD_CK0 (1 << 8) /* CK[0] Power Down Driver */
|
||||
#define DDR3PHY_ACIORC_ACPDD (1 << 3) /* AC Power Down Driver */
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* AMD ACP 6.2 Register Documentation
|
||||
* AMD ACP 6.3 Register Documentation
|
||||
*
|
||||
* Copyright 2022 Advanced Micro Devices, Inc.
|
||||
*/
|
||||
@@ -131,6 +131,23 @@
|
||||
#define ACP_I2S_WAKE_EN 0x000145C
|
||||
#define ACP_SW1_WAKE_EN 0x0001460
|
||||
|
||||
#define ACP_SW_I2S_ERROR_REASON 0x00018B4
|
||||
#define ACP_SW_POS_TRACK_I2S_TX_CTRL 0x00018B8
|
||||
#define ACP_SW_I2S_TX_DMA_POS 0x00018BC
|
||||
#define ACP_SW_POS_TRACK_BT_TX_CTRL 0x00018C0
|
||||
#define ACP_SW_BT_TX_DMA_POS 0x00018C4
|
||||
#define ACP_SW_POS_TRACK_HS_TX_CTRL 0x00018C8
|
||||
#define ACP_SW_HS_TX_DMA_POS 0x00018CC
|
||||
#define ACP_SW_POS_TRACK_I2S_RX_CTRL 0x00018D0
|
||||
#define ACP_SW_I2S_RX_DMA_POS 0x00018D4
|
||||
#define ACP_SW_POS_TRACK_BT_RX_CTRL 0x00018D8
|
||||
#define ACP_SW_BT_RX_DMA_POS 0x00018DC
|
||||
#define ACP_SW_POS_TRACK_HS_RX_CTRL 0x00018E0
|
||||
#define ACP_SW_HS_RX_DMA_POS 0x00018E4
|
||||
#define ACP_ERROR_INTR_MASK1 0X0001974
|
||||
#define ACP_ERROR_INTR_MASK2 0X0001978
|
||||
#define ACP_ERROR_INTR_MASK3 0X000197C
|
||||
|
||||
/* Registers from ACP_P1_MISC block */
|
||||
#define ACP_EXTERNAL_INTR_ENB 0x0001A00
|
||||
#define ACP_EXTERNAL_INTR_CNTL 0x0001A04
|
||||
@@ -154,6 +171,8 @@
|
||||
#define ACP_P1_SW_BT_RX_DMA_POS 0x0001A9C
|
||||
#define ACP_P1_SW_POS_TRACK_HS_RX_CTRL 0x0001AA0
|
||||
#define ACP_P1_SW_HS_RX_DMA_POS 0x0001AA4
|
||||
#define ACP_ERROR_INTR_MASK4 0X0001AEC
|
||||
#define ACP_ERROR_INTR_MASK5 0X0001AF0
|
||||
|
||||
/* Registers from ACP_AUDIO_BUFFERS block */
|
||||
#define ACP_I2S_RX_RINGBUFADDR 0x0002000
|
||||
@@ -210,6 +229,24 @@
|
||||
#define ACP_HS_TX_LINEARPOSITIONCNTR_HIGH 0x00020CC
|
||||
#define ACP_HS_TX_LINEARPOSITIONCNTR_LOW 0x00020D0
|
||||
#define ACP_HS_TX_INTR_WATERMARK_SIZE 0x00020D4
|
||||
#define ACP_AUDIO_RX_RINGBUFADDR ACP_I2S_RX_RINGBUFADDR
|
||||
#define ACP_AUDIO_RX_RINGBUFSIZE ACP_I2S_RX_RINGBUFSIZE
|
||||
#define ACP_AUDIO_RX_LINKPOSITIONCNTR ACP_I2S_RX_LINKPOSITIONCNTR
|
||||
#define ACP_AUDIO_RX_FIFOADDR ACP_I2S_RX_FIFOADDR
|
||||
#define ACP_AUDIO_RX_FIFOSIZE ACP_I2S_RX_FIFOSIZE
|
||||
#define ACP_AUDIO_RX_DMA_SIZE ACP_I2S_RX_DMA_SIZE
|
||||
#define ACP_AUDIO_RX_LINEARPOSITIONCNTR_HIGH ACP_I2S_RX_LINEARPOSITIONCNTR_HIGH
|
||||
#define ACP_AUDIO_RX_LINEARPOSITIONCNTR_LOW ACP_I2S_RX_LINEARPOSITIONCNTR_LOW
|
||||
#define ACP_AUDIO_RX_INTR_WATERMARK_SIZE ACP_I2S_RX_INTR_WATERMARK_SIZE
|
||||
#define ACP_AUDIO_TX_RINGBUFADDR ACP_I2S_TX_RINGBUFADDR
|
||||
#define ACP_AUDIO_TX_RINGBUFSIZE ACP_I2S_TX_RINGBUFSIZE
|
||||
#define ACP_AUDIO_TX_LINKPOSITIONCNTR ACP_I2S_TX_LINKPOSITIONCNTR
|
||||
#define ACP_AUDIO_TX_FIFOADDR ACP_I2S_TX_FIFOADDR
|
||||
#define ACP_AUDIO_TX_FIFOSIZE ACP_I2S_TX_FIFOSIZE
|
||||
#define ACP_AUDIO_TX_DMA_SIZE ACP_I2S_TX_DMA_SIZE
|
||||
#define ACP_AUDIO_TX_LINEARPOSITIONCNTR_HIGH ACP_I2S_TX_LINEARPOSITIONCNTR_HIGH
|
||||
#define ACP_AUDIO_TX_LINEARPOSITIONCNTR_LOW ACP_I2S_TX_LINEARPOSITIONCNTR_LOW
|
||||
#define ACP_AUDIO_TX_INTR_WATERMARK_SIZE ACP_I2S_TX_INTR_WATERMARK_SIZE
|
||||
|
||||
/* Registers from ACP_I2S_TDM block */
|
||||
#define ACP_I2STDM_IER 0x0002400
|
||||
@@ -255,6 +292,102 @@
|
||||
#define ACP_WOV_ERROR_STATUS_REGISTER 0x0002C68
|
||||
#define ACP_PDM_CLKDIV 0x0002C6C
|
||||
|
||||
/* Registers from ACP_SW_SWCLK block */
|
||||
#define ACP_SW_EN 0x0003000
|
||||
#define ACP_SW_EN_STATUS 0x0003004
|
||||
#define ACP_SW_FRAMESIZE 0x0003008
|
||||
#define ACP_SW_SSP_COUNTER 0x000300C
|
||||
#define ACP_SW_AUDIO_TX_EN 0x0003010
|
||||
#define ACP_SW_AUDIO_TX_EN_STATUS 0x0003014
|
||||
#define ACP_SW_AUDIO_TX_FRAME_FORMAT 0x0003018
|
||||
#define ACP_SW_AUDIO_TX_SAMPLEINTERVAL 0x000301C
|
||||
#define ACP_SW_AUDIO_TX_HCTRL_DP0 0x0003020
|
||||
#define ACP_SW_AUDIO_TX_HCTRL_DP1 0x0003024
|
||||
#define ACP_SW_AUDIO_TX_HCTRL_DP2 0x0003028
|
||||
#define ACP_SW_AUDIO_TX_HCTRL_DP3 0x000302C
|
||||
#define ACP_SW_AUDIO_TX_OFFSET_DP0 0x0003030
|
||||
#define ACP_SW_AUDIO_TX_OFFSET_DP1 0x0003034
|
||||
#define ACP_SW_AUDIO_TX_OFFSET_DP2 0x0003038
|
||||
#define ACP_SW_AUDIO_TX_OFFSET_DP3 0x000303C
|
||||
#define ACP_SW_AUDIO_TX_CHANNEL_ENABLE_DP0 0x0003040
|
||||
#define ACP_SW_AUDIO_TX_CHANNEL_ENABLE_DP1 0x0003044
|
||||
#define ACP_SW_AUDIO_TX_CHANNEL_ENABLE_DP2 0x0003048
|
||||
#define ACP_SW_AUDIO_TX_CHANNEL_ENABLE_DP3 0x000304C
|
||||
#define ACP_SW_BT_TX_EN 0x0003050
|
||||
#define ACP_SW_BT_TX_EN_STATUS 0x0003054
|
||||
#define ACP_SW_BT_TX_FRAME_FORMAT 0x0003058
|
||||
#define ACP_SW_BT_TX_SAMPLEINTERVAL 0x000305C
|
||||
#define ACP_SW_BT_TX_HCTRL 0x0003060
|
||||
#define ACP_SW_BT_TX_OFFSET 0x0003064
|
||||
#define ACP_SW_BT_TX_CHANNEL_ENABLE_DP0 0x0003068
|
||||
#define ACP_SW_HEADSET_TX_EN 0x000306C
|
||||
#define ACP_SW_HEADSET_TX_EN_STATUS 0x0003070
|
||||
#define ACP_SW_HEADSET_TX_FRAME_FORMAT 0x0003074
|
||||
#define ACP_SW_HEADSET_TX_SAMPLEINTERVAL 0x0003078
|
||||
#define ACP_SW_HEADSET_TX_HCTRL 0x000307C
|
||||
#define ACP_SW_HEADSET_TX_OFFSET 0x0003080
|
||||
#define ACP_SW_HEADSET_TX_CHANNEL_ENABLE_DP0 0x0003084
|
||||
#define ACP_SW_AUDIO_RX_EN 0x0003088
|
||||
#define ACP_SW_AUDIO_RX_EN_STATUS 0x000308C
|
||||
#define ACP_SW_AUDIO_RX_FRAME_FORMAT 0x0003090
|
||||
#define ACP_SW_AUDIO_RX_SAMPLEINTERVAL 0x0003094
|
||||
#define ACP_SW_AUDIO_RX_HCTRL_DP0 0x0003098
|
||||
#define ACP_SW_AUDIO_RX_HCTRL_DP1 0x000309C
|
||||
#define ACP_SW_AUDIO_RX_HCTRL_DP2 0x0003100
|
||||
#define ACP_SW_AUDIO_RX_HCTRL_DP3 0x0003104
|
||||
#define ACP_SW_AUDIO_RX_OFFSET_DP0 0x0003108
|
||||
#define ACP_SW_AUDIO_RX_OFFSET_DP1 0x000310C
|
||||
#define ACP_SW_AUDIO_RX_OFFSET_DP2 0x0003110
|
||||
#define ACP_SW_AUDIO_RX_OFFSET_DP3 0x0003114
|
||||
#define ACP_SW_AUDIO_RX_CHANNEL_ENABLE_DP0 0x0003118
|
||||
#define ACP_SW_AUDIO_RX_CHANNEL_ENABLE_DP1 0x000311C
|
||||
#define ACP_SW_AUDIO_RX_CHANNEL_ENABLE_DP2 0x0003120
|
||||
#define ACP_SW_AUDIO_RX_CHANNEL_ENABLE_DP3 0x0003124
|
||||
#define ACP_SW_BT_RX_EN 0x0003128
|
||||
#define ACP_SW_BT_RX_EN_STATUS 0x000312C
|
||||
#define ACP_SW_BT_RX_FRAME_FORMAT 0x0003130
|
||||
#define ACP_SW_BT_RX_SAMPLEINTERVAL 0x0003134
|
||||
#define ACP_SW_BT_RX_HCTRL 0x0003138
|
||||
#define ACP_SW_BT_RX_OFFSET 0x000313C
|
||||
#define ACP_SW_BT_RX_CHANNEL_ENABLE_DP0 0x0003140
|
||||
#define ACP_SW_HEADSET_RX_EN 0x0003144
|
||||
#define ACP_SW_HEADSET_RX_EN_STATUS 0x0003148
|
||||
#define ACP_SW_HEADSET_RX_FRAME_FORMAT 0x000314C
|
||||
#define ACP_SW_HEADSET_RX_SAMPLEINTERVAL 0x0003150
|
||||
#define ACP_SW_HEADSET_RX_HCTRL 0x0003154
|
||||
#define ACP_SW_HEADSET_RX_OFFSET 0x0003158
|
||||
#define ACP_SW_HEADSET_RX_CHANNEL_ENABLE_DP0 0x000315C
|
||||
#define ACP_SW_BPT_PORT_EN 0x0003160
|
||||
#define ACP_SW_BPT_PORT_EN_STATUS 0x0003164
|
||||
#define ACP_SW_BPT_PORT_FRAME_FORMAT 0x0003168
|
||||
#define ACP_SW_BPT_PORT_SAMPLEINTERVAL 0x000316C
|
||||
#define ACP_SW_BPT_PORT_HCTRL 0x0003170
|
||||
#define ACP_SW_BPT_PORT_OFFSET 0x0003174
|
||||
#define ACP_SW_BPT_PORT_CHANNEL_ENABLE 0x0003178
|
||||
#define ACP_SW_BPT_PORT_FIRST_BYTE_ADDR 0x000317C
|
||||
#define ACP_SW_CLK_RESUME_CTRL 0x0003180
|
||||
#define ACP_SW_CLK_RESUME_DELAY_CNTR 0x0003184
|
||||
#define ACP_SW_BUS_RESET_CTRL 0x0003188
|
||||
#define ACP_SW_PRBS_ERR_STATUS 0x000318C
|
||||
#define SW_IMM_CMD_UPPER_WORD 0x0003230
|
||||
#define SW_IMM_CMD_LOWER_QWORD 0x0003234
|
||||
#define SW_IMM_RESP_UPPER_WORD 0x0003238
|
||||
#define SW_IMM_RESP_LOWER_QWORD 0x000323C
|
||||
#define SW_IMM_CMD_STS 0x0003240
|
||||
#define SW_BRA_BASE_ADDRESS 0x0003244
|
||||
#define SW_BRA_TRANSFER_SIZE 0x0003248
|
||||
#define SW_BRA_DMA_BUSY 0x000324C
|
||||
#define SW_BRA_RESP 0x0003250
|
||||
#define SW_BRA_RESP_FRAME_ADDR 0x0003254
|
||||
#define SW_BRA_CURRENT_TRANSFER_SIZE 0x0003258
|
||||
#define SW_STATE_CHANGE_STATUS_0TO7 0x000325C
|
||||
#define SW_STATE_CHANGE_STATUS_8TO11 0x0003260
|
||||
#define SW_STATE_CHANGE_STATUS_MASK_0TO7 0x0003264
|
||||
#define SW_STATE_CHANGE_STATUS_MASK_8TO11 0x0003268
|
||||
#define SW_CLK_FREQUENCY_CTRL 0x000326C
|
||||
#define SW_ERROR_INTR_MASK 0x0003270
|
||||
#define SW_PHY_TEST_MODE_DATA_OFF 0x0003274
|
||||
|
||||
/* Registers from ACP_P1_AUDIO_BUFFERS block */
|
||||
#define ACP_P1_I2S_RX_RINGBUFADDR 0x0003A00
|
||||
#define ACP_P1_I2S_RX_RINGBUFSIZE 0x0003A04
|
||||
@@ -310,6 +443,87 @@
|
||||
#define ACP_P1_HS_TX_LINEARPOSITIONCNTR_HIGH 0x0003ACC
|
||||
#define ACP_P1_HS_TX_LINEARPOSITIONCNTR_LOW 0x0003AD0
|
||||
#define ACP_P1_HS_TX_INTR_WATERMARK_SIZE 0x0003AD4
|
||||
#define ACP_P1_AUDIO_RX_RINGBUFADDR ACP_P1_I2S_RX_RINGBUFADDR
|
||||
#define ACP_P1_AUDIO_RX_RINGBUFSIZE ACP_P1_I2S_RX_RINGBUFSIZE
|
||||
#define ACP_P1_AUDIO_RX_LINKPOSITIONCNTR ACP_P1_I2S_RX_LINKPOSITIONCNTR
|
||||
#define ACP_P1_AUDIO_RX_FIFOADDR ACP_P1_I2S_RX_FIFOADDR
|
||||
#define ACP_P1_AUDIO_RX_FIFOSIZE ACP_P1_I2S_RX_FIFOSIZE
|
||||
#define ACP_P1_AUDIO_RX_DMA_SIZE ACP_P1_I2S_RX_DMA_SIZE
|
||||
#define ACP_P1_AUDIO_RX_LINEARPOSITIONCNTR_HIGH ACP_P1_I2S_RX_LINEARPOSITIONCNTR_HIGH
|
||||
#define ACP_P1_AUDIO_RX_LINEARPOSITIONCNTR_LOW ACP_P1_I2S_RX_LINEARPOSITIONCNTR_LOW
|
||||
#define ACP_P1_AUDIO_RX_INTR_WATERMARK_SIZE ACP_P1_I2S_RX_INTR_WATERMARK_SIZE
|
||||
#define ACP_P1_AUDIO_TX_RINGBUFADDR ACP_P1_I2S_TX_RINGBUFADDR
|
||||
#define ACP_P1_AUDIO_TX_RINGBUFSIZE ACP_P1_I2S_TX_RINGBUFSIZE
|
||||
#define ACP_P1_AUDIO_TX_LINKPOSITIONCNTR ACP_P1_I2S_TX_LINKPOSITIONCNTR
|
||||
#define ACP_P1_AUDIO_TX_FIFOADDR ACP_P1_I2S_TX_FIFOADDR
|
||||
#define ACP_P1_AUDIO_TX_FIFOSIZE ACP_P1_I2S_TX_FIFOSIZE
|
||||
#define ACP_P1_AUDIO_TX_DMA_SIZE ACP_P1_I2S_TX_DMA_SIZE
|
||||
#define ACP_P1_AUDIO_TX_LINEARPOSITIONCNTR_HIGH ACP_P1_I2S_TX_LINEARPOSITIONCNTR_HIGH
|
||||
#define ACP_P1_AUDIO_TX_LINEARPOSITIONCNTR_LOW ACP_P1_I2S_TX_LINEARPOSITIONCNTR_LOW
|
||||
#define ACP_P1_AUDIO_TX_INTR_WATERMARK_SIZE ACP_P1_I2S_TX_INTR_WATERMARK_SIZE
|
||||
|
||||
/* Registers from ACP_P1_SW_SWCLK block */
|
||||
#define ACP_P1_SW_EN 0x0003C00
|
||||
#define ACP_P1_SW_EN_STATUS 0x0003C04
|
||||
#define ACP_P1_SW_FRAMESIZE 0x0003C08
|
||||
#define ACP_P1_SW_SSP_COUNTER 0x0003C0C
|
||||
#define ACP_P1_SW_BT_TX_EN 0x0003C50
|
||||
#define ACP_P1_SW_BT_TX_EN_STATUS 0x0003C54
|
||||
#define ACP_P1_SW_BT_TX_FRAME_FORMAT 0x0003C58
|
||||
#define ACP_P1_SW_BT_TX_SAMPLEINTERVAL 0x0003C5C
|
||||
#define ACP_P1_SW_BT_TX_HCTRL 0x0003C60
|
||||
#define ACP_P1_SW_BT_TX_OFFSET 0x0003C64
|
||||
#define ACP_P1_SW_BT_TX_CHANNEL_ENABLE_DP0 0x0003C68
|
||||
#define ACP_P1_SW_BT_RX_EN 0x0003D28
|
||||
#define ACP_P1_SW_BT_RX_EN_STATUS 0x0003D2C
|
||||
#define ACP_P1_SW_BT_RX_FRAME_FORMAT 0x0003D30
|
||||
#define ACP_P1_SW_BT_RX_SAMPLEINTERVAL 0x0003D34
|
||||
#define ACP_P1_SW_BT_RX_HCTRL 0x0003D38
|
||||
#define ACP_P1_SW_BT_RX_OFFSET 0x0003D3C
|
||||
#define ACP_P1_SW_BT_RX_CHANNEL_ENABLE_DP0 0x0003D40
|
||||
#define ACP_P1_SW_BPT_PORT_EN 0x0003D60
|
||||
#define ACP_P1_SW_BPT_PORT_EN_STATUS 0x0003D64
|
||||
#define ACP_P1_SW_BPT_PORT_FRAME_FORMAT 0x0003D68
|
||||
#define ACP_P1_SW_BPT_PORT_SAMPLEINTERVAL 0x0003D6C
|
||||
#define ACP_P1_SW_BPT_PORT_HCTRL 0x0003D70
|
||||
#define ACP_P1_SW_BPT_PORT_OFFSET 0x0003D74
|
||||
#define ACP_P1_SW_BPT_PORT_CHANNEL_ENABLE 0x0003D78
|
||||
#define ACP_P1_SW_BPT_PORT_FIRST_BYTE_ADDR 0x0003D7C
|
||||
#define ACP_P1_SW_CLK_RESUME_CTRL 0x0003D80
|
||||
#define ACP_P1_SW_CLK_RESUME_DELAY_CNTR 0x0003D84
|
||||
#define ACP_P1_SW_BUS_RESET_CTRL 0x0003D88
|
||||
#define ACP_P1_SW_PRBS_ERR_STATUS 0x0003D8C
|
||||
|
||||
/* Registers from ACP_P1_SW_ACLK block */
|
||||
#define P1_SW_CORB_BASE_ADDRESS 0x0003E00
|
||||
#define P1_SW_CORB_WRITE_POINTER 0x0003E04
|
||||
#define P1_SW_CORB_READ_POINTER 0x0003E08
|
||||
#define P1_SW_CORB_CONTROL 0x0003E0C
|
||||
#define P1_SW_CORB_SIZE 0x0003E14
|
||||
#define P1_SW_RIRB_BASE_ADDRESS 0x0003E18
|
||||
#define P1_SW_RIRB_WRITE_POINTER 0x0003E1C
|
||||
#define P1_SW_RIRB_RESPONSE_INTERRUPT_COUNT 0x0003E20
|
||||
#define P1_SW_RIRB_CONTROL 0x0003E24
|
||||
#define P1_SW_RIRB_SIZE 0x0003E28
|
||||
#define P1_SW_RIRB_FIFO_MIN_THDL 0x0003E2C
|
||||
#define P1_SW_IMM_CMD_UPPER_WORD 0x0003E30
|
||||
#define P1_SW_IMM_CMD_LOWER_QWORD 0x0003E34
|
||||
#define P1_SW_IMM_RESP_UPPER_WORD 0x0003E38
|
||||
#define P1_SW_IMM_RESP_LOWER_QWORD 0x0003E3C
|
||||
#define P1_SW_IMM_CMD_STS 0x0003E40
|
||||
#define P1_SW_BRA_BASE_ADDRESS 0x0003E44
|
||||
#define P1_SW_BRA_TRANSFER_SIZE 0x0003E48
|
||||
#define P1_SW_BRA_DMA_BUSY 0x0003E4C
|
||||
#define P1_SW_BRA_RESP 0x0003E50
|
||||
#define P1_SW_BRA_RESP_FRAME_ADDR 0x0003E54
|
||||
#define P1_SW_BRA_CURRENT_TRANSFER_SIZE 0x0003E58
|
||||
#define P1_SW_STATE_CHANGE_STATUS_0TO7 0x0003E5C
|
||||
#define P1_SW_STATE_CHANGE_STATUS_8TO11 0x0003E60
|
||||
#define P1_SW_STATE_CHANGE_STATUS_MASK_0TO7 0x0003E64
|
||||
#define P1_SW_STATE_CHANGE_STATUS_MASK_8TO11 0x0003E68
|
||||
#define P1_SW_CLK_FREQUENCY_CTRL 0x0003E6C
|
||||
#define P1_SW_ERROR_INTR_MASK 0x0003E70
|
||||
#define P1_SW_PHY_TEST_MODE_DATA_OFF 0x0003E74
|
||||
|
||||
/* Registers from ACP_SCRATCH block */
|
||||
#define ACP_SCRATCH_REG_0 0x0010000
|
||||
@@ -597,6 +597,7 @@ int snd_hdac_stream_get_spbmaxfifo(struct hdac_bus *bus,
|
||||
struct hdac_stream *azx_dev);
|
||||
void snd_hdac_stream_drsm_enable(struct hdac_bus *bus,
|
||||
bool enable, int index);
|
||||
int snd_hdac_stream_wait_drsm(struct hdac_stream *azx_dev);
|
||||
int snd_hdac_stream_set_dpibr(struct hdac_bus *bus,
|
||||
struct hdac_stream *azx_dev, u32 value);
|
||||
int snd_hdac_stream_set_lpib(struct hdac_stream *azx_dev, u32 value);
|
||||
|
||||
@@ -51,6 +51,11 @@ struct hdac_ext_stream {
|
||||
void __iomem *pphc_addr;
|
||||
void __iomem *pplc_addr;
|
||||
|
||||
u32 pphcllpl;
|
||||
u32 pphcllpu;
|
||||
u32 pphcldpl;
|
||||
u32 pphcldpu;
|
||||
|
||||
bool decoupled:1;
|
||||
bool link_locked:1;
|
||||
bool link_prepared;
|
||||
|
||||
@@ -124,7 +124,11 @@ struct hdmi_codec_ops {
|
||||
struct hdmi_codec_pdata {
|
||||
const struct hdmi_codec_ops *ops;
|
||||
uint i2s:1;
|
||||
uint no_i2s_playback:1;
|
||||
uint no_i2s_capture:1;
|
||||
uint spdif:1;
|
||||
uint no_spdif_playback:1;
|
||||
uint no_spdif_capture:1;
|
||||
int max_i2s_channels;
|
||||
void *data;
|
||||
};
|
||||
|
||||
49
include/sound/sdw.h
Normal file
49
include/sound/sdw.h
Normal file
@@ -0,0 +1,49 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0
|
||||
*
|
||||
* linux/sound/sdw.h -- SoundWire helpers for ALSA/ASoC
|
||||
*
|
||||
* Copyright (c) 2022 Cirrus Logic Inc.
|
||||
*
|
||||
* Author: Charles Keepax <ckeepax@opensource.cirrus.com>
|
||||
*/
|
||||
|
||||
#include <linux/soundwire/sdw.h>
|
||||
#include <sound/asound.h>
|
||||
#include <sound/pcm.h>
|
||||
#include <sound/pcm_params.h>
|
||||
|
||||
#ifndef __INCLUDE_SOUND_SDW_H
|
||||
#define __INCLUDE_SOUND_SDW_H
|
||||
|
||||
/**
|
||||
* snd_sdw_params_to_config() - Conversion from hw_params to SoundWire config
|
||||
*
|
||||
* @substream: Pointer to the PCM substream structure
|
||||
* @params: Pointer to the hardware params structure
|
||||
* @stream_config: Stream configuration for the SoundWire audio stream
|
||||
* @port_config: Port configuration for the SoundWire audio stream
|
||||
*
|
||||
* This function provides a basic conversion from the hw_params structure to
|
||||
* SoundWire configuration structures. The user will at a minimum need to also
|
||||
* set the port number in the port config, but may also override more of the
|
||||
* setup, or in the case of a complex user, not use this helper at all and
|
||||
* open-code everything.
|
||||
*/
|
||||
static inline void snd_sdw_params_to_config(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params,
|
||||
struct sdw_stream_config *stream_config,
|
||||
struct sdw_port_config *port_config)
|
||||
{
|
||||
stream_config->frame_rate = params_rate(params);
|
||||
stream_config->ch_count = params_channels(params);
|
||||
stream_config->bps = snd_pcm_format_width(params_format(params));
|
||||
|
||||
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
|
||||
stream_config->direction = SDW_DATA_DIR_RX;
|
||||
else
|
||||
stream_config->direction = SDW_DATA_DIR_TX;
|
||||
|
||||
port_config->ch_mask = GENMASK(stream_config->ch_count - 1, 0);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -173,8 +173,6 @@ void asoc_simple_canonicalize_cpu(struct snd_soc_dai_link_component *cpus,
|
||||
|
||||
void asoc_simple_clean_reference(struct snd_soc_card *card);
|
||||
|
||||
void asoc_simple_convert_fixup(struct asoc_simple_data *data,
|
||||
struct snd_pcm_hw_params *params);
|
||||
void asoc_simple_parse_convert(struct device_node *np, char *prefix,
|
||||
struct asoc_simple_data *data);
|
||||
bool asoc_simple_is_convert_required(const struct asoc_simple_data *data);
|
||||
|
||||
@@ -341,31 +341,27 @@ struct soc_enum;
|
||||
#define SND_SOC_DAPM_STREAM_STOP 0x2
|
||||
#define SND_SOC_DAPM_STREAM_SUSPEND 0x4
|
||||
#define SND_SOC_DAPM_STREAM_RESUME 0x8
|
||||
#define SND_SOC_DAPM_STREAM_PAUSE_PUSH 0x10
|
||||
#define SND_SOC_DAPM_STREAM_PAUSE_PUSH 0x10
|
||||
#define SND_SOC_DAPM_STREAM_PAUSE_RELEASE 0x20
|
||||
|
||||
/* dapm event types */
|
||||
#define SND_SOC_DAPM_PRE_PMU 0x1 /* before widget power up */
|
||||
#define SND_SOC_DAPM_POST_PMU 0x2 /* after widget power up */
|
||||
#define SND_SOC_DAPM_PRE_PMD 0x4 /* before widget power down */
|
||||
#define SND_SOC_DAPM_POST_PMD 0x8 /* after widget power down */
|
||||
#define SND_SOC_DAPM_PRE_REG 0x10 /* before audio path setup */
|
||||
#define SND_SOC_DAPM_POST_REG 0x20 /* after audio path setup */
|
||||
#define SND_SOC_DAPM_WILL_PMU 0x40 /* called at start of sequence */
|
||||
#define SND_SOC_DAPM_WILL_PMD 0x80 /* called at start of sequence */
|
||||
#define SND_SOC_DAPM_PRE_POST_PMD \
|
||||
(SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD)
|
||||
#define SND_SOC_DAPM_PRE_POST_PMU \
|
||||
(SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU)
|
||||
#define SND_SOC_DAPM_PRE_PMU 0x1 /* before widget power up */
|
||||
#define SND_SOC_DAPM_POST_PMU 0x2 /* after widget power up */
|
||||
#define SND_SOC_DAPM_PRE_PMD 0x4 /* before widget power down */
|
||||
#define SND_SOC_DAPM_POST_PMD 0x8 /* after widget power down */
|
||||
#define SND_SOC_DAPM_PRE_REG 0x10 /* before audio path setup */
|
||||
#define SND_SOC_DAPM_POST_REG 0x20 /* after audio path setup */
|
||||
#define SND_SOC_DAPM_WILL_PMU 0x40 /* called at start of sequence */
|
||||
#define SND_SOC_DAPM_WILL_PMD 0x80 /* called at start of sequence */
|
||||
#define SND_SOC_DAPM_PRE_POST_PMD (SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD)
|
||||
#define SND_SOC_DAPM_PRE_POST_PMU (SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU)
|
||||
|
||||
/* convenience event type detection */
|
||||
#define SND_SOC_DAPM_EVENT_ON(e) \
|
||||
(e & (SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU))
|
||||
#define SND_SOC_DAPM_EVENT_OFF(e) \
|
||||
(e & (SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD))
|
||||
#define SND_SOC_DAPM_EVENT_ON(e) (e & (SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU))
|
||||
#define SND_SOC_DAPM_EVENT_OFF(e) (e & (SND_SOC_DAPM_PRE_PMD | SND_SOC_DAPM_POST_PMD))
|
||||
|
||||
/* regulator widget flags */
|
||||
#define SND_SOC_DAPM_REGULATOR_BYPASS 0x1 /* bypass when disabled */
|
||||
#define SND_SOC_DAPM_REGULATOR_BYPASS 0x1 /* bypass when disabled */
|
||||
|
||||
struct snd_soc_dapm_widget;
|
||||
enum snd_soc_dapm_type;
|
||||
@@ -396,18 +392,13 @@ enum snd_soc_bias_level {
|
||||
SND_SOC_BIAS_ON = 3,
|
||||
};
|
||||
|
||||
int dapm_regulator_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_clock_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_pinctrl_event(struct snd_soc_dapm_widget *w,
|
||||
struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_regulator_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_clock_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event);
|
||||
int dapm_pinctrl_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event);
|
||||
|
||||
/* dapm controls */
|
||||
int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_get_volsw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_get_enum_double(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *ucontrol);
|
||||
int snd_soc_dapm_put_enum_double(struct snd_kcontrol *kcontrol,
|
||||
@@ -419,30 +410,24 @@ int snd_soc_dapm_get_pin_switch(struct snd_kcontrol *kcontrol,
|
||||
int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
|
||||
struct snd_ctl_elem_value *uncontrol);
|
||||
int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_widget *widget,
|
||||
int num);
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_new_control(
|
||||
struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_widget *widget, int num);
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_widget *widget);
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_new_control_unlocked(
|
||||
struct snd_soc_dapm_context *dapm,
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_widget *widget);
|
||||
int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
|
||||
struct snd_soc_dai *dai);
|
||||
int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, struct snd_soc_dai *dai);
|
||||
void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w);
|
||||
int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card);
|
||||
void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card);
|
||||
|
||||
int snd_soc_dapm_update_dai(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params,
|
||||
struct snd_soc_dai *dai);
|
||||
struct snd_pcm_hw_params *params, struct snd_soc_dai *dai);
|
||||
|
||||
/* dapm path setup */
|
||||
int snd_soc_dapm_new_widgets(struct snd_soc_card *card);
|
||||
void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm);
|
||||
void snd_soc_dapm_init(struct snd_soc_dapm_context *dapm,
|
||||
struct snd_soc_card *card,
|
||||
struct snd_soc_component *component);
|
||||
struct snd_soc_card *card, struct snd_soc_component *component);
|
||||
int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_route *route, int num);
|
||||
int snd_soc_dapm_del_routes(struct snd_soc_dapm_context *dapm,
|
||||
@@ -450,49 +435,36 @@ int snd_soc_dapm_del_routes(struct snd_soc_dapm_context *dapm,
|
||||
int snd_soc_dapm_weak_routes(struct snd_soc_dapm_context *dapm,
|
||||
const struct snd_soc_dapm_route *route, int num);
|
||||
void snd_soc_dapm_free_widget(struct snd_soc_dapm_widget *w);
|
||||
void snd_soc_dapm_reset_cache(struct snd_soc_dapm_context *dapm);
|
||||
|
||||
/* dapm events */
|
||||
void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
|
||||
int event);
|
||||
void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream, int event);
|
||||
void snd_soc_dapm_stream_stop(struct snd_soc_pcm_runtime *rtd, int stream);
|
||||
void snd_soc_dapm_shutdown(struct snd_soc_card *card);
|
||||
|
||||
/* external DAPM widget events */
|
||||
int snd_soc_dapm_mixer_update_power(struct snd_soc_dapm_context *dapm,
|
||||
struct snd_kcontrol *kcontrol, int connect,
|
||||
struct snd_soc_dapm_update *update);
|
||||
struct snd_kcontrol *kcontrol, int connect, struct snd_soc_dapm_update *update);
|
||||
int snd_soc_dapm_mux_update_power(struct snd_soc_dapm_context *dapm,
|
||||
struct snd_kcontrol *kcontrol, int mux, struct soc_enum *e,
|
||||
struct snd_soc_dapm_update *update);
|
||||
|
||||
/* dapm sys fs - used by the core */
|
||||
extern struct attribute *soc_dapm_dev_attrs[];
|
||||
void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
|
||||
struct dentry *parent);
|
||||
void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm, struct dentry *parent);
|
||||
|
||||
/* dapm audio pin control and status */
|
||||
int snd_soc_dapm_enable_pin(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_disable_pin(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_disable_pin_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_enable_pin(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_enable_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_disable_pin(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_disable_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_nc_pin(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_nc_pin_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_nc_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_get_pin_status(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_sync(struct snd_soc_dapm_context *dapm);
|
||||
int snd_soc_dapm_sync_unlocked(struct snd_soc_dapm_context *dapm);
|
||||
int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm,
|
||||
const char *pin);
|
||||
int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_force_enable_pin_unlocked(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
int snd_soc_dapm_ignore_suspend(struct snd_soc_dapm_context *dapm, const char *pin);
|
||||
unsigned int dapm_kcontrol_get_value(const struct snd_kcontrol *kcontrol);
|
||||
|
||||
/* Mostly internal - should not normally be used */
|
||||
@@ -501,40 +473,35 @@ void dapm_mark_endpoints_dirty(struct snd_soc_card *card);
|
||||
/* dapm path query */
|
||||
int snd_soc_dapm_dai_get_connected_widgets(struct snd_soc_dai *dai, int stream,
|
||||
struct snd_soc_dapm_widget_list **list,
|
||||
bool (*custom_stop_condition)(struct snd_soc_dapm_widget *,
|
||||
enum snd_soc_dapm_direction));
|
||||
bool (*custom_stop_condition)(struct snd_soc_dapm_widget *, enum snd_soc_dapm_direction));
|
||||
void snd_soc_dapm_dai_free_widgets(struct snd_soc_dapm_widget_list **list);
|
||||
|
||||
struct snd_soc_dapm_context *snd_soc_dapm_kcontrol_dapm(
|
||||
struct snd_kcontrol *kcontrol);
|
||||
struct snd_soc_dapm_context *snd_soc_dapm_kcontrol_dapm(struct snd_kcontrol *kcontrol);
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_kcontrol_widget(struct snd_kcontrol *kcontrol);
|
||||
|
||||
struct snd_soc_dapm_widget *snd_soc_dapm_kcontrol_widget(
|
||||
struct snd_kcontrol *kcontrol);
|
||||
|
||||
int snd_soc_dapm_force_bias_level(struct snd_soc_dapm_context *dapm,
|
||||
enum snd_soc_bias_level level);
|
||||
int snd_soc_dapm_force_bias_level(struct snd_soc_dapm_context *dapm, enum snd_soc_bias_level level);
|
||||
|
||||
/* dapm widget types */
|
||||
enum snd_soc_dapm_type {
|
||||
snd_soc_dapm_input = 0, /* input pin */
|
||||
snd_soc_dapm_output, /* output pin */
|
||||
snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */
|
||||
snd_soc_dapm_demux, /* connects the input to one of multiple outputs */
|
||||
snd_soc_dapm_mixer, /* mixes several analog signals together */
|
||||
snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */
|
||||
snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */
|
||||
snd_soc_dapm_out_drv, /* output driver */
|
||||
snd_soc_dapm_adc, /* analog to digital converter */
|
||||
snd_soc_dapm_dac, /* digital to analog converter */
|
||||
snd_soc_dapm_mux, /* selects 1 analog signal from many inputs */
|
||||
snd_soc_dapm_demux, /* connects the input to one of multiple outputs */
|
||||
snd_soc_dapm_mixer, /* mixes several analog signals together */
|
||||
snd_soc_dapm_mixer_named_ctl, /* mixer with named controls */
|
||||
snd_soc_dapm_pga, /* programmable gain/attenuation (volume) */
|
||||
snd_soc_dapm_out_drv, /* output driver */
|
||||
snd_soc_dapm_adc, /* analog to digital converter */
|
||||
snd_soc_dapm_dac, /* digital to analog converter */
|
||||
snd_soc_dapm_micbias, /* microphone bias (power) - DEPRECATED: use snd_soc_dapm_supply */
|
||||
snd_soc_dapm_mic, /* microphone */
|
||||
snd_soc_dapm_hp, /* headphones */
|
||||
snd_soc_dapm_spk, /* speaker */
|
||||
snd_soc_dapm_line, /* line input/output */
|
||||
snd_soc_dapm_mic, /* microphone */
|
||||
snd_soc_dapm_hp, /* headphones */
|
||||
snd_soc_dapm_spk, /* speaker */
|
||||
snd_soc_dapm_line, /* line input/output */
|
||||
snd_soc_dapm_switch, /* analog switch */
|
||||
snd_soc_dapm_vmid, /* codec bias/vmid - to minimise pops */
|
||||
snd_soc_dapm_pre, /* machine specific pre widget - exec first */
|
||||
snd_soc_dapm_post, /* machine specific post widget - exec last */
|
||||
snd_soc_dapm_vmid, /* codec bias/vmid - to minimise pops */
|
||||
snd_soc_dapm_pre, /* machine specific pre widget - exec first */
|
||||
snd_soc_dapm_post, /* machine specific post widget - exec last */
|
||||
snd_soc_dapm_supply, /* power/clock supply */
|
||||
snd_soc_dapm_pinctrl, /* pinctrl */
|
||||
snd_soc_dapm_regulator_supply, /* external regulator */
|
||||
@@ -600,9 +567,9 @@ struct snd_soc_dapm_path {
|
||||
};
|
||||
|
||||
/* status */
|
||||
u32 connect:1; /* source and sink widgets are connected */
|
||||
u32 walking:1; /* path is in the process of being walked */
|
||||
u32 weak:1; /* path ignored for power management */
|
||||
u32 connect:1; /* source and sink widgets are connected */
|
||||
u32 walking:1; /* path is in the process of being walked */
|
||||
u32 weak:1; /* path ignored for power management */
|
||||
u32 is_supply:1; /* At least one of the connected widgets is a supply */
|
||||
|
||||
int (*connected)(struct snd_soc_dapm_widget *source,
|
||||
@@ -616,8 +583,8 @@ struct snd_soc_dapm_path {
|
||||
/* dapm widget */
|
||||
struct snd_soc_dapm_widget {
|
||||
enum snd_soc_dapm_type id;
|
||||
const char *name; /* widget name */
|
||||
const char *sname; /* stream name */
|
||||
const char *name; /* widget name */
|
||||
const char *sname; /* stream name */
|
||||
struct list_head list;
|
||||
struct snd_soc_dapm_context *dapm;
|
||||
|
||||
@@ -636,7 +603,7 @@ struct snd_soc_dapm_widget {
|
||||
unsigned char connected:1; /* connected codec pin */
|
||||
unsigned char new:1; /* cnew complete */
|
||||
unsigned char force:1; /* force state */
|
||||
unsigned char ignore_suspend:1; /* kept enabled over suspend */
|
||||
unsigned char ignore_suspend:1; /* kept enabled over suspend */
|
||||
unsigned char new_power:1; /* power from this run */
|
||||
unsigned char power_checked:1; /* power checked this run */
|
||||
unsigned char is_supply:1; /* Widget is a supply type widget */
|
||||
@@ -680,27 +647,24 @@ struct snd_soc_dapm_update {
|
||||
bool has_second_set;
|
||||
};
|
||||
|
||||
struct snd_soc_dapm_wcache {
|
||||
struct snd_soc_dapm_widget *widget;
|
||||
};
|
||||
|
||||
/* DAPM context */
|
||||
struct snd_soc_dapm_context {
|
||||
enum snd_soc_bias_level bias_level;
|
||||
unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */
|
||||
/* Go to BIAS_OFF in suspend if the DAPM context is idle */
|
||||
unsigned int suspend_bias_off:1;
|
||||
|
||||
struct device *dev; /* from parent - for debug */
|
||||
struct snd_soc_component *component; /* parent component */
|
||||
struct snd_soc_card *card; /* parent card */
|
||||
/* bit field */
|
||||
unsigned int idle_bias_off:1; /* Use BIAS_OFF instead of STANDBY */
|
||||
unsigned int suspend_bias_off:1; /* Use BIAS_OFF in suspend if the DAPM is idle */
|
||||
|
||||
struct device *dev; /* from parent - for debug */
|
||||
struct snd_soc_component *component; /* parent component */
|
||||
struct snd_soc_card *card; /* parent card */
|
||||
|
||||
/* used during DAPM updates */
|
||||
enum snd_soc_bias_level target_bias_level;
|
||||
struct list_head list;
|
||||
|
||||
struct snd_soc_dapm_wcache path_sink_cache;
|
||||
struct snd_soc_dapm_wcache path_source_cache;
|
||||
struct snd_soc_dapm_widget *wcache_sink;
|
||||
struct snd_soc_dapm_widget *wcache_source;
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_dapm;
|
||||
@@ -767,11 +731,11 @@ enum snd_soc_dapm_direction {
|
||||
|
||||
#define SND_SOC_DAPM_DIR_TO_EP(x) BIT(x)
|
||||
|
||||
#define SND_SOC_DAPM_EP_SOURCE SND_SOC_DAPM_DIR_TO_EP(SND_SOC_DAPM_DIR_IN)
|
||||
#define SND_SOC_DAPM_EP_SINK SND_SOC_DAPM_DIR_TO_EP(SND_SOC_DAPM_DIR_OUT)
|
||||
#define SND_SOC_DAPM_EP_SOURCE SND_SOC_DAPM_DIR_TO_EP(SND_SOC_DAPM_DIR_IN)
|
||||
#define SND_SOC_DAPM_EP_SINK SND_SOC_DAPM_DIR_TO_EP(SND_SOC_DAPM_DIR_OUT)
|
||||
|
||||
/**
|
||||
* snd_soc_dapm_widget_for_each_sink_path - Iterates over all paths in the
|
||||
* snd_soc_dapm_widget_for_each_path - Iterates over all paths in the
|
||||
* specified direction of a widget
|
||||
* @w: The widget
|
||||
* @dir: Whether to iterate over the paths where the specified widget is the
|
||||
@@ -782,7 +746,7 @@ enum snd_soc_dapm_direction {
|
||||
list_for_each_entry(p, &w->edges[dir], list_node[dir])
|
||||
|
||||
/**
|
||||
* snd_soc_dapm_widget_for_each_sink_path_safe - Iterates over all paths in the
|
||||
* snd_soc_dapm_widget_for_each_path_safe - Iterates over all paths in the
|
||||
* specified direction of a widget
|
||||
* @w: The widget
|
||||
* @dir: Whether to iterate over the paths where the specified widget is the
|
||||
@@ -790,7 +754,7 @@ enum snd_soc_dapm_direction {
|
||||
* @p: The path iterator variable
|
||||
* @next_p: Temporary storage for the next path
|
||||
*
|
||||
* This function works like snd_soc_dapm_widget_for_each_sink_path, expect that
|
||||
* This function works like snd_soc_dapm_widget_for_each_path, expect that
|
||||
* it is safe to remove the current path from the list while iterating
|
||||
*/
|
||||
#define snd_soc_dapm_widget_for_each_path_safe(w, dir, p, next_p) \
|
||||
|
||||
@@ -78,8 +78,6 @@ struct snd_soc_dpcm {
|
||||
struct list_head list_be;
|
||||
struct list_head list_fe;
|
||||
|
||||
/* hw params for this link - may be different for each link */
|
||||
struct snd_pcm_hw_params hw_params;
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_state;
|
||||
#endif
|
||||
|
||||
@@ -59,15 +59,11 @@ enum sof_ipc_type {
|
||||
* SOF Platform data.
|
||||
*/
|
||||
struct snd_sof_pdata {
|
||||
const struct firmware *fw;
|
||||
const char *name;
|
||||
const char *platform;
|
||||
|
||||
struct device *dev;
|
||||
|
||||
/* indicate how many first bytes shouldn't be loaded into DSP memory. */
|
||||
size_t fw_offset;
|
||||
|
||||
/*
|
||||
* notification callback used if the hardware initialization
|
||||
* can take time or is handled in a workqueue. This callback
|
||||
@@ -86,6 +82,9 @@ struct snd_sof_pdata {
|
||||
const char *tplg_filename_prefix;
|
||||
const char *tplg_filename;
|
||||
|
||||
/* loadable external libraries available under this directory */
|
||||
const char *fw_lib_prefix;
|
||||
|
||||
/* machine */
|
||||
struct platform_device *pdev_mach;
|
||||
const struct snd_soc_acpi_mach *machine;
|
||||
@@ -131,8 +130,9 @@ struct sof_dev_desc {
|
||||
unsigned int ipc_supported_mask;
|
||||
enum sof_ipc_type ipc_default;
|
||||
|
||||
/* defaults paths for firmware and topology files */
|
||||
/* defaults paths for firmware, library and topology files */
|
||||
const char *default_fw_path[SOF_IPC_TYPE_COUNT];
|
||||
const char *default_lib_path[SOF_IPC_TYPE_COUNT];
|
||||
const char *default_tplg_path[SOF_IPC_TYPE_COUNT];
|
||||
|
||||
/* default firmware name */
|
||||
|
||||
@@ -17,6 +17,7 @@ struct sof_ipc_dai_acp_params {
|
||||
|
||||
uint32_t fsync_rate; /* FSYNC frequency in Hz */
|
||||
uint32_t tdm_slots;
|
||||
uint32_t tdm_mode;
|
||||
} __packed;
|
||||
|
||||
/* ACPDMIC Configuration Request - SOF_IPC_DAI_AMD_CONFIG */
|
||||
|
||||
@@ -84,8 +84,10 @@ enum sof_ipc_dai_type {
|
||||
SOF_DAI_AMD_BT, /**< AMD ACP BT*/
|
||||
SOF_DAI_AMD_SP, /**< AMD ACP SP */
|
||||
SOF_DAI_AMD_DMIC, /**< AMD ACP DMIC */
|
||||
SOF_DAI_AMD_HS, /**< Amd HS */
|
||||
SOF_DAI_MEDIATEK_AFE, /**< Mediatek AFE */
|
||||
SOF_DAI_AMD_HS, /**< Amd HS */
|
||||
SOF_DAI_AMD_SP_VIRTUAL, /**< AMD ACP SP VIRTUAL */
|
||||
SOF_DAI_AMD_HS_VIRTUAL, /**< AMD ACP HS VIRTUAL */
|
||||
};
|
||||
|
||||
/* general purpose DAI configuration */
|
||||
|
||||
@@ -185,6 +185,10 @@ enum sof_ipc4_pipeline_state {
|
||||
#define SOF_IPC4_GLB_PIPE_STATE_MASK GENMASK(15, 0)
|
||||
#define SOF_IPC4_GLB_PIPE_STATE(x) ((x) << SOF_IPC4_GLB_PIPE_STATE_SHIFT)
|
||||
|
||||
/* load library ipc msg */
|
||||
#define SOF_IPC4_GLB_LOAD_LIBRARY_LIB_ID_SHIFT 16
|
||||
#define SOF_IPC4_GLB_LOAD_LIBRARY_LIB_ID(x) ((x) << SOF_IPC4_GLB_LOAD_LIBRARY_LIB_ID_SHIFT)
|
||||
|
||||
enum sof_ipc4_channel_config {
|
||||
/* one channel only. */
|
||||
SOF_IPC4_CHANNEL_CONFIG_MONO,
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Platform data for Texas Instruments TLV320AIC3x codec
|
||||
*
|
||||
* Author: Jarkko Nikula <jarkko.nikula@bitmer.com>
|
||||
*/
|
||||
#ifndef __TLV320AIC3x_H__
|
||||
#define __TLV320AIC3x_H__
|
||||
|
||||
/* GPIO API */
|
||||
enum {
|
||||
AIC3X_GPIO1_FUNC_DISABLED = 0,
|
||||
AIC3X_GPIO1_FUNC_AUDIO_WORDCLK_ADC = 1,
|
||||
AIC3X_GPIO1_FUNC_CLOCK_MUX = 2,
|
||||
AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV2 = 3,
|
||||
AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV4 = 4,
|
||||
AIC3X_GPIO1_FUNC_CLOCK_MUX_DIV8 = 5,
|
||||
AIC3X_GPIO1_FUNC_SHORT_CIRCUIT_IRQ = 6,
|
||||
AIC3X_GPIO1_FUNC_AGC_NOISE_IRQ = 7,
|
||||
AIC3X_GPIO1_FUNC_INPUT = 8,
|
||||
AIC3X_GPIO1_FUNC_OUTPUT = 9,
|
||||
AIC3X_GPIO1_FUNC_DIGITAL_MIC_MODCLK = 10,
|
||||
AIC3X_GPIO1_FUNC_AUDIO_WORDCLK = 11,
|
||||
AIC3X_GPIO1_FUNC_BUTTON_IRQ = 12,
|
||||
AIC3X_GPIO1_FUNC_HEADSET_DETECT_IRQ = 13,
|
||||
AIC3X_GPIO1_FUNC_HEADSET_DETECT_OR_BUTTON_IRQ = 14,
|
||||
AIC3X_GPIO1_FUNC_ALL_IRQ = 16
|
||||
};
|
||||
|
||||
enum {
|
||||
AIC3X_GPIO2_FUNC_DISABLED = 0,
|
||||
AIC3X_GPIO2_FUNC_HEADSET_DETECT_IRQ = 2,
|
||||
AIC3X_GPIO2_FUNC_INPUT = 3,
|
||||
AIC3X_GPIO2_FUNC_OUTPUT = 4,
|
||||
AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT = 5,
|
||||
AIC3X_GPIO2_FUNC_AUDIO_BITCLK = 8,
|
||||
AIC3X_GPIO2_FUNC_HEADSET_DETECT_OR_BUTTON_IRQ = 9,
|
||||
AIC3X_GPIO2_FUNC_ALL_IRQ = 10,
|
||||
AIC3X_GPIO2_FUNC_SHORT_CIRCUIT_OR_AGC_IRQ = 11,
|
||||
AIC3X_GPIO2_FUNC_HEADSET_OR_BUTTON_PRESS_OR_SHORT_CIRCUIT_IRQ = 12,
|
||||
AIC3X_GPIO2_FUNC_SHORT_CIRCUIT_IRQ = 13,
|
||||
AIC3X_GPIO2_FUNC_AGC_NOISE_IRQ = 14,
|
||||
AIC3X_GPIO2_FUNC_BUTTON_PRESS_IRQ = 15
|
||||
};
|
||||
|
||||
enum aic3x_micbias_voltage {
|
||||
AIC3X_MICBIAS_OFF = 0,
|
||||
AIC3X_MICBIAS_2_0V = 1,
|
||||
AIC3X_MICBIAS_2_5V = 2,
|
||||
AIC3X_MICBIAS_AVDDV = 3,
|
||||
};
|
||||
|
||||
struct aic3x_setup_data {
|
||||
unsigned int gpio_func[2];
|
||||
};
|
||||
|
||||
struct aic3x_pdata {
|
||||
int gpio_reset; /* < 0 if not used */
|
||||
struct aic3x_setup_data *setup;
|
||||
|
||||
/* Selects the micbias voltage */
|
||||
enum aic3x_micbias_voltage micbias_vg;
|
||||
};
|
||||
|
||||
#endif
|
||||
66
include/trace/events/watchdog.h
Normal file
66
include/trace/events/watchdog.h
Normal file
@@ -0,0 +1,66 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
#undef TRACE_SYSTEM
|
||||
#define TRACE_SYSTEM watchdog
|
||||
|
||||
#if !defined(_TRACE_WATCHDOG_H) || defined(TRACE_HEADER_MULTI_READ)
|
||||
#define _TRACE_WATCHDOG_H
|
||||
|
||||
#include <linux/watchdog.h>
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
DECLARE_EVENT_CLASS(watchdog_template,
|
||||
|
||||
TP_PROTO(struct watchdog_device *wdd, int err),
|
||||
|
||||
TP_ARGS(wdd, err),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(int, id)
|
||||
__field(int, err)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->id = wdd->id;
|
||||
__entry->err = err;
|
||||
),
|
||||
|
||||
TP_printk("watchdog%d err=%d", __entry->id, __entry->err)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(watchdog_template, watchdog_start,
|
||||
TP_PROTO(struct watchdog_device *wdd, int err),
|
||||
TP_ARGS(wdd, err));
|
||||
|
||||
DEFINE_EVENT(watchdog_template, watchdog_ping,
|
||||
TP_PROTO(struct watchdog_device *wdd, int err),
|
||||
TP_ARGS(wdd, err));
|
||||
|
||||
DEFINE_EVENT(watchdog_template, watchdog_stop,
|
||||
TP_PROTO(struct watchdog_device *wdd, int err),
|
||||
TP_ARGS(wdd, err));
|
||||
|
||||
TRACE_EVENT(watchdog_set_timeout,
|
||||
|
||||
TP_PROTO(struct watchdog_device *wdd, unsigned int timeout, int err),
|
||||
|
||||
TP_ARGS(wdd, timeout, err),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(int, id)
|
||||
__field(unsigned int, timeout)
|
||||
__field(int, err)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->id = wdd->id;
|
||||
__entry->timeout = timeout;
|
||||
__entry->err = err;
|
||||
),
|
||||
|
||||
TP_printk("watchdog%d timeout=%u err=%d", __entry->id, __entry->timeout, __entry->err)
|
||||
);
|
||||
|
||||
#endif /* !defined(_TRACE_WATCHDOG_H) || defined(TRACE_HEADER_MULTI_READ) */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
@@ -763,6 +763,8 @@ struct drm_amdgpu_cs_chunk_data {
|
||||
#define AMDGPU_INFO_FW_MES_KIQ 0x19
|
||||
/* Subquery id: Query MES firmware version */
|
||||
#define AMDGPU_INFO_FW_MES 0x1a
|
||||
/* Subquery id: Query IMU firmware version */
|
||||
#define AMDGPU_INFO_FW_IMU 0x1b
|
||||
|
||||
/* number of bytes moved for TTM migration */
|
||||
#define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f
|
||||
|
||||
@@ -235,25 +235,29 @@ struct drm_panfrost_madvise {
|
||||
#define PANFROSTDUMP_BUF_BO (PANFROSTDUMP_BUF_BOMAP + 1)
|
||||
#define PANFROSTDUMP_BUF_TRAILER (PANFROSTDUMP_BUF_BO + 1)
|
||||
|
||||
/*
|
||||
* This structure is the native endianness of the dumping machine, tools can
|
||||
* detect the endianness by looking at the value in 'magic'.
|
||||
*/
|
||||
struct panfrost_dump_object_header {
|
||||
__le32 magic;
|
||||
__le32 type;
|
||||
__le32 file_size;
|
||||
__le32 file_offset;
|
||||
__u32 magic;
|
||||
__u32 type;
|
||||
__u32 file_size;
|
||||
__u32 file_offset;
|
||||
|
||||
union {
|
||||
struct pan_reg_hdr {
|
||||
__le64 jc;
|
||||
__le32 gpu_id;
|
||||
__le32 major;
|
||||
__le32 minor;
|
||||
__le64 nbos;
|
||||
struct {
|
||||
__u64 jc;
|
||||
__u32 gpu_id;
|
||||
__u32 major;
|
||||
__u32 minor;
|
||||
__u64 nbos;
|
||||
} reghdr;
|
||||
|
||||
struct pan_bomap_hdr {
|
||||
__le32 valid;
|
||||
__le64 iova;
|
||||
__le32 data[2];
|
||||
struct {
|
||||
__u32 valid;
|
||||
__u64 iova;
|
||||
__u32 data[2];
|
||||
} bomap;
|
||||
|
||||
/*
|
||||
@@ -261,14 +265,14 @@ struct panfrost_dump_object_header {
|
||||
* with new fields and also keep it 512-byte aligned
|
||||
*/
|
||||
|
||||
__le32 sizer[496];
|
||||
__u32 sizer[496];
|
||||
};
|
||||
};
|
||||
|
||||
/* Registers object, an array of these */
|
||||
struct panfrost_dump_registers {
|
||||
__le32 reg;
|
||||
__le32 value;
|
||||
__u32 reg;
|
||||
__u32 value;
|
||||
};
|
||||
|
||||
#if defined(__cplusplus)
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
#define AUDIT_MAX_KEY_LEN 256
|
||||
#define AUDIT_BITMASK_SIZE 64
|
||||
#define AUDIT_WORD(nr) ((__u32)((nr)/32))
|
||||
#define AUDIT_BIT(nr) (1 << ((nr) - AUDIT_WORD(nr)*32))
|
||||
#define AUDIT_BIT(nr) (1U << ((nr) - AUDIT_WORD(nr)*32))
|
||||
|
||||
#define AUDIT_SYSCALL_CLASSES 16
|
||||
#define AUDIT_CLASS_DIR_WRITE 0
|
||||
|
||||
@@ -426,7 +426,7 @@ struct vfs_ns_cap_data {
|
||||
*/
|
||||
|
||||
#define CAP_TO_INDEX(x) ((x) >> 5) /* 1 << 5 == bits in __u32 */
|
||||
#define CAP_TO_MASK(x) (1 << ((x) & 31)) /* mask for indexed __u32 */
|
||||
#define CAP_TO_MASK(x) (1U << ((x) & 31)) /* mask for indexed __u32 */
|
||||
|
||||
|
||||
#endif /* _UAPI_LINUX_CAPABILITY_H */
|
||||
|
||||
@@ -1568,6 +1568,20 @@ static inline void cec_ops_request_short_audio_descriptor(const struct cec_msg *
|
||||
}
|
||||
}
|
||||
|
||||
static inline void cec_msg_set_audio_volume_level(struct cec_msg *msg,
|
||||
__u8 audio_volume_level)
|
||||
{
|
||||
msg->len = 3;
|
||||
msg->msg[1] = CEC_MSG_SET_AUDIO_VOLUME_LEVEL;
|
||||
msg->msg[2] = audio_volume_level;
|
||||
}
|
||||
|
||||
static inline void cec_ops_set_audio_volume_level(const struct cec_msg *msg,
|
||||
__u8 *audio_volume_level)
|
||||
{
|
||||
*audio_volume_level = msg->msg[2];
|
||||
}
|
||||
|
||||
|
||||
/* Audio Rate Control Feature */
|
||||
static inline void cec_msg_set_audio_rate(struct cec_msg *msg,
|
||||
|
||||
@@ -768,6 +768,7 @@ struct cec_event {
|
||||
#define CEC_OP_FEAT_DEV_HAS_SET_AUDIO_RATE 0x08
|
||||
#define CEC_OP_FEAT_DEV_SINK_HAS_ARC_TX 0x04
|
||||
#define CEC_OP_FEAT_DEV_SOURCE_HAS_ARC_RX 0x02
|
||||
#define CEC_OP_FEAT_DEV_HAS_SET_AUDIO_VOLUME_LEVEL 0x01
|
||||
|
||||
#define CEC_MSG_GIVE_FEATURES 0xa5 /* HDMI 2.0 */
|
||||
|
||||
@@ -1059,6 +1060,7 @@ struct cec_event {
|
||||
#define CEC_OP_AUD_FMT_ID_CEA861 0
|
||||
#define CEC_OP_AUD_FMT_ID_CEA861_CXT 1
|
||||
|
||||
#define CEC_MSG_SET_AUDIO_VOLUME_LEVEL 0x73
|
||||
|
||||
/* Audio Rate Control Feature */
|
||||
#define CEC_MSG_SET_AUDIO_RATE 0x9a
|
||||
|
||||
@@ -29,6 +29,7 @@ enum idxd_scmd_stat {
|
||||
IDXD_SCMD_WQ_NO_SIZE = 0x800e0000,
|
||||
IDXD_SCMD_WQ_NO_PRIV = 0x800f0000,
|
||||
IDXD_SCMD_WQ_IRQ_ERR = 0x80100000,
|
||||
IDXD_SCMD_WQ_USER_NO_IOMMU = 0x80110000,
|
||||
};
|
||||
|
||||
#define IDXD_SCMD_SOFTERR_MASK 0x80000000
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#define _UAPI_LINUX_IN_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/libc-compat.h>
|
||||
#include <linux/socket.h>
|
||||
|
||||
|
||||
@@ -222,7 +222,7 @@ enum io_uring_op {
|
||||
|
||||
/*
|
||||
* sqe->uring_cmd_flags
|
||||
* IORING_URING_CMD_FIXED use registered buffer; pass thig flag
|
||||
* IORING_URING_CMD_FIXED use registered buffer; pass this flag
|
||||
* along with setting sqe->buf_index.
|
||||
*/
|
||||
#define IORING_URING_CMD_FIXED (1U << 0)
|
||||
|
||||
@@ -100,8 +100,10 @@ struct iphdr {
|
||||
__u8 ttl;
|
||||
__u8 protocol;
|
||||
__sum16 check;
|
||||
__be32 saddr;
|
||||
__be32 daddr;
|
||||
__struct_group(/* no tag */, addrs, /* no attrs */,
|
||||
__be32 saddr;
|
||||
__be32 daddr;
|
||||
);
|
||||
/*The options start here. */
|
||||
};
|
||||
|
||||
|
||||
@@ -130,8 +130,10 @@ struct ipv6hdr {
|
||||
__u8 nexthdr;
|
||||
__u8 hop_limit;
|
||||
|
||||
struct in6_addr saddr;
|
||||
struct in6_addr daddr;
|
||||
__struct_group(/* no tag */, addrs, /* no attrs */,
|
||||
struct in6_addr saddr;
|
||||
struct in6_addr daddr;
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1337,7 +1337,7 @@ union perf_mem_data_src {
|
||||
#define PERF_MEM_LVLNUM_L3 0x03 /* L3 */
|
||||
#define PERF_MEM_LVLNUM_L4 0x04 /* L4 */
|
||||
/* 5-0x8 available */
|
||||
#define PERF_MEM_LVLNUM_EXTN_MEM 0x09 /* Extension memory */
|
||||
#define PERF_MEM_LVLNUM_CXL 0x09 /* CXL */
|
||||
#define PERF_MEM_LVLNUM_IO 0x0a /* I/O */
|
||||
#define PERF_MEM_LVLNUM_ANY_CACHE 0x0b /* Any cache */
|
||||
#define PERF_MEM_LVLNUM_LFB 0x0c /* LFB */
|
||||
|
||||
@@ -117,7 +117,46 @@
|
||||
/*
|
||||
* Defect Pixel Cluster Correction
|
||||
*/
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_MAX 3
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_MAX 3
|
||||
|
||||
#define RKISP1_CIF_ISP_DPCC_MODE_STAGE1_ENABLE (1U << 2)
|
||||
|
||||
#define RKISP1_CIF_ISP_DPCC_OUTPUT_MODE_STAGE1_INCL_G_CENTER (1U << 0)
|
||||
#define RKISP1_CIF_ISP_DPCC_OUTPUT_MODE_STAGE1_INCL_RB_CENTER (1U << 1)
|
||||
#define RKISP1_CIF_ISP_DPCC_OUTPUT_MODE_STAGE1_G_3X3 (1U << 2)
|
||||
#define RKISP1_CIF_ISP_DPCC_OUTPUT_MODE_STAGE1_RB_3X3 (1U << 3)
|
||||
|
||||
/* 0-2 for sets 1-3 */
|
||||
#define RKISP1_CIF_ISP_DPCC_SET_USE_STAGE1_USE_SET(n) ((n) << 0)
|
||||
#define RKISP1_CIF_ISP_DPCC_SET_USE_STAGE1_USE_FIX_SET (1U << 3)
|
||||
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_PG_GREEN_ENABLE (1U << 0)
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_LC_GREEN_ENABLE (1U << 1)
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_RO_GREEN_ENABLE (1U << 2)
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_RND_GREEN_ENABLE (1U << 3)
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_RG_GREEN_ENABLE (1U << 4)
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_PG_RED_BLUE_ENABLE (1U << 8)
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_LC_RED_BLUE_ENABLE (1U << 9)
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_RO_RED_BLUE_ENABLE (1U << 10)
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_RND_RED_BLUE_ENABLE (1U << 11)
|
||||
#define RKISP1_CIF_ISP_DPCC_METHODS_SET_RG_RED_BLUE_ENABLE (1U << 12)
|
||||
|
||||
#define RKISP1_CIF_ISP_DPCC_LINE_THRESH_G(v) ((v) << 0)
|
||||
#define RKISP1_CIF_ISP_DPCC_LINE_THRESH_RB(v) ((v) << 8)
|
||||
#define RKISP1_CIF_ISP_DPCC_LINE_MAD_FAC_G(v) ((v) << 0)
|
||||
#define RKISP1_CIF_ISP_DPCC_LINE_MAD_FAC_RB(v) ((v) << 8)
|
||||
#define RKISP1_CIF_ISP_DPCC_PG_FAC_G(v) ((v) << 0)
|
||||
#define RKISP1_CIF_ISP_DPCC_PG_FAC_RB(v) ((v) << 8)
|
||||
#define RKISP1_CIF_ISP_DPCC_RND_THRESH_G(v) ((v) << 0)
|
||||
#define RKISP1_CIF_ISP_DPCC_RND_THRESH_RB(v) ((v) << 8)
|
||||
#define RKISP1_CIF_ISP_DPCC_RG_FAC_G(v) ((v) << 0)
|
||||
#define RKISP1_CIF_ISP_DPCC_RG_FAC_RB(v) ((v) << 8)
|
||||
|
||||
#define RKISP1_CIF_ISP_DPCC_RO_LIMITS_n_G(n, v) ((v) << ((n) * 4))
|
||||
#define RKISP1_CIF_ISP_DPCC_RO_LIMITS_n_RB(n, v) ((v) << ((n) * 4 + 2))
|
||||
|
||||
#define RKISP1_CIF_ISP_DPCC_RND_OFFS_n_G(n, v) ((v) << ((n) * 4))
|
||||
#define RKISP1_CIF_ISP_DPCC_RND_OFFS_n_RB(n, v) ((v) << ((n) * 4 + 2))
|
||||
|
||||
/*
|
||||
* Denoising pre filter
|
||||
@@ -249,16 +288,20 @@ struct rkisp1_cif_isp_bls_config {
|
||||
};
|
||||
|
||||
/**
|
||||
* struct rkisp1_cif_isp_dpcc_methods_config - Methods Configuration used by DPCC
|
||||
* struct rkisp1_cif_isp_dpcc_methods_config - DPCC methods set configuration
|
||||
*
|
||||
* Methods Configuration used by Defect Pixel Cluster Correction
|
||||
* This structure stores the configuration of one set of methods for the DPCC
|
||||
* algorithm. Multiple methods can be selected in each set (independently for
|
||||
* the Green and Red/Blue components) through the @method field, the result is
|
||||
* the logical AND of all enabled methods. The remaining fields set thresholds
|
||||
* and factors for each method.
|
||||
*
|
||||
* @method: Method enable bits
|
||||
* @line_thresh: Line threshold
|
||||
* @line_mad_fac: Line MAD factor
|
||||
* @pg_fac: Peak gradient factor
|
||||
* @rnd_thresh: Rank Neighbor Difference threshold
|
||||
* @rg_fac: Rank gradient factor
|
||||
* @method: Method enable bits (RKISP1_CIF_ISP_DPCC_METHODS_SET_*)
|
||||
* @line_thresh: Line threshold (RKISP1_CIF_ISP_DPCC_LINE_THRESH_*)
|
||||
* @line_mad_fac: Line Mean Absolute Difference factor (RKISP1_CIF_ISP_DPCC_LINE_MAD_FAC_*)
|
||||
* @pg_fac: Peak gradient factor (RKISP1_CIF_ISP_DPCC_PG_FAC_*)
|
||||
* @rnd_thresh: Rank Neighbor Difference threshold (RKISP1_CIF_ISP_DPCC_RND_THRESH_*)
|
||||
* @rg_fac: Rank gradient factor (RKISP1_CIF_ISP_DPCC_RG_FAC_*)
|
||||
*/
|
||||
struct rkisp1_cif_isp_dpcc_methods_config {
|
||||
__u32 method;
|
||||
@@ -272,14 +315,16 @@ struct rkisp1_cif_isp_dpcc_methods_config {
|
||||
/**
|
||||
* struct rkisp1_cif_isp_dpcc_config - Configuration used by DPCC
|
||||
*
|
||||
* Configuration used by Defect Pixel Cluster Correction
|
||||
* Configuration used by Defect Pixel Cluster Correction. Three sets of methods
|
||||
* can be configured and selected through the @set_use field. The result is the
|
||||
* logical OR of all enabled sets.
|
||||
*
|
||||
* @mode: dpcc output mode
|
||||
* @output_mode: whether use hard coded methods
|
||||
* @set_use: stage1 methods set
|
||||
* @methods: methods config
|
||||
* @ro_limits: rank order limits
|
||||
* @rnd_offs: differential rank offsets for rank neighbor difference
|
||||
* @mode: DPCC mode (RKISP1_CIF_ISP_DPCC_MODE_*)
|
||||
* @output_mode: Interpolation output mode (RKISP1_CIF_ISP_DPCC_OUTPUT_MODE_*)
|
||||
* @set_use: Methods sets selection (RKISP1_CIF_ISP_DPCC_SET_USE_*)
|
||||
* @methods: Methods sets configuration
|
||||
* @ro_limits: Rank order limits (RKISP1_CIF_ISP_DPCC_RO_LIMITS_*)
|
||||
* @rnd_offs: Differential rank offsets for rank neighbor difference (RKISP1_CIF_ISP_DPCC_RND_OFFS_*)
|
||||
*/
|
||||
struct rkisp1_cif_isp_dpcc_config {
|
||||
__u32 mode;
|
||||
|
||||
@@ -1601,7 +1601,8 @@ struct v4l2_bt_timings {
|
||||
((bt)->width + V4L2_DV_BT_BLANKING_WIDTH(bt))
|
||||
#define V4L2_DV_BT_BLANKING_HEIGHT(bt) \
|
||||
((bt)->vfrontporch + (bt)->vsync + (bt)->vbackporch + \
|
||||
(bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch)
|
||||
((bt)->interlaced ? \
|
||||
((bt)->il_vfrontporch + (bt)->il_vsync + (bt)->il_vbackporch) : 0))
|
||||
#define V4L2_DV_BT_FRAME_HEIGHT(bt) \
|
||||
((bt)->height + V4L2_DV_BT_BLANKING_HEIGHT(bt))
|
||||
|
||||
|
||||
@@ -191,6 +191,33 @@ enum ar_event_types {
|
||||
#define AR_TKN_U32_MODULE_SRC_INSTANCE_ID 208
|
||||
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID 209
|
||||
|
||||
#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID1 210
|
||||
#define AR_TKN_U32_MODULE_DST_IN_PORT_ID1 211
|
||||
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID1 212
|
||||
|
||||
#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID2 213
|
||||
#define AR_TKN_U32_MODULE_DST_IN_PORT_ID2 214
|
||||
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID2 215
|
||||
|
||||
#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID3 216
|
||||
#define AR_TKN_U32_MODULE_DST_IN_PORT_ID3 217
|
||||
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID3 218
|
||||
|
||||
#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID4 219
|
||||
#define AR_TKN_U32_MODULE_DST_IN_PORT_ID4 220
|
||||
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID4 221
|
||||
|
||||
#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID5 222
|
||||
#define AR_TKN_U32_MODULE_DST_IN_PORT_ID5 223
|
||||
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID5 224
|
||||
|
||||
#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID6 225
|
||||
#define AR_TKN_U32_MODULE_DST_IN_PORT_ID6 226
|
||||
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID6 227
|
||||
|
||||
#define AR_TKN_U32_MODULE_SRC_OP_PORT_ID7 228
|
||||
#define AR_TKN_U32_MODULE_DST_IN_PORT_ID7 229
|
||||
#define AR_TKN_U32_MODULE_DST_INSTANCE_ID7 230
|
||||
|
||||
#define AR_TKN_U32_MODULE_HW_IF_IDX 250
|
||||
#define AR_TKN_U32_MODULE_HW_IF_TYPE 251
|
||||
|
||||
@@ -88,6 +88,15 @@
|
||||
#define SOF_TKN_COMP_CPC 406
|
||||
#define SOF_TKN_COMP_IS_PAGES 409
|
||||
#define SOF_TKN_COMP_NUM_AUDIO_FORMATS 410
|
||||
#define SOF_TKN_COMP_NUM_SINK_PINS 411
|
||||
#define SOF_TKN_COMP_NUM_SOURCE_PINS 412
|
||||
/*
|
||||
* The token for sink/source pin binding, it specifies the widget
|
||||
* name that the sink/source pin is connected from/to.
|
||||
*/
|
||||
#define SOF_TKN_COMP_SINK_PIN_BINDING_WNAME 413
|
||||
#define SOF_TKN_COMP_SRC_PIN_BINDING_WNAME 414
|
||||
|
||||
|
||||
/* SSP */
|
||||
#define SOF_TKN_INTEL_SSP_CLKS_CONTROL 500
|
||||
@@ -189,4 +198,9 @@
|
||||
/* COPIER */
|
||||
#define SOF_TKN_INTEL_COPIER_NODE_TYPE 1980
|
||||
|
||||
/* ACP I2S */
|
||||
#define SOF_TKN_AMD_ACPI2S_RATE 1700
|
||||
#define SOF_TKN_AMD_ACPI2S_CH 1701
|
||||
#define SOF_TKN_AMD_ACPI2S_TDM_MODE 1702
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user