![Greg Kroah-Hartman](/assets/img/avatar_default.png)
Now that the SPDX tag is in all greybus files, that identifies the license in a specific and legally-defined manner. So the extra GPL text wording can be removed as it is no longer needed at all. This is done on a quest to remove the 700+ different ways that files in the kernel describe the GPL license text. And there's unneeded stuff like the address (sometimes incorrect) for the FSF which is never needed. No copyright headers or other non-license-description text was removed. Cc: Vaibhav Hiremath <hvaibhav.linux@gmail.com> Reviewed-by: Alex Elder <elder@linaro.org> Acked-by: Vaibhav Agarwal <vaibhav.sr@gmail.com> Acked-by: David Lin <dtwlin@gmail.com> Acked-by: Johan Hovold <johan@kernel.org> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Acked-by: Mark Greer <mgreer@animalcreek.com> Acked-by: Rui Miguel Silva <rmfrfs@gmail.com> Acked-by: "Bryan O'Donoghue" <pure.logic@nexus-software.ie> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
127 lines
5.2 KiB
C
127 lines
5.2 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Greybus Camera protocol driver.
|
|
*
|
|
* Copyright 2015 Google Inc.
|
|
*/
|
|
#ifndef __GB_CAMERA_H
|
|
#define __GB_CAMERA_H
|
|
|
|
#include <linux/v4l2-mediabus.h>
|
|
|
|
/* Input flags need to be set from the caller */
|
|
#define GB_CAMERA_IN_FLAG_TEST (1 << 0)
|
|
/* Output flags returned */
|
|
#define GB_CAMERA_OUT_FLAG_ADJUSTED (1 << 0)
|
|
|
|
/**
|
|
* struct gb_camera_stream - Represents greybus camera stream.
|
|
* @width: Stream width in pixels.
|
|
* @height: Stream height in pixels.
|
|
* @pixel_code: Media bus pixel code.
|
|
* @vc: MIPI CSI virtual channel.
|
|
* @dt: MIPI CSI data types. Most formats use a single data type, in which case
|
|
* the second element will be ignored.
|
|
* @max_size: Maximum size of a frame in bytes. The camera module guarantees
|
|
* that all data between the Frame Start and Frame End packet for
|
|
* the associated virtual channel and data type(s) will not exceed
|
|
* this size.
|
|
*/
|
|
struct gb_camera_stream {
|
|
unsigned int width;
|
|
unsigned int height;
|
|
enum v4l2_mbus_pixelcode pixel_code;
|
|
unsigned int vc;
|
|
unsigned int dt[2];
|
|
unsigned int max_size;
|
|
};
|
|
|
|
/**
|
|
* struct gb_camera_csi_params - CSI configuration parameters
|
|
* @num_lanes: number of CSI data lanes
|
|
* @clk_freq: CSI clock frequency in Hz
|
|
*/
|
|
struct gb_camera_csi_params {
|
|
unsigned int num_lanes;
|
|
unsigned int clk_freq;
|
|
};
|
|
|
|
/**
|
|
* struct gb_camera_ops - Greybus camera operations, used by the Greybus camera
|
|
* driver to expose operations to the host camera driver.
|
|
* @capabilities: Retrieve camera capabilities and store them in the buffer
|
|
* 'buf' capabilities. The buffer maximum size is specified by
|
|
* the caller in the 'size' parameter, and the effective
|
|
* capabilities size is returned from the function. If the buffer
|
|
* size is too small to hold the capabilities an error is
|
|
* returned and the buffer is left untouched.
|
|
*
|
|
* @configure_streams: Negotiate configuration and prepare the module for video
|
|
* capture. The caller specifies the number of streams it
|
|
* requests in the 'nstreams' argument and the associated
|
|
* streams configurations in the 'streams' argument. The
|
|
* GB_CAMERA_IN_FLAG_TEST 'flag' can be set to test a
|
|
* configuration without applying it, otherwise the
|
|
* configuration is applied by the module. The module can
|
|
* decide to modify the requested configuration, including
|
|
* using a different number of streams. In that case the
|
|
* modified configuration won't be applied, the
|
|
* GB_CAMERA_OUT_FLAG_ADJUSTED 'flag' will be set upon
|
|
* return, and the modified configuration and number of
|
|
* streams stored in 'streams' and 'array'. The module
|
|
* returns its CSI-2 bus parameters in the 'csi_params'
|
|
* structure in all cases.
|
|
*
|
|
* @capture: Submit a capture request. The supplied 'request_id' must be unique
|
|
* and higher than the IDs of all the previously submitted requests.
|
|
* The 'streams' argument specifies which streams are affected by the
|
|
* request in the form of a bitmask, with bits corresponding to the
|
|
* configured streams indexes. If the request contains settings, the
|
|
* 'settings' argument points to the settings buffer and its size is
|
|
* specified by the 'settings_size' argument. Otherwise the 'settings'
|
|
* argument should be set to NULL and 'settings_size' to 0.
|
|
*
|
|
* @flush: Flush the capture requests queue. Return the ID of the last request
|
|
* that will processed by the device before it stops transmitting video
|
|
* frames. All queued capture requests with IDs higher than the returned
|
|
* ID will be dropped without being processed.
|
|
*/
|
|
struct gb_camera_ops {
|
|
ssize_t (*capabilities)(void *priv, char *buf, size_t len);
|
|
int (*configure_streams)(void *priv, unsigned int *nstreams,
|
|
unsigned int *flags, struct gb_camera_stream *streams,
|
|
struct gb_camera_csi_params *csi_params);
|
|
int (*capture)(void *priv, u32 request_id,
|
|
unsigned int streams, unsigned int num_frames,
|
|
size_t settings_size, const void *settings);
|
|
int (*flush)(void *priv, u32 *request_id);
|
|
};
|
|
|
|
/**
|
|
* struct gb_camera_module - Represents greybus camera module.
|
|
* @priv: Module private data, passed to all camera operations.
|
|
* @ops: Greybus camera operation callbacks.
|
|
* @interface_id: Interface id of the module.
|
|
* @refcount: Reference counting object.
|
|
* @release: Module release function.
|
|
* @list: List entry in the camera modules list.
|
|
*/
|
|
struct gb_camera_module {
|
|
void *priv;
|
|
const struct gb_camera_ops *ops;
|
|
|
|
unsigned int interface_id;
|
|
struct kref refcount;
|
|
void (*release)(struct kref *kref);
|
|
struct list_head list; /* Global list */
|
|
};
|
|
|
|
#define gb_camera_call(f, op, args...) \
|
|
(!(f) ? -ENODEV : (((f)->ops->op) ? \
|
|
(f)->ops->op((f)->priv, ##args) : -ENOIOCTLCMD))
|
|
|
|
int gb_camera_register(struct gb_camera_module *module);
|
|
int gb_camera_unregister(struct gb_camera_module *module);
|
|
|
|
#endif /* __GB_CAMERA_H */
|