Linux Audio

Check our new training course

Loading...
v4.6
 
 1/*
 2 * uvc_configfs.h
 3 *
 4 * Configfs support for the uvc function.
 5 *
 6 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
 7 *		http://www.samsung.com
 8 *
 9 * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
14 */
15#ifndef UVC_CONFIGFS_H
16#define UVC_CONFIGFS_H
17
18struct f_uvc_opts;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
20int uvcg_attach_configfs(struct f_uvc_opts *opts);
21
22#endif /* UVC_CONFIGFS_H */
v6.2
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * uvc_configfs.h
  4 *
  5 * Configfs support for the uvc function.
  6 *
  7 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
  8 *		http://www.samsung.com
  9 *
 10 * Author: Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>
 
 
 
 
 11 */
 12#ifndef UVC_CONFIGFS_H
 13#define UVC_CONFIGFS_H
 14
 15#include <linux/configfs.h>
 16
 17#include "u_uvc.h"
 18
 19static inline struct f_uvc_opts *to_f_uvc_opts(struct config_item *item)
 20{
 21	return container_of(to_config_group(item), struct f_uvc_opts,
 22			    func_inst.group);
 23}
 24
 25#define UVCG_STREAMING_CONTROL_SIZE	1
 26
 27DECLARE_UVC_HEADER_DESCRIPTOR(1);
 28
 29struct uvcg_control_header {
 30	struct config_item		item;
 31	struct UVC_HEADER_DESCRIPTOR(1)	desc;
 32	unsigned			linked;
 33};
 34
 35static inline struct uvcg_control_header *to_uvcg_control_header(struct config_item *item)
 36{
 37	return container_of(item, struct uvcg_control_header, item);
 38}
 39
 40enum uvcg_format_type {
 41	UVCG_UNCOMPRESSED = 0,
 42	UVCG_MJPEG,
 43};
 44
 45struct uvcg_format {
 46	struct config_group	group;
 47	enum uvcg_format_type	type;
 48	unsigned		linked;
 49	struct list_head	frames;
 50	unsigned		num_frames;
 51	__u8			bmaControls[UVCG_STREAMING_CONTROL_SIZE];
 52};
 53
 54struct uvcg_format_ptr {
 55	struct uvcg_format	*fmt;
 56	struct list_head	entry;
 57};
 58
 59static inline struct uvcg_format *to_uvcg_format(struct config_item *item)
 60{
 61	return container_of(to_config_group(item), struct uvcg_format, group);
 62}
 63
 64struct uvcg_streaming_header {
 65	struct config_item				item;
 66	struct uvc_input_header_descriptor		desc;
 67	unsigned					linked;
 68	struct list_head				formats;
 69	unsigned					num_fmt;
 70};
 71
 72static inline struct uvcg_streaming_header *to_uvcg_streaming_header(struct config_item *item)
 73{
 74	return container_of(item, struct uvcg_streaming_header, item);
 75}
 76
 77struct uvcg_frame_ptr {
 78	struct uvcg_frame	*frm;
 79	struct list_head	entry;
 80};
 81
 82struct uvcg_frame {
 83	struct config_item	item;
 84	enum uvcg_format_type	fmt_type;
 85	struct {
 86		u8	b_length;
 87		u8	b_descriptor_type;
 88		u8	b_descriptor_subtype;
 89		u8	b_frame_index;
 90		u8	bm_capabilities;
 91		u16	w_width;
 92		u16	w_height;
 93		u32	dw_min_bit_rate;
 94		u32	dw_max_bit_rate;
 95		u32	dw_max_video_frame_buffer_size;
 96		u32	dw_default_frame_interval;
 97		u8	b_frame_interval_type;
 98	} __attribute__((packed)) frame;
 99	u32 *dw_frame_interval;
100};
101
102static inline struct uvcg_frame *to_uvcg_frame(struct config_item *item)
103{
104	return container_of(item, struct uvcg_frame, item);
105}
106
107/* -----------------------------------------------------------------------------
108 * streaming/uncompressed/<NAME>
109 */
110
111struct uvcg_uncompressed {
112	struct uvcg_format		fmt;
113	struct uvc_format_uncompressed	desc;
114};
115
116static inline struct uvcg_uncompressed *to_uvcg_uncompressed(struct config_item *item)
117{
118	return container_of(to_uvcg_format(item), struct uvcg_uncompressed, fmt);
119}
120
121/* -----------------------------------------------------------------------------
122 * streaming/mjpeg/<NAME>
123 */
124
125struct uvcg_mjpeg {
126	struct uvcg_format		fmt;
127	struct uvc_format_mjpeg		desc;
128};
129
130static inline struct uvcg_mjpeg *to_uvcg_mjpeg(struct config_item *item)
131{
132	return container_of(to_uvcg_format(item), struct uvcg_mjpeg, fmt);
133}
134
135int uvcg_attach_configfs(struct f_uvc_opts *opts);
136
137#endif /* UVC_CONFIGFS_H */