linux/drivers/media/dvb-frontends/m88ds3103.h
<<
>>
Prefs
   1/*
   2 * Montage Technology M88DS3103/M88RS6000 demodulator driver
   3 *
   4 * Copyright (C) 2013 Antti Palosaari <crope@iki.fi>
   5 *
   6 *    This program is free software; you can redistribute it and/or modify
   7 *    it under the terms of the GNU General Public License as published by
   8 *    the Free Software Foundation; either version 2 of the License, or
   9 *    (at your option) any later version.
  10 *
  11 *    This program is distributed in the hope that it will be useful,
  12 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *    GNU General Public License for more details.
  15 */
  16
  17#ifndef M88DS3103_H
  18#define M88DS3103_H
  19
  20#include <linux/dvb/frontend.h>
  21
  22/*
  23 * I2C address
  24 * 0x68,
  25 */
  26
  27/**
  28 * struct m88ds3103_platform_data - Platform data for the m88ds3103 driver
  29 * @clk: Clock frequency.
  30 * @i2c_wr_max: Max bytes I2C adapter can write at once.
  31 * @ts_mode: TS mode.
  32 * @ts_clk: TS clock (KHz).
  33 * @ts_clk_pol: TS clk polarity. 1-active at falling edge; 0-active at rising
  34 *  edge.
  35 * @spec_inv: Input spectrum inversion.
  36 * @agc: AGC configuration.
  37 * @agc_inv: AGC polarity.
  38 * @clk_out: Clock output.
  39 * @envelope_mode: DiSEqC envelope mode.
  40 * @lnb_hv_pol: LNB H/V pin polarity. 0: pin high set to VOLTAGE_18, pin low to
  41 *  set VOLTAGE_13. 1: pin high set to VOLTAGE_13, pin low to set VOLTAGE_18.
  42 * @lnb_en_pol: LNB enable pin polarity. 0: pin high to disable, pin low to
  43 *  enable. 1: pin high to enable, pin low to disable.
  44 * @get_dvb_frontend: Get DVB frontend.
  45 * @get_i2c_adapter: Get I2C adapter.
  46 */
  47
  48struct m88ds3103_platform_data {
  49        u32 clk;
  50        u16 i2c_wr_max;
  51#define M88DS3103_TS_SERIAL             0 /* TS output pin D0, normal */
  52#define M88DS3103_TS_SERIAL_D7          1 /* TS output pin D7 */
  53#define M88DS3103_TS_PARALLEL           2 /* TS Parallel mode */
  54#define M88DS3103_TS_CI                 3 /* TS CI Mode */
  55        u8 ts_mode:2;
  56        u32 ts_clk;
  57        u8 ts_clk_pol:1;
  58        u8 spec_inv:1;
  59        u8 agc;
  60        u8 agc_inv:1;
  61#define M88DS3103_CLOCK_OUT_DISABLED        0
  62#define M88DS3103_CLOCK_OUT_ENABLED         1
  63#define M88DS3103_CLOCK_OUT_ENABLED_DIV2    2
  64        u8 clk_out:2;
  65        u8 envelope_mode:1;
  66        u8 lnb_hv_pol:1;
  67        u8 lnb_en_pol:1;
  68
  69        struct dvb_frontend* (*get_dvb_frontend)(struct i2c_client *);
  70        struct i2c_adapter* (*get_i2c_adapter)(struct i2c_client *);
  71
  72/* private: For legacy media attach wrapper. Do not set value. */
  73        u8 attach_in_use:1;
  74};
  75
  76/*
  77 * Do not add new m88ds3103_attach() users! Use I2C bindings instead.
  78 */
  79struct m88ds3103_config {
  80        /*
  81         * I2C address
  82         * Default: none, must set
  83         * 0x68, ...
  84         */
  85        u8 i2c_addr;
  86
  87        /*
  88         * clock
  89         * Default: none, must set
  90         * 27000000
  91         */
  92        u32 clock;
  93
  94        /*
  95         * max bytes I2C provider is asked to write at once
  96         * Default: none, must set
  97         * 33, 65, ...
  98         */
  99        u16 i2c_wr_max;
 100
 101        /*
 102         * TS output mode
 103         * Default: M88DS3103_TS_SERIAL
 104         */
 105#define M88DS3103_TS_SERIAL             0 /* TS output pin D0, normal */
 106#define M88DS3103_TS_SERIAL_D7          1 /* TS output pin D7 */
 107#define M88DS3103_TS_PARALLEL           2 /* TS Parallel mode */
 108#define M88DS3103_TS_CI                 3 /* TS CI Mode */
 109        u8 ts_mode;
 110
 111        /*
 112         * TS clk in KHz
 113         * Default: 0.
 114         */
 115        u32 ts_clk;
 116
 117        /*
 118         * TS clk polarity.
 119         * Default: 0. 1-active at falling edge; 0-active at rising edge.
 120         */
 121        u8 ts_clk_pol:1;
 122
 123        /*
 124         * spectrum inversion
 125         * Default: 0
 126         */
 127        u8 spec_inv:1;
 128
 129        /*
 130         * AGC polarity
 131         * Default: 0
 132         */
 133        u8 agc_inv:1;
 134
 135        /*
 136         * clock output
 137         * Default: M88DS3103_CLOCK_OUT_DISABLED
 138         */
 139#define M88DS3103_CLOCK_OUT_DISABLED        0
 140#define M88DS3103_CLOCK_OUT_ENABLED         1
 141#define M88DS3103_CLOCK_OUT_ENABLED_DIV2    2
 142        u8 clock_out;
 143
 144        /*
 145         * DiSEqC envelope mode
 146         * Default: 0
 147         */
 148        u8 envelope_mode:1;
 149
 150        /*
 151         * AGC configuration
 152         * Default: none, must set
 153         */
 154        u8 agc;
 155
 156        /*
 157         * LNB H/V pin polarity
 158         * Default: 0.
 159         * 1: pin high set to VOLTAGE_13, pin low to set VOLTAGE_18.
 160         * 0: pin high set to VOLTAGE_18, pin low to set VOLTAGE_13.
 161         */
 162        u8 lnb_hv_pol:1;
 163
 164        /*
 165         * LNB enable pin polarity
 166         * Default: 0.
 167         * 1: pin high to enable, pin low to disable.
 168         * 0: pin high to disable, pin low to enable.
 169         */
 170        u8 lnb_en_pol:1;
 171};
 172
 173#if defined(CONFIG_DVB_M88DS3103) || \
 174                (defined(CONFIG_DVB_M88DS3103_MODULE) && defined(MODULE))
 175extern struct dvb_frontend *m88ds3103_attach(
 176                const struct m88ds3103_config *config,
 177                struct i2c_adapter *i2c,
 178                struct i2c_adapter **tuner_i2c);
 179extern int m88ds3103_get_agc_pwm(struct dvb_frontend *fe, u8 *_agc_pwm);
 180#else
 181static inline struct dvb_frontend *m88ds3103_attach(
 182                const struct m88ds3103_config *config,
 183                struct i2c_adapter *i2c,
 184                struct i2c_adapter **tuner_i2c)
 185{
 186        pr_warn("%s: driver disabled by Kconfig\n", __func__);
 187        return NULL;
 188}
 189#define m88ds3103_get_agc_pwm NULL
 190#endif
 191
 192#endif
 193