linux/drivers/media/usb/stkwebcam/stk-webcam.h
<<
>>
Prefs
   1/*
   2 * stk-webcam.h : Driver for Syntek 1125 USB webcam controller
   3 *
   4 * Copyright (C) 2006 Nicolas VIVIEN
   5 * Copyright 2007-2008 Jaime Velasco Juan <jsagarribay@gmail.com>
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * any later version.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15 * GNU General Public License for more details.
  16 */
  17
  18#ifndef STKWEBCAM_H
  19#define STKWEBCAM_H
  20
  21#include <linux/usb.h>
  22#include <media/v4l2-device.h>
  23#include <media/v4l2-ctrls.h>
  24#include <media/v4l2-common.h>
  25
  26#define DRIVER_VERSION          "v0.0.1"
  27#define DRIVER_VERSION_NUM      0x000001
  28
  29#define MAX_ISO_BUFS            3
  30#define ISO_FRAMES_PER_DESC     16
  31#define ISO_MAX_FRAME_SIZE      3 * 1024
  32#define ISO_BUFFER_SIZE         (ISO_FRAMES_PER_DESC * ISO_MAX_FRAME_SIZE)
  33
  34struct stk_iso_buf {
  35        void *data;
  36        int length;
  37        int read;
  38        struct urb *urb;
  39};
  40
  41/* Streaming IO buffers */
  42struct stk_sio_buffer {
  43        struct v4l2_buffer v4lbuf;
  44        char *buffer;
  45        int mapcount;
  46        struct stk_camera *dev;
  47        struct list_head list;
  48};
  49
  50enum stk_mode {MODE_VGA, MODE_SXGA, MODE_CIF, MODE_QVGA, MODE_QCIF};
  51
  52struct stk_video {
  53        enum stk_mode mode;
  54        __u32 palette;
  55        int hflip;
  56        int vflip;
  57};
  58
  59enum stk_status {
  60        S_PRESENT = 1,
  61        S_INITIALISED = 2,
  62        S_MEMALLOCD = 4,
  63        S_STREAMING = 8,
  64};
  65#define is_present(dev)         ((dev)->status & S_PRESENT)
  66#define is_initialised(dev)     ((dev)->status & S_INITIALISED)
  67#define is_streaming(dev)       ((dev)->status & S_STREAMING)
  68#define is_memallocd(dev)       ((dev)->status & S_MEMALLOCD)
  69#define set_present(dev)        ((dev)->status = S_PRESENT)
  70#define unset_present(dev)      ((dev)->status &= \
  71                                        ~(S_PRESENT|S_INITIALISED|S_STREAMING))
  72#define set_initialised(dev)    ((dev)->status |= S_INITIALISED)
  73#define unset_initialised(dev)  ((dev)->status &= ~S_INITIALISED)
  74#define set_memallocd(dev)      ((dev)->status |= S_MEMALLOCD)
  75#define unset_memallocd(dev)    ((dev)->status &= ~S_MEMALLOCD)
  76#define set_streaming(dev)      ((dev)->status |= S_STREAMING)
  77#define unset_streaming(dev)    ((dev)->status &= ~S_STREAMING)
  78
  79struct regval {
  80        unsigned reg;
  81        unsigned val;
  82};
  83
  84struct stk_camera {
  85        struct v4l2_device v4l2_dev;
  86        struct v4l2_ctrl_handler hdl;
  87        struct video_device vdev;
  88        struct usb_device *udev;
  89        struct usb_interface *interface;
  90        int webcam_model;
  91        struct file *owner;
  92        struct mutex lock;
  93        int first_init;
  94
  95        u8 isoc_ep;
  96
  97        /* Not sure if this is right */
  98        atomic_t urbs_used;
  99
 100        struct stk_video vsettings;
 101
 102        enum stk_status status;
 103
 104        spinlock_t spinlock;
 105        wait_queue_head_t wait_frame;
 106
 107        struct stk_iso_buf *isobufs;
 108
 109        int frame_size;
 110        /* Streaming buffers */
 111        int reading;
 112        unsigned int n_sbufs;
 113        struct stk_sio_buffer *sio_bufs;
 114        struct list_head sio_avail;
 115        struct list_head sio_full;
 116        unsigned sequence;
 117};
 118
 119#define vdev_to_camera(d) container_of(d, struct stk_camera, vdev)
 120
 121int stk_camera_write_reg(struct stk_camera *, u16, u8);
 122int stk_camera_read_reg(struct stk_camera *, u16, u8 *);
 123
 124int stk_sensor_init(struct stk_camera *);
 125int stk_sensor_configure(struct stk_camera *);
 126int stk_sensor_sleep(struct stk_camera *dev);
 127int stk_sensor_wakeup(struct stk_camera *dev);
 128int stk_sensor_set_brightness(struct stk_camera *dev, int br);
 129
 130#endif
 131