forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.9 KiB
121 lines
2.9 KiB
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
|
/* |
|
* stk-webcam.h : Driver for Syntek 1125 USB webcam controller |
|
* |
|
* Copyright (C) 2006 Nicolas VIVIEN |
|
* Copyright 2007-2008 Jaime Velasco Juan <[email protected]> |
|
*/ |
|
|
|
#ifndef STKWEBCAM_H |
|
#define STKWEBCAM_H |
|
|
|
#include <linux/usb.h> |
|
#include <media/v4l2-device.h> |
|
#include <media/v4l2-ctrls.h> |
|
#include <media/v4l2-common.h> |
|
|
|
#define DRIVER_VERSION "v0.0.1" |
|
#define DRIVER_VERSION_NUM 0x000001 |
|
|
|
#define MAX_ISO_BUFS 3 |
|
#define ISO_FRAMES_PER_DESC 16 |
|
#define ISO_MAX_FRAME_SIZE 3 * 1024 |
|
#define ISO_BUFFER_SIZE (ISO_FRAMES_PER_DESC * ISO_MAX_FRAME_SIZE) |
|
|
|
struct stk_iso_buf { |
|
void *data; |
|
int length; |
|
int read; |
|
struct urb *urb; |
|
}; |
|
|
|
/* Streaming IO buffers */ |
|
struct stk_sio_buffer { |
|
struct v4l2_buffer v4lbuf; |
|
char *buffer; |
|
int mapcount; |
|
struct stk_camera *dev; |
|
struct list_head list; |
|
}; |
|
|
|
enum stk_mode {MODE_VGA, MODE_SXGA, MODE_CIF, MODE_QVGA, MODE_QCIF}; |
|
|
|
struct stk_video { |
|
enum stk_mode mode; |
|
__u32 palette; |
|
int hflip; |
|
int vflip; |
|
}; |
|
|
|
enum stk_status { |
|
S_PRESENT = 1, |
|
S_INITIALISED = 2, |
|
S_MEMALLOCD = 4, |
|
S_STREAMING = 8, |
|
}; |
|
#define is_present(dev) ((dev)->status & S_PRESENT) |
|
#define is_initialised(dev) ((dev)->status & S_INITIALISED) |
|
#define is_streaming(dev) ((dev)->status & S_STREAMING) |
|
#define is_memallocd(dev) ((dev)->status & S_MEMALLOCD) |
|
#define set_present(dev) ((dev)->status = S_PRESENT) |
|
#define unset_present(dev) ((dev)->status &= \ |
|
~(S_PRESENT|S_INITIALISED|S_STREAMING)) |
|
#define set_initialised(dev) ((dev)->status |= S_INITIALISED) |
|
#define unset_initialised(dev) ((dev)->status &= ~S_INITIALISED) |
|
#define set_memallocd(dev) ((dev)->status |= S_MEMALLOCD) |
|
#define unset_memallocd(dev) ((dev)->status &= ~S_MEMALLOCD) |
|
#define set_streaming(dev) ((dev)->status |= S_STREAMING) |
|
#define unset_streaming(dev) ((dev)->status &= ~S_STREAMING) |
|
|
|
struct regval { |
|
unsigned reg; |
|
unsigned val; |
|
}; |
|
|
|
struct stk_camera { |
|
struct v4l2_device v4l2_dev; |
|
struct v4l2_ctrl_handler hdl; |
|
struct video_device vdev; |
|
struct usb_device *udev; |
|
struct usb_interface *interface; |
|
int webcam_model; |
|
struct file *owner; |
|
struct mutex lock; |
|
int first_init; |
|
|
|
u8 isoc_ep; |
|
|
|
/* Not sure if this is right */ |
|
atomic_t urbs_used; |
|
|
|
struct stk_video vsettings; |
|
|
|
enum stk_status status; |
|
|
|
spinlock_t spinlock; |
|
wait_queue_head_t wait_frame; |
|
|
|
struct stk_iso_buf *isobufs; |
|
|
|
int frame_size; |
|
/* Streaming buffers */ |
|
int reading; |
|
unsigned int n_sbufs; |
|
struct stk_sio_buffer *sio_bufs; |
|
struct list_head sio_avail; |
|
struct list_head sio_full; |
|
unsigned sequence; |
|
}; |
|
|
|
#define vdev_to_camera(d) container_of(d, struct stk_camera, vdev) |
|
|
|
int stk_camera_write_reg(struct stk_camera *, u16, u8); |
|
int stk_camera_read_reg(struct stk_camera *, u16, u8 *); |
|
|
|
int stk_sensor_init(struct stk_camera *); |
|
int stk_sensor_configure(struct stk_camera *); |
|
int stk_sensor_sleep(struct stk_camera *dev); |
|
int stk_sensor_wakeup(struct stk_camera *dev); |
|
int stk_sensor_set_brightness(struct stk_camera *dev, int br); |
|
|
|
#endif
|
|
|