linux/drivers/media/pci/cx18/cx18-cards.h
<<
>>
Prefs
   1/*
   2 *  cx18 functions to query card hardware
   3 *
   4 *  Derived from ivtv-cards.c
   5 *
   6 *  Copyright (C) 2007  Hans Verkuil <hverkuil@xs4all.nl>
   7 *  Copyright (C) 2008  Andy Walls <awalls@md.metrocast.net>
   8 *
   9 *  This program is free software; you can redistribute it and/or modify
  10 *  it under the terms of the GNU General Public License as published by
  11 *  the Free Software Foundation; either version 2 of the License, or
  12 *  (at your option) any later version.
  13 *
  14 *  This program is distributed in the hope that it will be useful,
  15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17 *  GNU General Public License for more details.
  18 */
  19
  20/* hardware flags */
  21#define CX18_HW_TUNER                   (1 << 0)
  22#define CX18_HW_TVEEPROM                (1 << 1)
  23#define CX18_HW_CS5345                  (1 << 2)
  24#define CX18_HW_DVB                     (1 << 3)
  25#define CX18_HW_418_AV                  (1 << 4)
  26#define CX18_HW_GPIO_MUX                (1 << 5)
  27#define CX18_HW_GPIO_RESET_CTRL         (1 << 6)
  28#define CX18_HW_Z8F0811_IR_HAUP         (1 << 7)
  29
  30/* video inputs */
  31#define CX18_CARD_INPUT_VID_TUNER       1
  32#define CX18_CARD_INPUT_SVIDEO1         2
  33#define CX18_CARD_INPUT_SVIDEO2         3
  34#define CX18_CARD_INPUT_COMPOSITE1      4
  35#define CX18_CARD_INPUT_COMPOSITE2      5
  36#define CX18_CARD_INPUT_COMPONENT1      6
  37
  38/* audio inputs */
  39#define CX18_CARD_INPUT_AUD_TUNER       1
  40#define CX18_CARD_INPUT_LINE_IN1        2
  41#define CX18_CARD_INPUT_LINE_IN2        3
  42
  43#define CX18_CARD_MAX_VIDEO_INPUTS 6
  44#define CX18_CARD_MAX_AUDIO_INPUTS 3
  45#define CX18_CARD_MAX_TUNERS       2
  46
  47/* V4L2 capability aliases */
  48#define CX18_CAP_ENCODER (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | \
  49                          V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | \
  50                          V4L2_CAP_STREAMING | V4L2_CAP_VBI_CAPTURE | \
  51                          V4L2_CAP_SLICED_VBI_CAPTURE)
  52
  53struct cx18_card_video_input {
  54        u8  video_type;         /* video input type */
  55        u8  audio_index;        /* index in cx18_card_audio_input array */
  56        u32 video_input;        /* hardware video input */
  57};
  58
  59struct cx18_card_audio_input {
  60        u8  audio_type;         /* audio input type */
  61        u32 audio_input;        /* hardware audio input */
  62        u16 muxer_input;        /* hardware muxer input for boards with a
  63                                   multiplexer chip */
  64};
  65
  66struct cx18_card_pci_info {
  67        u16 device;
  68        u16 subsystem_vendor;
  69        u16 subsystem_device;
  70};
  71
  72/* GPIO definitions */
  73
  74/* The mask is the set of bits used by the operation */
  75
  76struct cx18_gpio_init { /* set initial GPIO DIR and OUT values */
  77        u32 direction;  /* DIR setting. Leave to 0 if no init is needed */
  78        u32 initial_value;
  79};
  80
  81struct cx18_gpio_i2c_slave_reset {
  82        u32 active_lo_mask; /* GPIO outputs that reset i2c chips when low */
  83        u32 active_hi_mask; /* GPIO outputs that reset i2c chips when high */
  84        int msecs_asserted; /* time period reset must remain asserted */
  85        int msecs_recovery; /* time after deassert for chips to be ready */
  86        u32 ir_reset_mask;  /* GPIO to reset the Zilog Z8F0811 IR contoller */
  87};
  88
  89struct cx18_gpio_audio_input {  /* select tuner/line in input */
  90        u32 mask;               /* leave to 0 if not supported */
  91        u32 tuner;
  92        u32 linein;
  93        u32 radio;
  94};
  95
  96struct cx18_card_tuner {
  97        v4l2_std_id std;        /* standard for which the tuner is suitable */
  98        int         tuner;      /* tuner ID (from tuner.h) */
  99};
 100
 101struct cx18_card_tuner_i2c {
 102        unsigned short radio[2];/* radio tuner i2c address to probe */
 103        unsigned short demod[3];/* demodulator i2c address to probe */
 104        unsigned short tv[4];   /* tv tuner i2c addresses to probe */
 105};
 106
 107struct cx18_ddr {               /* DDR config data */
 108        u32 chip_config;
 109        u32 refresh;
 110        u32 timing1;
 111        u32 timing2;
 112        u32 tune_lane;
 113        u32 initial_emrs;
 114};
 115
 116/* for card information/parameters */
 117struct cx18_card {
 118        int type;
 119        char *name;
 120        char *comment;
 121        u32 v4l2_capabilities;
 122        u32 hw_audio_ctrl;      /* hardware used for the V4L2 controls (only
 123                                   1 dev allowed currently) */
 124        u32 hw_muxer;           /* hardware used to multiplex audio input */
 125        u32 hw_all;             /* all hardware used by the board */
 126        struct cx18_card_video_input video_inputs[CX18_CARD_MAX_VIDEO_INPUTS];
 127        struct cx18_card_audio_input audio_inputs[CX18_CARD_MAX_AUDIO_INPUTS];
 128        struct cx18_card_audio_input radio_input;
 129
 130        /* GPIO card-specific settings */
 131        u8 xceive_pin;          /* XCeive tuner GPIO reset pin */
 132        struct cx18_gpio_init            gpio_init;
 133        struct cx18_gpio_i2c_slave_reset gpio_i2c_slave_reset;
 134        struct cx18_gpio_audio_input    gpio_audio_input;
 135
 136        struct cx18_card_tuner tuners[CX18_CARD_MAX_TUNERS];
 137        struct cx18_card_tuner_i2c *i2c;
 138
 139        struct cx18_ddr ddr;
 140
 141        /* list of device and subsystem vendor/devices that
 142           correspond to this card type. */
 143        const struct cx18_card_pci_info *pci_list;
 144};
 145
 146int cx18_get_input(struct cx18 *cx, u16 index, struct v4l2_input *input);
 147int cx18_get_audio_input(struct cx18 *cx, u16 index, struct v4l2_audio *input);
 148const struct cx18_card *cx18_get_card(u16 index);
 149