cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pvrusb2-hdw.c (141598B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 *
      4 *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
      5 */
      6
      7#include <linux/errno.h>
      8#include <linux/string.h>
      9#include <linux/slab.h>
     10#include <linux/module.h>
     11#include <linux/firmware.h>
     12#include <linux/videodev2.h>
     13#include <media/v4l2-common.h>
     14#include <media/tuner.h>
     15#include "pvrusb2.h"
     16#include "pvrusb2-std.h"
     17#include "pvrusb2-util.h"
     18#include "pvrusb2-hdw.h"
     19#include "pvrusb2-i2c-core.h"
     20#include "pvrusb2-eeprom.h"
     21#include "pvrusb2-hdw-internal.h"
     22#include "pvrusb2-encoder.h"
     23#include "pvrusb2-debug.h"
     24#include "pvrusb2-fx2-cmd.h"
     25#include "pvrusb2-wm8775.h"
     26#include "pvrusb2-video-v4l.h"
     27#include "pvrusb2-cx2584x-v4l.h"
     28#include "pvrusb2-cs53l32a.h"
     29#include "pvrusb2-audio.h"
     30
     31#define TV_MIN_FREQ     55250000L
     32#define TV_MAX_FREQ    850000000L
     33
     34/* This defines a minimum interval that the decoder must remain quiet
     35   before we are allowed to start it running. */
     36#define TIME_MSEC_DECODER_WAIT 50
     37
     38/* This defines a minimum interval that the decoder must be allowed to run
     39   before we can safely begin using its streaming output. */
     40#define TIME_MSEC_DECODER_STABILIZATION_WAIT 300
     41
     42/* This defines a minimum interval that the encoder must remain quiet
     43   before we are allowed to configure it. */
     44#define TIME_MSEC_ENCODER_WAIT 50
     45
     46/* This defines the minimum interval that the encoder must successfully run
     47   before we consider that the encoder has run at least once since its
     48   firmware has been loaded.  This measurement is in important for cases
     49   where we can't do something until we know that the encoder has been run
     50   at least once. */
     51#define TIME_MSEC_ENCODER_OK 250
     52
     53static struct pvr2_hdw *unit_pointers[PVR_NUM] = {[ 0 ... PVR_NUM-1 ] = NULL};
     54static DEFINE_MUTEX(pvr2_unit_mtx);
     55
     56static int ctlchg;
     57static int procreload;
     58static int tuner[PVR_NUM] = { [0 ... PVR_NUM-1] = -1 };
     59static int tolerance[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
     60static int video_std[PVR_NUM] = { [0 ... PVR_NUM-1] = 0 };
     61static int init_pause_msec;
     62
     63module_param(ctlchg, int, S_IRUGO|S_IWUSR);
     64MODULE_PARM_DESC(ctlchg, "0=optimize ctl change 1=always accept new ctl value");
     65module_param(init_pause_msec, int, S_IRUGO|S_IWUSR);
     66MODULE_PARM_DESC(init_pause_msec, "hardware initialization settling delay");
     67module_param(procreload, int, S_IRUGO|S_IWUSR);
     68MODULE_PARM_DESC(procreload,
     69		 "Attempt init failure recovery with firmware reload");
     70module_param_array(tuner,    int, NULL, 0444);
     71MODULE_PARM_DESC(tuner,"specify installed tuner type");
     72module_param_array(video_std,    int, NULL, 0444);
     73MODULE_PARM_DESC(video_std,"specify initial video standard");
     74module_param_array(tolerance,    int, NULL, 0444);
     75MODULE_PARM_DESC(tolerance,"specify stream error tolerance");
     76
     77/* US Broadcast channel 3 (61.25 MHz), to help with testing */
     78static int default_tv_freq    = 61250000L;
     79/* 104.3 MHz, a usable FM station for my area */
     80static int default_radio_freq = 104300000L;
     81
     82module_param_named(tv_freq, default_tv_freq, int, 0444);
     83MODULE_PARM_DESC(tv_freq, "specify initial television frequency");
     84module_param_named(radio_freq, default_radio_freq, int, 0444);
     85MODULE_PARM_DESC(radio_freq, "specify initial radio frequency");
     86
     87#define PVR2_CTL_WRITE_ENDPOINT  0x01
     88#define PVR2_CTL_READ_ENDPOINT   0x81
     89
     90#define PVR2_GPIO_IN 0x9008
     91#define PVR2_GPIO_OUT 0x900c
     92#define PVR2_GPIO_DIR 0x9020
     93
     94#define trace_firmware(...) pvr2_trace(PVR2_TRACE_FIRMWARE,__VA_ARGS__)
     95
     96#define PVR2_FIRMWARE_ENDPOINT   0x02
     97
     98/* size of a firmware chunk */
     99#define FIRMWARE_CHUNK_SIZE 0x2000
    100
    101typedef void (*pvr2_subdev_update_func)(struct pvr2_hdw *,
    102					struct v4l2_subdev *);
    103
    104static const pvr2_subdev_update_func pvr2_module_update_functions[] = {
    105	[PVR2_CLIENT_ID_WM8775] = pvr2_wm8775_subdev_update,
    106	[PVR2_CLIENT_ID_SAA7115] = pvr2_saa7115_subdev_update,
    107	[PVR2_CLIENT_ID_MSP3400] = pvr2_msp3400_subdev_update,
    108	[PVR2_CLIENT_ID_CX25840] = pvr2_cx25840_subdev_update,
    109	[PVR2_CLIENT_ID_CS53L32A] = pvr2_cs53l32a_subdev_update,
    110};
    111
    112static const char *module_names[] = {
    113	[PVR2_CLIENT_ID_MSP3400] = "msp3400",
    114	[PVR2_CLIENT_ID_CX25840] = "cx25840",
    115	[PVR2_CLIENT_ID_SAA7115] = "saa7115",
    116	[PVR2_CLIENT_ID_TUNER] = "tuner",
    117	[PVR2_CLIENT_ID_DEMOD] = "tuner",
    118	[PVR2_CLIENT_ID_CS53L32A] = "cs53l32a",
    119	[PVR2_CLIENT_ID_WM8775] = "wm8775",
    120};
    121
    122
    123static const unsigned char *module_i2c_addresses[] = {
    124	[PVR2_CLIENT_ID_TUNER] = "\x60\x61\x62\x63",
    125	[PVR2_CLIENT_ID_DEMOD] = "\x43",
    126	[PVR2_CLIENT_ID_MSP3400] = "\x40",
    127	[PVR2_CLIENT_ID_SAA7115] = "\x21",
    128	[PVR2_CLIENT_ID_WM8775] = "\x1b",
    129	[PVR2_CLIENT_ID_CX25840] = "\x44",
    130	[PVR2_CLIENT_ID_CS53L32A] = "\x11",
    131};
    132
    133
    134static const char *ir_scheme_names[] = {
    135	[PVR2_IR_SCHEME_NONE] = "none",
    136	[PVR2_IR_SCHEME_29XXX] = "29xxx",
    137	[PVR2_IR_SCHEME_24XXX] = "24xxx (29xxx emulation)",
    138	[PVR2_IR_SCHEME_24XXX_MCE] = "24xxx (MCE device)",
    139	[PVR2_IR_SCHEME_ZILOG] = "Zilog",
    140};
    141
    142
    143/* Define the list of additional controls we'll dynamically construct based
    144   on query of the cx2341x module. */
    145struct pvr2_mpeg_ids {
    146	const char *strid;
    147	int id;
    148};
    149static const struct pvr2_mpeg_ids mpeg_ids[] = {
    150	{
    151		.strid = "audio_layer",
    152		.id = V4L2_CID_MPEG_AUDIO_ENCODING,
    153	},{
    154		.strid = "audio_bitrate",
    155		.id = V4L2_CID_MPEG_AUDIO_L2_BITRATE,
    156	},{
    157		/* Already using audio_mode elsewhere :-( */
    158		.strid = "mpeg_audio_mode",
    159		.id = V4L2_CID_MPEG_AUDIO_MODE,
    160	},{
    161		.strid = "mpeg_audio_mode_extension",
    162		.id = V4L2_CID_MPEG_AUDIO_MODE_EXTENSION,
    163	},{
    164		.strid = "audio_emphasis",
    165		.id = V4L2_CID_MPEG_AUDIO_EMPHASIS,
    166	},{
    167		.strid = "audio_crc",
    168		.id = V4L2_CID_MPEG_AUDIO_CRC,
    169	},{
    170		.strid = "video_aspect",
    171		.id = V4L2_CID_MPEG_VIDEO_ASPECT,
    172	},{
    173		.strid = "video_b_frames",
    174		.id = V4L2_CID_MPEG_VIDEO_B_FRAMES,
    175	},{
    176		.strid = "video_gop_size",
    177		.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE,
    178	},{
    179		.strid = "video_gop_closure",
    180		.id = V4L2_CID_MPEG_VIDEO_GOP_CLOSURE,
    181	},{
    182		.strid = "video_bitrate_mode",
    183		.id = V4L2_CID_MPEG_VIDEO_BITRATE_MODE,
    184	},{
    185		.strid = "video_bitrate",
    186		.id = V4L2_CID_MPEG_VIDEO_BITRATE,
    187	},{
    188		.strid = "video_bitrate_peak",
    189		.id = V4L2_CID_MPEG_VIDEO_BITRATE_PEAK,
    190	},{
    191		.strid = "video_temporal_decimation",
    192		.id = V4L2_CID_MPEG_VIDEO_TEMPORAL_DECIMATION,
    193	},{
    194		.strid = "stream_type",
    195		.id = V4L2_CID_MPEG_STREAM_TYPE,
    196	},{
    197		.strid = "video_spatial_filter_mode",
    198		.id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER_MODE,
    199	},{
    200		.strid = "video_spatial_filter",
    201		.id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
    202	},{
    203		.strid = "video_luma_spatial_filter_type",
    204		.id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_SPATIAL_FILTER_TYPE,
    205	},{
    206		.strid = "video_chroma_spatial_filter_type",
    207		.id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_SPATIAL_FILTER_TYPE,
    208	},{
    209		.strid = "video_temporal_filter_mode",
    210		.id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER_MODE,
    211	},{
    212		.strid = "video_temporal_filter",
    213		.id = V4L2_CID_MPEG_CX2341X_VIDEO_TEMPORAL_FILTER,
    214	},{
    215		.strid = "video_median_filter_type",
    216		.id = V4L2_CID_MPEG_CX2341X_VIDEO_MEDIAN_FILTER_TYPE,
    217	},{
    218		.strid = "video_luma_median_filter_top",
    219		.id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_TOP,
    220	},{
    221		.strid = "video_luma_median_filter_bottom",
    222		.id = V4L2_CID_MPEG_CX2341X_VIDEO_LUMA_MEDIAN_FILTER_BOTTOM,
    223	},{
    224		.strid = "video_chroma_median_filter_top",
    225		.id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_TOP,
    226	},{
    227		.strid = "video_chroma_median_filter_bottom",
    228		.id = V4L2_CID_MPEG_CX2341X_VIDEO_CHROMA_MEDIAN_FILTER_BOTTOM,
    229	}
    230};
    231#define MPEGDEF_COUNT ARRAY_SIZE(mpeg_ids)
    232
    233
    234static const char *control_values_srate[] = {
    235	[V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100]   = "44.1 kHz",
    236	[V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000]   = "48 kHz",
    237	[V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000]   = "32 kHz",
    238};
    239
    240
    241
    242static const char *control_values_input[] = {
    243	[PVR2_CVAL_INPUT_TV]        = "television",  /*xawtv needs this name*/
    244	[PVR2_CVAL_INPUT_DTV]       = "dtv",
    245	[PVR2_CVAL_INPUT_RADIO]     = "radio",
    246	[PVR2_CVAL_INPUT_SVIDEO]    = "s-video",
    247	[PVR2_CVAL_INPUT_COMPOSITE] = "composite",
    248};
    249
    250
    251static const char *control_values_audiomode[] = {
    252	[V4L2_TUNER_MODE_MONO]   = "Mono",
    253	[V4L2_TUNER_MODE_STEREO] = "Stereo",
    254	[V4L2_TUNER_MODE_LANG1]  = "Lang1",
    255	[V4L2_TUNER_MODE_LANG2]  = "Lang2",
    256	[V4L2_TUNER_MODE_LANG1_LANG2] = "Lang1+Lang2",
    257};
    258
    259
    260static const char *control_values_hsm[] = {
    261	[PVR2_CVAL_HSM_FAIL] = "Fail",
    262	[PVR2_CVAL_HSM_HIGH] = "High",
    263	[PVR2_CVAL_HSM_FULL] = "Full",
    264};
    265
    266
    267static const char *pvr2_state_names[] = {
    268	[PVR2_STATE_NONE] =    "none",
    269	[PVR2_STATE_DEAD] =    "dead",
    270	[PVR2_STATE_COLD] =    "cold",
    271	[PVR2_STATE_WARM] =    "warm",
    272	[PVR2_STATE_ERROR] =   "error",
    273	[PVR2_STATE_READY] =   "ready",
    274	[PVR2_STATE_RUN] =     "run",
    275};
    276
    277
    278struct pvr2_fx2cmd_descdef {
    279	unsigned char id;
    280	unsigned char *desc;
    281};
    282
    283static const struct pvr2_fx2cmd_descdef pvr2_fx2cmd_desc[] = {
    284	{FX2CMD_MEM_WRITE_DWORD, "write encoder dword"},
    285	{FX2CMD_MEM_READ_DWORD, "read encoder dword"},
    286	{FX2CMD_HCW_ZILOG_RESET, "zilog IR reset control"},
    287	{FX2CMD_MEM_READ_64BYTES, "read encoder 64bytes"},
    288	{FX2CMD_REG_WRITE, "write encoder register"},
    289	{FX2CMD_REG_READ, "read encoder register"},
    290	{FX2CMD_MEMSEL, "encoder memsel"},
    291	{FX2CMD_I2C_WRITE, "i2c write"},
    292	{FX2CMD_I2C_READ, "i2c read"},
    293	{FX2CMD_GET_USB_SPEED, "get USB speed"},
    294	{FX2CMD_STREAMING_ON, "stream on"},
    295	{FX2CMD_STREAMING_OFF, "stream off"},
    296	{FX2CMD_FWPOST1, "fwpost1"},
    297	{FX2CMD_POWER_OFF, "power off"},
    298	{FX2CMD_POWER_ON, "power on"},
    299	{FX2CMD_DEEP_RESET, "deep reset"},
    300	{FX2CMD_GET_EEPROM_ADDR, "get rom addr"},
    301	{FX2CMD_GET_IR_CODE, "get IR code"},
    302	{FX2CMD_HCW_DEMOD_RESETIN, "hcw demod resetin"},
    303	{FX2CMD_HCW_DTV_STREAMING_ON, "hcw dtv stream on"},
    304	{FX2CMD_HCW_DTV_STREAMING_OFF, "hcw dtv stream off"},
    305	{FX2CMD_ONAIR_DTV_STREAMING_ON, "onair dtv stream on"},
    306	{FX2CMD_ONAIR_DTV_STREAMING_OFF, "onair dtv stream off"},
    307	{FX2CMD_ONAIR_DTV_POWER_ON, "onair dtv power on"},
    308	{FX2CMD_ONAIR_DTV_POWER_OFF, "onair dtv power off"},
    309	{FX2CMD_HCW_DEMOD_RESET_PIN, "hcw demod reset pin"},
    310	{FX2CMD_HCW_MAKO_SLEEP_PIN, "hcw mako sleep pin"},
    311};
    312
    313
    314static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v);
    315static void pvr2_hdw_state_sched(struct pvr2_hdw *);
    316static int pvr2_hdw_state_eval(struct pvr2_hdw *);
    317static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *,unsigned long);
    318static void pvr2_hdw_worker_poll(struct work_struct *work);
    319static int pvr2_hdw_wait(struct pvr2_hdw *,int state);
    320static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *);
    321static void pvr2_hdw_state_log_state(struct pvr2_hdw *);
    322static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl);
    323static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw);
    324static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw);
    325static void pvr2_hdw_quiescent_timeout(struct timer_list *);
    326static void pvr2_hdw_decoder_stabilization_timeout(struct timer_list *);
    327static void pvr2_hdw_encoder_wait_timeout(struct timer_list *);
    328static void pvr2_hdw_encoder_run_timeout(struct timer_list *);
    329static int pvr2_issue_simple_cmd(struct pvr2_hdw *,u32);
    330static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
    331				unsigned int timeout,int probe_fl,
    332				void *write_data,unsigned int write_len,
    333				void *read_data,unsigned int read_len);
    334static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw);
    335static v4l2_std_id pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw);
    336
    337static void trace_stbit(const char *name,int val)
    338{
    339	pvr2_trace(PVR2_TRACE_STBITS,
    340		   "State bit %s <-- %s",
    341		   name,(val ? "true" : "false"));
    342}
    343
    344static int ctrl_channelfreq_get(struct pvr2_ctrl *cptr,int *vp)
    345{
    346	struct pvr2_hdw *hdw = cptr->hdw;
    347	if ((hdw->freqProgSlot > 0) && (hdw->freqProgSlot <= FREQTABLE_SIZE)) {
    348		*vp = hdw->freqTable[hdw->freqProgSlot-1];
    349	} else {
    350		*vp = 0;
    351	}
    352	return 0;
    353}
    354
    355static int ctrl_channelfreq_set(struct pvr2_ctrl *cptr,int m,int v)
    356{
    357	struct pvr2_hdw *hdw = cptr->hdw;
    358	unsigned int slotId = hdw->freqProgSlot;
    359	if ((slotId > 0) && (slotId <= FREQTABLE_SIZE)) {
    360		hdw->freqTable[slotId-1] = v;
    361		/* Handle side effects correctly - if we're tuned to this
    362		   slot, then forgot the slot id relation since the stored
    363		   frequency has been changed. */
    364		if (hdw->freqSelector) {
    365			if (hdw->freqSlotRadio == slotId) {
    366				hdw->freqSlotRadio = 0;
    367			}
    368		} else {
    369			if (hdw->freqSlotTelevision == slotId) {
    370				hdw->freqSlotTelevision = 0;
    371			}
    372		}
    373	}
    374	return 0;
    375}
    376
    377static int ctrl_channelprog_get(struct pvr2_ctrl *cptr,int *vp)
    378{
    379	*vp = cptr->hdw->freqProgSlot;
    380	return 0;
    381}
    382
    383static int ctrl_channelprog_set(struct pvr2_ctrl *cptr,int m,int v)
    384{
    385	struct pvr2_hdw *hdw = cptr->hdw;
    386	if ((v >= 0) && (v <= FREQTABLE_SIZE)) {
    387		hdw->freqProgSlot = v;
    388	}
    389	return 0;
    390}
    391
    392static int ctrl_channel_get(struct pvr2_ctrl *cptr,int *vp)
    393{
    394	struct pvr2_hdw *hdw = cptr->hdw;
    395	*vp = hdw->freqSelector ? hdw->freqSlotRadio : hdw->freqSlotTelevision;
    396	return 0;
    397}
    398
    399static int ctrl_channel_set(struct pvr2_ctrl *cptr,int m,int slotId)
    400{
    401	unsigned freq = 0;
    402	struct pvr2_hdw *hdw = cptr->hdw;
    403	if ((slotId < 0) || (slotId > FREQTABLE_SIZE)) return 0;
    404	if (slotId > 0) {
    405		freq = hdw->freqTable[slotId-1];
    406		if (!freq) return 0;
    407		pvr2_hdw_set_cur_freq(hdw,freq);
    408	}
    409	if (hdw->freqSelector) {
    410		hdw->freqSlotRadio = slotId;
    411	} else {
    412		hdw->freqSlotTelevision = slotId;
    413	}
    414	return 0;
    415}
    416
    417static int ctrl_freq_get(struct pvr2_ctrl *cptr,int *vp)
    418{
    419	*vp = pvr2_hdw_get_cur_freq(cptr->hdw);
    420	return 0;
    421}
    422
    423static int ctrl_freq_is_dirty(struct pvr2_ctrl *cptr)
    424{
    425	return cptr->hdw->freqDirty != 0;
    426}
    427
    428static void ctrl_freq_clear_dirty(struct pvr2_ctrl *cptr)
    429{
    430	cptr->hdw->freqDirty = 0;
    431}
    432
    433static int ctrl_freq_set(struct pvr2_ctrl *cptr,int m,int v)
    434{
    435	pvr2_hdw_set_cur_freq(cptr->hdw,v);
    436	return 0;
    437}
    438
    439static int ctrl_cropl_min_get(struct pvr2_ctrl *cptr, int *left)
    440{
    441	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    442	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    443	if (stat != 0) {
    444		return stat;
    445	}
    446	*left = cap->bounds.left;
    447	return 0;
    448}
    449
    450static int ctrl_cropl_max_get(struct pvr2_ctrl *cptr, int *left)
    451{
    452	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    453	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    454	if (stat != 0) {
    455		return stat;
    456	}
    457	*left = cap->bounds.left;
    458	if (cap->bounds.width > cptr->hdw->cropw_val) {
    459		*left += cap->bounds.width - cptr->hdw->cropw_val;
    460	}
    461	return 0;
    462}
    463
    464static int ctrl_cropt_min_get(struct pvr2_ctrl *cptr, int *top)
    465{
    466	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    467	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    468	if (stat != 0) {
    469		return stat;
    470	}
    471	*top = cap->bounds.top;
    472	return 0;
    473}
    474
    475static int ctrl_cropt_max_get(struct pvr2_ctrl *cptr, int *top)
    476{
    477	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    478	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    479	if (stat != 0) {
    480		return stat;
    481	}
    482	*top = cap->bounds.top;
    483	if (cap->bounds.height > cptr->hdw->croph_val) {
    484		*top += cap->bounds.height - cptr->hdw->croph_val;
    485	}
    486	return 0;
    487}
    488
    489static int ctrl_cropw_max_get(struct pvr2_ctrl *cptr, int *width)
    490{
    491	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    492	int stat, bleftend, cleft;
    493
    494	stat = pvr2_hdw_check_cropcap(cptr->hdw);
    495	if (stat != 0) {
    496		return stat;
    497	}
    498	bleftend = cap->bounds.left+cap->bounds.width;
    499	cleft = cptr->hdw->cropl_val;
    500
    501	*width = cleft < bleftend ? bleftend-cleft : 0;
    502	return 0;
    503}
    504
    505static int ctrl_croph_max_get(struct pvr2_ctrl *cptr, int *height)
    506{
    507	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    508	int stat, btopend, ctop;
    509
    510	stat = pvr2_hdw_check_cropcap(cptr->hdw);
    511	if (stat != 0) {
    512		return stat;
    513	}
    514	btopend = cap->bounds.top+cap->bounds.height;
    515	ctop = cptr->hdw->cropt_val;
    516
    517	*height = ctop < btopend ? btopend-ctop : 0;
    518	return 0;
    519}
    520
    521static int ctrl_get_cropcapbl(struct pvr2_ctrl *cptr, int *val)
    522{
    523	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    524	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    525	if (stat != 0) {
    526		return stat;
    527	}
    528	*val = cap->bounds.left;
    529	return 0;
    530}
    531
    532static int ctrl_get_cropcapbt(struct pvr2_ctrl *cptr, int *val)
    533{
    534	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    535	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    536	if (stat != 0) {
    537		return stat;
    538	}
    539	*val = cap->bounds.top;
    540	return 0;
    541}
    542
    543static int ctrl_get_cropcapbw(struct pvr2_ctrl *cptr, int *val)
    544{
    545	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    546	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    547	if (stat != 0) {
    548		return stat;
    549	}
    550	*val = cap->bounds.width;
    551	return 0;
    552}
    553
    554static int ctrl_get_cropcapbh(struct pvr2_ctrl *cptr, int *val)
    555{
    556	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    557	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    558	if (stat != 0) {
    559		return stat;
    560	}
    561	*val = cap->bounds.height;
    562	return 0;
    563}
    564
    565static int ctrl_get_cropcapdl(struct pvr2_ctrl *cptr, int *val)
    566{
    567	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    568	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    569	if (stat != 0) {
    570		return stat;
    571	}
    572	*val = cap->defrect.left;
    573	return 0;
    574}
    575
    576static int ctrl_get_cropcapdt(struct pvr2_ctrl *cptr, int *val)
    577{
    578	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    579	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    580	if (stat != 0) {
    581		return stat;
    582	}
    583	*val = cap->defrect.top;
    584	return 0;
    585}
    586
    587static int ctrl_get_cropcapdw(struct pvr2_ctrl *cptr, int *val)
    588{
    589	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    590	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    591	if (stat != 0) {
    592		return stat;
    593	}
    594	*val = cap->defrect.width;
    595	return 0;
    596}
    597
    598static int ctrl_get_cropcapdh(struct pvr2_ctrl *cptr, int *val)
    599{
    600	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    601	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    602	if (stat != 0) {
    603		return stat;
    604	}
    605	*val = cap->defrect.height;
    606	return 0;
    607}
    608
    609static int ctrl_get_cropcappan(struct pvr2_ctrl *cptr, int *val)
    610{
    611	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    612	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    613	if (stat != 0) {
    614		return stat;
    615	}
    616	*val = cap->pixelaspect.numerator;
    617	return 0;
    618}
    619
    620static int ctrl_get_cropcappad(struct pvr2_ctrl *cptr, int *val)
    621{
    622	struct v4l2_cropcap *cap = &cptr->hdw->cropcap_info;
    623	int stat = pvr2_hdw_check_cropcap(cptr->hdw);
    624	if (stat != 0) {
    625		return stat;
    626	}
    627	*val = cap->pixelaspect.denominator;
    628	return 0;
    629}
    630
    631static int ctrl_vres_max_get(struct pvr2_ctrl *cptr,int *vp)
    632{
    633	/* Actual maximum depends on the video standard in effect. */
    634	if (cptr->hdw->std_mask_cur & V4L2_STD_525_60) {
    635		*vp = 480;
    636	} else {
    637		*vp = 576;
    638	}
    639	return 0;
    640}
    641
    642static int ctrl_vres_min_get(struct pvr2_ctrl *cptr,int *vp)
    643{
    644	/* Actual minimum depends on device digitizer type. */
    645	if (cptr->hdw->hdw_desc->flag_has_cx25840) {
    646		*vp = 75;
    647	} else {
    648		*vp = 17;
    649	}
    650	return 0;
    651}
    652
    653static int ctrl_get_input(struct pvr2_ctrl *cptr,int *vp)
    654{
    655	*vp = cptr->hdw->input_val;
    656	return 0;
    657}
    658
    659static int ctrl_check_input(struct pvr2_ctrl *cptr,int v)
    660{
    661	if (v < 0 || v > PVR2_CVAL_INPUT_MAX)
    662		return 0;
    663	return ((1UL << v) & cptr->hdw->input_allowed_mask) != 0;
    664}
    665
    666static int ctrl_set_input(struct pvr2_ctrl *cptr,int m,int v)
    667{
    668	return pvr2_hdw_set_input(cptr->hdw,v);
    669}
    670
    671static int ctrl_isdirty_input(struct pvr2_ctrl *cptr)
    672{
    673	return cptr->hdw->input_dirty != 0;
    674}
    675
    676static void ctrl_cleardirty_input(struct pvr2_ctrl *cptr)
    677{
    678	cptr->hdw->input_dirty = 0;
    679}
    680
    681
    682static int ctrl_freq_max_get(struct pvr2_ctrl *cptr, int *vp)
    683{
    684	unsigned long fv;
    685	struct pvr2_hdw *hdw = cptr->hdw;
    686	if (hdw->tuner_signal_stale) {
    687		pvr2_hdw_status_poll(hdw);
    688	}
    689	fv = hdw->tuner_signal_info.rangehigh;
    690	if (!fv) {
    691		/* Safety fallback */
    692		*vp = TV_MAX_FREQ;
    693		return 0;
    694	}
    695	if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
    696		fv = (fv * 125) / 2;
    697	} else {
    698		fv = fv * 62500;
    699	}
    700	*vp = fv;
    701	return 0;
    702}
    703
    704static int ctrl_freq_min_get(struct pvr2_ctrl *cptr, int *vp)
    705{
    706	unsigned long fv;
    707	struct pvr2_hdw *hdw = cptr->hdw;
    708	if (hdw->tuner_signal_stale) {
    709		pvr2_hdw_status_poll(hdw);
    710	}
    711	fv = hdw->tuner_signal_info.rangelow;
    712	if (!fv) {
    713		/* Safety fallback */
    714		*vp = TV_MIN_FREQ;
    715		return 0;
    716	}
    717	if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
    718		fv = (fv * 125) / 2;
    719	} else {
    720		fv = fv * 62500;
    721	}
    722	*vp = fv;
    723	return 0;
    724}
    725
    726static int ctrl_cx2341x_is_dirty(struct pvr2_ctrl *cptr)
    727{
    728	return cptr->hdw->enc_stale != 0;
    729}
    730
    731static void ctrl_cx2341x_clear_dirty(struct pvr2_ctrl *cptr)
    732{
    733	cptr->hdw->enc_stale = 0;
    734	cptr->hdw->enc_unsafe_stale = 0;
    735}
    736
    737static int ctrl_cx2341x_get(struct pvr2_ctrl *cptr,int *vp)
    738{
    739	int ret;
    740	struct v4l2_ext_controls cs;
    741	struct v4l2_ext_control c1;
    742	memset(&cs,0,sizeof(cs));
    743	memset(&c1,0,sizeof(c1));
    744	cs.controls = &c1;
    745	cs.count = 1;
    746	c1.id = cptr->info->v4l_id;
    747	ret = cx2341x_ext_ctrls(&cptr->hdw->enc_ctl_state, 0, &cs,
    748				VIDIOC_G_EXT_CTRLS);
    749	if (ret) return ret;
    750	*vp = c1.value;
    751	return 0;
    752}
    753
    754static int ctrl_cx2341x_set(struct pvr2_ctrl *cptr,int m,int v)
    755{
    756	int ret;
    757	struct pvr2_hdw *hdw = cptr->hdw;
    758	struct v4l2_ext_controls cs;
    759	struct v4l2_ext_control c1;
    760	memset(&cs,0,sizeof(cs));
    761	memset(&c1,0,sizeof(c1));
    762	cs.controls = &c1;
    763	cs.count = 1;
    764	c1.id = cptr->info->v4l_id;
    765	c1.value = v;
    766	ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
    767				hdw->state_encoder_run, &cs,
    768				VIDIOC_S_EXT_CTRLS);
    769	if (ret == -EBUSY) {
    770		/* Oops.  cx2341x is telling us it's not safe to change
    771		   this control while we're capturing.  Make a note of this
    772		   fact so that the pipeline will be stopped the next time
    773		   controls are committed.  Then go on ahead and store this
    774		   change anyway. */
    775		ret = cx2341x_ext_ctrls(&hdw->enc_ctl_state,
    776					0, &cs,
    777					VIDIOC_S_EXT_CTRLS);
    778		if (!ret) hdw->enc_unsafe_stale = !0;
    779	}
    780	if (ret) return ret;
    781	hdw->enc_stale = !0;
    782	return 0;
    783}
    784
    785static unsigned int ctrl_cx2341x_getv4lflags(struct pvr2_ctrl *cptr)
    786{
    787	struct v4l2_queryctrl qctrl = {};
    788	struct pvr2_ctl_info *info;
    789	qctrl.id = cptr->info->v4l_id;
    790	cx2341x_ctrl_query(&cptr->hdw->enc_ctl_state,&qctrl);
    791	/* Strip out the const so we can adjust a function pointer.  It's
    792	   OK to do this here because we know this is a dynamically created
    793	   control, so the underlying storage for the info pointer is (a)
    794	   private to us, and (b) not in read-only storage.  Either we do
    795	   this or we significantly complicate the underlying control
    796	   implementation. */
    797	info = (struct pvr2_ctl_info *)(cptr->info);
    798	if (qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY) {
    799		if (info->set_value) {
    800			info->set_value = NULL;
    801		}
    802	} else {
    803		if (!(info->set_value)) {
    804			info->set_value = ctrl_cx2341x_set;
    805		}
    806	}
    807	return qctrl.flags;
    808}
    809
    810static int ctrl_streamingenabled_get(struct pvr2_ctrl *cptr,int *vp)
    811{
    812	*vp = cptr->hdw->state_pipeline_req;
    813	return 0;
    814}
    815
    816static int ctrl_masterstate_get(struct pvr2_ctrl *cptr,int *vp)
    817{
    818	*vp = cptr->hdw->master_state;
    819	return 0;
    820}
    821
    822static int ctrl_hsm_get(struct pvr2_ctrl *cptr,int *vp)
    823{
    824	int result = pvr2_hdw_is_hsm(cptr->hdw);
    825	*vp = PVR2_CVAL_HSM_FULL;
    826	if (result < 0) *vp = PVR2_CVAL_HSM_FAIL;
    827	if (result) *vp = PVR2_CVAL_HSM_HIGH;
    828	return 0;
    829}
    830
    831static int ctrl_stddetect_get(struct pvr2_ctrl *cptr, int *vp)
    832{
    833	*vp = pvr2_hdw_get_detected_std(cptr->hdw);
    834	return 0;
    835}
    836
    837static int ctrl_stdavail_get(struct pvr2_ctrl *cptr,int *vp)
    838{
    839	*vp = cptr->hdw->std_mask_avail;
    840	return 0;
    841}
    842
    843static int ctrl_stdavail_set(struct pvr2_ctrl *cptr,int m,int v)
    844{
    845	struct pvr2_hdw *hdw = cptr->hdw;
    846	v4l2_std_id ns;
    847	ns = hdw->std_mask_avail;
    848	ns = (ns & ~m) | (v & m);
    849	if (ns == hdw->std_mask_avail) return 0;
    850	hdw->std_mask_avail = ns;
    851	hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
    852	return 0;
    853}
    854
    855static int ctrl_std_val_to_sym(struct pvr2_ctrl *cptr,int msk,int val,
    856			       char *bufPtr,unsigned int bufSize,
    857			       unsigned int *len)
    858{
    859	*len = pvr2_std_id_to_str(bufPtr,bufSize,msk & val);
    860	return 0;
    861}
    862
    863static int ctrl_std_sym_to_val(struct pvr2_ctrl *cptr,
    864			       const char *bufPtr,unsigned int bufSize,
    865			       int *mskp,int *valp)
    866{
    867	v4l2_std_id id;
    868	if (!pvr2_std_str_to_id(&id, bufPtr, bufSize))
    869		return -EINVAL;
    870	if (mskp) *mskp = id;
    871	if (valp) *valp = id;
    872	return 0;
    873}
    874
    875static int ctrl_stdcur_get(struct pvr2_ctrl *cptr,int *vp)
    876{
    877	*vp = cptr->hdw->std_mask_cur;
    878	return 0;
    879}
    880
    881static int ctrl_stdcur_set(struct pvr2_ctrl *cptr,int m,int v)
    882{
    883	struct pvr2_hdw *hdw = cptr->hdw;
    884	v4l2_std_id ns;
    885	ns = hdw->std_mask_cur;
    886	ns = (ns & ~m) | (v & m);
    887	if (ns == hdw->std_mask_cur) return 0;
    888	hdw->std_mask_cur = ns;
    889	hdw->std_dirty = !0;
    890	return 0;
    891}
    892
    893static int ctrl_stdcur_is_dirty(struct pvr2_ctrl *cptr)
    894{
    895	return cptr->hdw->std_dirty != 0;
    896}
    897
    898static void ctrl_stdcur_clear_dirty(struct pvr2_ctrl *cptr)
    899{
    900	cptr->hdw->std_dirty = 0;
    901}
    902
    903static int ctrl_signal_get(struct pvr2_ctrl *cptr,int *vp)
    904{
    905	struct pvr2_hdw *hdw = cptr->hdw;
    906	pvr2_hdw_status_poll(hdw);
    907	*vp = hdw->tuner_signal_info.signal;
    908	return 0;
    909}
    910
    911static int ctrl_audio_modes_present_get(struct pvr2_ctrl *cptr,int *vp)
    912{
    913	int val = 0;
    914	unsigned int subchan;
    915	struct pvr2_hdw *hdw = cptr->hdw;
    916	pvr2_hdw_status_poll(hdw);
    917	subchan = hdw->tuner_signal_info.rxsubchans;
    918	if (subchan & V4L2_TUNER_SUB_MONO) {
    919		val |= (1 << V4L2_TUNER_MODE_MONO);
    920	}
    921	if (subchan & V4L2_TUNER_SUB_STEREO) {
    922		val |= (1 << V4L2_TUNER_MODE_STEREO);
    923	}
    924	if (subchan & V4L2_TUNER_SUB_LANG1) {
    925		val |= (1 << V4L2_TUNER_MODE_LANG1);
    926	}
    927	if (subchan & V4L2_TUNER_SUB_LANG2) {
    928		val |= (1 << V4L2_TUNER_MODE_LANG2);
    929	}
    930	*vp = val;
    931	return 0;
    932}
    933
    934
    935#define DEFINT(vmin,vmax) \
    936	.type = pvr2_ctl_int, \
    937	.def.type_int.min_value = vmin, \
    938	.def.type_int.max_value = vmax
    939
    940#define DEFENUM(tab) \
    941	.type = pvr2_ctl_enum, \
    942	.def.type_enum.count = ARRAY_SIZE(tab), \
    943	.def.type_enum.value_names = tab
    944
    945#define DEFBOOL \
    946	.type = pvr2_ctl_bool
    947
    948#define DEFMASK(msk,tab) \
    949	.type = pvr2_ctl_bitmask, \
    950	.def.type_bitmask.valid_bits = msk, \
    951	.def.type_bitmask.bit_names = tab
    952
    953#define DEFREF(vname) \
    954	.set_value = ctrl_set_##vname, \
    955	.get_value = ctrl_get_##vname, \
    956	.is_dirty = ctrl_isdirty_##vname, \
    957	.clear_dirty = ctrl_cleardirty_##vname
    958
    959
    960#define VCREATE_FUNCS(vname) \
    961static int ctrl_get_##vname(struct pvr2_ctrl *cptr,int *vp) \
    962{*vp = cptr->hdw->vname##_val; return 0;} \
    963static int ctrl_set_##vname(struct pvr2_ctrl *cptr,int m,int v) \
    964{cptr->hdw->vname##_val = v; cptr->hdw->vname##_dirty = !0; return 0;} \
    965static int ctrl_isdirty_##vname(struct pvr2_ctrl *cptr) \
    966{return cptr->hdw->vname##_dirty != 0;} \
    967static void ctrl_cleardirty_##vname(struct pvr2_ctrl *cptr) \
    968{cptr->hdw->vname##_dirty = 0;}
    969
    970VCREATE_FUNCS(brightness)
    971VCREATE_FUNCS(contrast)
    972VCREATE_FUNCS(saturation)
    973VCREATE_FUNCS(hue)
    974VCREATE_FUNCS(volume)
    975VCREATE_FUNCS(balance)
    976VCREATE_FUNCS(bass)
    977VCREATE_FUNCS(treble)
    978VCREATE_FUNCS(mute)
    979VCREATE_FUNCS(cropl)
    980VCREATE_FUNCS(cropt)
    981VCREATE_FUNCS(cropw)
    982VCREATE_FUNCS(croph)
    983VCREATE_FUNCS(audiomode)
    984VCREATE_FUNCS(res_hor)
    985VCREATE_FUNCS(res_ver)
    986VCREATE_FUNCS(srate)
    987
    988/* Table definition of all controls which can be manipulated */
    989static const struct pvr2_ctl_info control_defs[] = {
    990	{
    991		.v4l_id = V4L2_CID_BRIGHTNESS,
    992		.desc = "Brightness",
    993		.name = "brightness",
    994		.default_value = 128,
    995		DEFREF(brightness),
    996		DEFINT(0,255),
    997	},{
    998		.v4l_id = V4L2_CID_CONTRAST,
    999		.desc = "Contrast",
   1000		.name = "contrast",
   1001		.default_value = 68,
   1002		DEFREF(contrast),
   1003		DEFINT(0,127),
   1004	},{
   1005		.v4l_id = V4L2_CID_SATURATION,
   1006		.desc = "Saturation",
   1007		.name = "saturation",
   1008		.default_value = 64,
   1009		DEFREF(saturation),
   1010		DEFINT(0,127),
   1011	},{
   1012		.v4l_id = V4L2_CID_HUE,
   1013		.desc = "Hue",
   1014		.name = "hue",
   1015		.default_value = 0,
   1016		DEFREF(hue),
   1017		DEFINT(-128,127),
   1018	},{
   1019		.v4l_id = V4L2_CID_AUDIO_VOLUME,
   1020		.desc = "Volume",
   1021		.name = "volume",
   1022		.default_value = 62000,
   1023		DEFREF(volume),
   1024		DEFINT(0,65535),
   1025	},{
   1026		.v4l_id = V4L2_CID_AUDIO_BALANCE,
   1027		.desc = "Balance",
   1028		.name = "balance",
   1029		.default_value = 0,
   1030		DEFREF(balance),
   1031		DEFINT(-32768,32767),
   1032	},{
   1033		.v4l_id = V4L2_CID_AUDIO_BASS,
   1034		.desc = "Bass",
   1035		.name = "bass",
   1036		.default_value = 0,
   1037		DEFREF(bass),
   1038		DEFINT(-32768,32767),
   1039	},{
   1040		.v4l_id = V4L2_CID_AUDIO_TREBLE,
   1041		.desc = "Treble",
   1042		.name = "treble",
   1043		.default_value = 0,
   1044		DEFREF(treble),
   1045		DEFINT(-32768,32767),
   1046	},{
   1047		.v4l_id = V4L2_CID_AUDIO_MUTE,
   1048		.desc = "Mute",
   1049		.name = "mute",
   1050		.default_value = 0,
   1051		DEFREF(mute),
   1052		DEFBOOL,
   1053	}, {
   1054		.desc = "Capture crop left margin",
   1055		.name = "crop_left",
   1056		.internal_id = PVR2_CID_CROPL,
   1057		.default_value = 0,
   1058		DEFREF(cropl),
   1059		DEFINT(-129, 340),
   1060		.get_min_value = ctrl_cropl_min_get,
   1061		.get_max_value = ctrl_cropl_max_get,
   1062		.get_def_value = ctrl_get_cropcapdl,
   1063	}, {
   1064		.desc = "Capture crop top margin",
   1065		.name = "crop_top",
   1066		.internal_id = PVR2_CID_CROPT,
   1067		.default_value = 0,
   1068		DEFREF(cropt),
   1069		DEFINT(-35, 544),
   1070		.get_min_value = ctrl_cropt_min_get,
   1071		.get_max_value = ctrl_cropt_max_get,
   1072		.get_def_value = ctrl_get_cropcapdt,
   1073	}, {
   1074		.desc = "Capture crop width",
   1075		.name = "crop_width",
   1076		.internal_id = PVR2_CID_CROPW,
   1077		.default_value = 720,
   1078		DEFREF(cropw),
   1079		DEFINT(0, 864),
   1080		.get_max_value = ctrl_cropw_max_get,
   1081		.get_def_value = ctrl_get_cropcapdw,
   1082	}, {
   1083		.desc = "Capture crop height",
   1084		.name = "crop_height",
   1085		.internal_id = PVR2_CID_CROPH,
   1086		.default_value = 480,
   1087		DEFREF(croph),
   1088		DEFINT(0, 576),
   1089		.get_max_value = ctrl_croph_max_get,
   1090		.get_def_value = ctrl_get_cropcapdh,
   1091	}, {
   1092		.desc = "Capture capability pixel aspect numerator",
   1093		.name = "cropcap_pixel_numerator",
   1094		.internal_id = PVR2_CID_CROPCAPPAN,
   1095		.get_value = ctrl_get_cropcappan,
   1096	}, {
   1097		.desc = "Capture capability pixel aspect denominator",
   1098		.name = "cropcap_pixel_denominator",
   1099		.internal_id = PVR2_CID_CROPCAPPAD,
   1100		.get_value = ctrl_get_cropcappad,
   1101	}, {
   1102		.desc = "Capture capability bounds top",
   1103		.name = "cropcap_bounds_top",
   1104		.internal_id = PVR2_CID_CROPCAPBT,
   1105		.get_value = ctrl_get_cropcapbt,
   1106	}, {
   1107		.desc = "Capture capability bounds left",
   1108		.name = "cropcap_bounds_left",
   1109		.internal_id = PVR2_CID_CROPCAPBL,
   1110		.get_value = ctrl_get_cropcapbl,
   1111	}, {
   1112		.desc = "Capture capability bounds width",
   1113		.name = "cropcap_bounds_width",
   1114		.internal_id = PVR2_CID_CROPCAPBW,
   1115		.get_value = ctrl_get_cropcapbw,
   1116	}, {
   1117		.desc = "Capture capability bounds height",
   1118		.name = "cropcap_bounds_height",
   1119		.internal_id = PVR2_CID_CROPCAPBH,
   1120		.get_value = ctrl_get_cropcapbh,
   1121	},{
   1122		.desc = "Video Source",
   1123		.name = "input",
   1124		.internal_id = PVR2_CID_INPUT,
   1125		.default_value = PVR2_CVAL_INPUT_TV,
   1126		.check_value = ctrl_check_input,
   1127		DEFREF(input),
   1128		DEFENUM(control_values_input),
   1129	},{
   1130		.desc = "Audio Mode",
   1131		.name = "audio_mode",
   1132		.internal_id = PVR2_CID_AUDIOMODE,
   1133		.default_value = V4L2_TUNER_MODE_STEREO,
   1134		DEFREF(audiomode),
   1135		DEFENUM(control_values_audiomode),
   1136	},{
   1137		.desc = "Horizontal capture resolution",
   1138		.name = "resolution_hor",
   1139		.internal_id = PVR2_CID_HRES,
   1140		.default_value = 720,
   1141		DEFREF(res_hor),
   1142		DEFINT(19,720),
   1143	},{
   1144		.desc = "Vertical capture resolution",
   1145		.name = "resolution_ver",
   1146		.internal_id = PVR2_CID_VRES,
   1147		.default_value = 480,
   1148		DEFREF(res_ver),
   1149		DEFINT(17,576),
   1150		/* Hook in check for video standard and adjust maximum
   1151		   depending on the standard. */
   1152		.get_max_value = ctrl_vres_max_get,
   1153		.get_min_value = ctrl_vres_min_get,
   1154	},{
   1155		.v4l_id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ,
   1156		.default_value = V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000,
   1157		.desc = "Audio Sampling Frequency",
   1158		.name = "srate",
   1159		DEFREF(srate),
   1160		DEFENUM(control_values_srate),
   1161	},{
   1162		.desc = "Tuner Frequency (Hz)",
   1163		.name = "frequency",
   1164		.internal_id = PVR2_CID_FREQUENCY,
   1165		.default_value = 0,
   1166		.set_value = ctrl_freq_set,
   1167		.get_value = ctrl_freq_get,
   1168		.is_dirty = ctrl_freq_is_dirty,
   1169		.clear_dirty = ctrl_freq_clear_dirty,
   1170		DEFINT(0,0),
   1171		/* Hook in check for input value (tv/radio) and adjust
   1172		   max/min values accordingly */
   1173		.get_max_value = ctrl_freq_max_get,
   1174		.get_min_value = ctrl_freq_min_get,
   1175	},{
   1176		.desc = "Channel",
   1177		.name = "channel",
   1178		.set_value = ctrl_channel_set,
   1179		.get_value = ctrl_channel_get,
   1180		DEFINT(0,FREQTABLE_SIZE),
   1181	},{
   1182		.desc = "Channel Program Frequency",
   1183		.name = "freq_table_value",
   1184		.set_value = ctrl_channelfreq_set,
   1185		.get_value = ctrl_channelfreq_get,
   1186		DEFINT(0,0),
   1187		/* Hook in check for input value (tv/radio) and adjust
   1188		   max/min values accordingly */
   1189		.get_max_value = ctrl_freq_max_get,
   1190		.get_min_value = ctrl_freq_min_get,
   1191	},{
   1192		.desc = "Channel Program ID",
   1193		.name = "freq_table_channel",
   1194		.set_value = ctrl_channelprog_set,
   1195		.get_value = ctrl_channelprog_get,
   1196		DEFINT(0,FREQTABLE_SIZE),
   1197	},{
   1198		.desc = "Streaming Enabled",
   1199		.name = "streaming_enabled",
   1200		.get_value = ctrl_streamingenabled_get,
   1201		DEFBOOL,
   1202	},{
   1203		.desc = "USB Speed",
   1204		.name = "usb_speed",
   1205		.get_value = ctrl_hsm_get,
   1206		DEFENUM(control_values_hsm),
   1207	},{
   1208		.desc = "Master State",
   1209		.name = "master_state",
   1210		.get_value = ctrl_masterstate_get,
   1211		DEFENUM(pvr2_state_names),
   1212	},{
   1213		.desc = "Signal Present",
   1214		.name = "signal_present",
   1215		.get_value = ctrl_signal_get,
   1216		DEFINT(0,65535),
   1217	},{
   1218		.desc = "Audio Modes Present",
   1219		.name = "audio_modes_present",
   1220		.get_value = ctrl_audio_modes_present_get,
   1221		/* For this type we "borrow" the V4L2_TUNER_MODE enum from
   1222		   v4l.  Nothing outside of this module cares about this,
   1223		   but I reuse it in order to also reuse the
   1224		   control_values_audiomode string table. */
   1225		DEFMASK(((1 << V4L2_TUNER_MODE_MONO)|
   1226			 (1 << V4L2_TUNER_MODE_STEREO)|
   1227			 (1 << V4L2_TUNER_MODE_LANG1)|
   1228			 (1 << V4L2_TUNER_MODE_LANG2)),
   1229			control_values_audiomode),
   1230	},{
   1231		.desc = "Video Standards Available Mask",
   1232		.name = "video_standard_mask_available",
   1233		.internal_id = PVR2_CID_STDAVAIL,
   1234		.skip_init = !0,
   1235		.get_value = ctrl_stdavail_get,
   1236		.set_value = ctrl_stdavail_set,
   1237		.val_to_sym = ctrl_std_val_to_sym,
   1238		.sym_to_val = ctrl_std_sym_to_val,
   1239		.type = pvr2_ctl_bitmask,
   1240	},{
   1241		.desc = "Video Standards In Use Mask",
   1242		.name = "video_standard_mask_active",
   1243		.internal_id = PVR2_CID_STDCUR,
   1244		.skip_init = !0,
   1245		.get_value = ctrl_stdcur_get,
   1246		.set_value = ctrl_stdcur_set,
   1247		.is_dirty = ctrl_stdcur_is_dirty,
   1248		.clear_dirty = ctrl_stdcur_clear_dirty,
   1249		.val_to_sym = ctrl_std_val_to_sym,
   1250		.sym_to_val = ctrl_std_sym_to_val,
   1251		.type = pvr2_ctl_bitmask,
   1252	},{
   1253		.desc = "Video Standards Detected Mask",
   1254		.name = "video_standard_mask_detected",
   1255		.internal_id = PVR2_CID_STDDETECT,
   1256		.skip_init = !0,
   1257		.get_value = ctrl_stddetect_get,
   1258		.val_to_sym = ctrl_std_val_to_sym,
   1259		.sym_to_val = ctrl_std_sym_to_val,
   1260		.type = pvr2_ctl_bitmask,
   1261	}
   1262};
   1263
   1264#define CTRLDEF_COUNT ARRAY_SIZE(control_defs)
   1265
   1266
   1267const char *pvr2_config_get_name(enum pvr2_config cfg)
   1268{
   1269	switch (cfg) {
   1270	case pvr2_config_empty: return "empty";
   1271	case pvr2_config_mpeg: return "mpeg";
   1272	case pvr2_config_vbi: return "vbi";
   1273	case pvr2_config_pcm: return "pcm";
   1274	case pvr2_config_rawvideo: return "raw video";
   1275	}
   1276	return "<unknown>";
   1277}
   1278
   1279
   1280struct usb_device *pvr2_hdw_get_dev(struct pvr2_hdw *hdw)
   1281{
   1282	return hdw->usb_dev;
   1283}
   1284
   1285
   1286unsigned long pvr2_hdw_get_sn(struct pvr2_hdw *hdw)
   1287{
   1288	return hdw->serial_number;
   1289}
   1290
   1291
   1292const char *pvr2_hdw_get_bus_info(struct pvr2_hdw *hdw)
   1293{
   1294	return hdw->bus_info;
   1295}
   1296
   1297
   1298const char *pvr2_hdw_get_device_identifier(struct pvr2_hdw *hdw)
   1299{
   1300	return hdw->identifier;
   1301}
   1302
   1303
   1304unsigned long pvr2_hdw_get_cur_freq(struct pvr2_hdw *hdw)
   1305{
   1306	return hdw->freqSelector ? hdw->freqValTelevision : hdw->freqValRadio;
   1307}
   1308
   1309/* Set the currently tuned frequency and account for all possible
   1310   driver-core side effects of this action. */
   1311static void pvr2_hdw_set_cur_freq(struct pvr2_hdw *hdw,unsigned long val)
   1312{
   1313	if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
   1314		if (hdw->freqSelector) {
   1315			/* Swing over to radio frequency selection */
   1316			hdw->freqSelector = 0;
   1317			hdw->freqDirty = !0;
   1318		}
   1319		if (hdw->freqValRadio != val) {
   1320			hdw->freqValRadio = val;
   1321			hdw->freqSlotRadio = 0;
   1322			hdw->freqDirty = !0;
   1323		}
   1324	} else {
   1325		if (!(hdw->freqSelector)) {
   1326			/* Swing over to television frequency selection */
   1327			hdw->freqSelector = 1;
   1328			hdw->freqDirty = !0;
   1329		}
   1330		if (hdw->freqValTelevision != val) {
   1331			hdw->freqValTelevision = val;
   1332			hdw->freqSlotTelevision = 0;
   1333			hdw->freqDirty = !0;
   1334		}
   1335	}
   1336}
   1337
   1338int pvr2_hdw_get_unit_number(struct pvr2_hdw *hdw)
   1339{
   1340	return hdw->unit_number;
   1341}
   1342
   1343
   1344/* Attempt to locate one of the given set of files.  Messages are logged
   1345   appropriate to what has been found.  The return value will be 0 or
   1346   greater on success (it will be the index of the file name found) and
   1347   fw_entry will be filled in.  Otherwise a negative error is returned on
   1348   failure.  If the return value is -ENOENT then no viable firmware file
   1349   could be located. */
   1350static int pvr2_locate_firmware(struct pvr2_hdw *hdw,
   1351				const struct firmware **fw_entry,
   1352				const char *fwtypename,
   1353				unsigned int fwcount,
   1354				const char *fwnames[])
   1355{
   1356	unsigned int idx;
   1357	int ret = -EINVAL;
   1358	for (idx = 0; idx < fwcount; idx++) {
   1359		ret = request_firmware(fw_entry,
   1360				       fwnames[idx],
   1361				       &hdw->usb_dev->dev);
   1362		if (!ret) {
   1363			trace_firmware("Located %s firmware: %s; uploading...",
   1364				       fwtypename,
   1365				       fwnames[idx]);
   1366			return idx;
   1367		}
   1368		if (ret == -ENOENT) continue;
   1369		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1370			   "request_firmware fatal error with code=%d",ret);
   1371		return ret;
   1372	}
   1373	pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1374		   "***WARNING*** Device %s firmware seems to be missing.",
   1375		   fwtypename);
   1376	pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1377		   "Did you install the pvrusb2 firmware files in their proper location?");
   1378	if (fwcount == 1) {
   1379		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1380			   "request_firmware unable to locate %s file %s",
   1381			   fwtypename,fwnames[0]);
   1382	} else {
   1383		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1384			   "request_firmware unable to locate one of the following %s files:",
   1385			   fwtypename);
   1386		for (idx = 0; idx < fwcount; idx++) {
   1387			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1388				   "request_firmware: Failed to find %s",
   1389				   fwnames[idx]);
   1390		}
   1391	}
   1392	return ret;
   1393}
   1394
   1395
   1396/*
   1397 * pvr2_upload_firmware1().
   1398 *
   1399 * Send the 8051 firmware to the device.  After the upload, arrange for
   1400 * device to re-enumerate.
   1401 *
   1402 * NOTE : the pointer to the firmware data given by request_firmware()
   1403 * is not suitable for an usb transaction.
   1404 *
   1405 */
   1406static int pvr2_upload_firmware1(struct pvr2_hdw *hdw)
   1407{
   1408	const struct firmware *fw_entry = NULL;
   1409	void  *fw_ptr;
   1410	unsigned int pipe;
   1411	unsigned int fwsize;
   1412	int ret;
   1413	u16 address;
   1414
   1415	if (!hdw->hdw_desc->fx2_firmware.cnt) {
   1416		hdw->fw1_state = FW1_STATE_OK;
   1417		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1418			   "Connected device type defines no firmware to upload; ignoring firmware");
   1419		return -ENOTTY;
   1420	}
   1421
   1422	hdw->fw1_state = FW1_STATE_FAILED; // default result
   1423
   1424	trace_firmware("pvr2_upload_firmware1");
   1425
   1426	ret = pvr2_locate_firmware(hdw,&fw_entry,"fx2 controller",
   1427				   hdw->hdw_desc->fx2_firmware.cnt,
   1428				   hdw->hdw_desc->fx2_firmware.lst);
   1429	if (ret < 0) {
   1430		if (ret == -ENOENT) hdw->fw1_state = FW1_STATE_MISSING;
   1431		return ret;
   1432	}
   1433
   1434	usb_clear_halt(hdw->usb_dev, usb_sndbulkpipe(hdw->usb_dev, 0 & 0x7f));
   1435
   1436	pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
   1437	fwsize = fw_entry->size;
   1438
   1439	if ((fwsize != 0x2000) &&
   1440	    (!(hdw->hdw_desc->flag_fx2_16kb && (fwsize == 0x4000)))) {
   1441		if (hdw->hdw_desc->flag_fx2_16kb) {
   1442			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1443				   "Wrong fx2 firmware size (expected 8192 or 16384, got %u)",
   1444				   fwsize);
   1445		} else {
   1446			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1447				   "Wrong fx2 firmware size (expected 8192, got %u)",
   1448				   fwsize);
   1449		}
   1450		release_firmware(fw_entry);
   1451		return -ENOMEM;
   1452	}
   1453
   1454	fw_ptr = kmalloc(0x800, GFP_KERNEL);
   1455	if (fw_ptr == NULL){
   1456		release_firmware(fw_entry);
   1457		return -ENOMEM;
   1458	}
   1459
   1460	/* We have to hold the CPU during firmware upload. */
   1461	pvr2_hdw_cpureset_assert(hdw,1);
   1462
   1463	/* upload the firmware to address 0000-1fff in 2048 (=0x800) bytes
   1464	   chunk. */
   1465
   1466	ret = 0;
   1467	for (address = 0; address < fwsize; address += 0x800) {
   1468		memcpy(fw_ptr, fw_entry->data + address, 0x800);
   1469		ret += usb_control_msg(hdw->usb_dev, pipe, 0xa0, 0x40, address,
   1470				       0, fw_ptr, 0x800, 1000);
   1471	}
   1472
   1473	trace_firmware("Upload done, releasing device's CPU");
   1474
   1475	/* Now release the CPU.  It will disconnect and reconnect later. */
   1476	pvr2_hdw_cpureset_assert(hdw,0);
   1477
   1478	kfree(fw_ptr);
   1479	release_firmware(fw_entry);
   1480
   1481	trace_firmware("Upload done (%d bytes sent)",ret);
   1482
   1483	/* We should have written fwsize bytes */
   1484	if (ret == fwsize) {
   1485		hdw->fw1_state = FW1_STATE_RELOAD;
   1486		return 0;
   1487	}
   1488
   1489	return -EIO;
   1490}
   1491
   1492
   1493/*
   1494 * pvr2_upload_firmware2()
   1495 *
   1496 * This uploads encoder firmware on endpoint 2.
   1497 *
   1498 */
   1499
   1500int pvr2_upload_firmware2(struct pvr2_hdw *hdw)
   1501{
   1502	const struct firmware *fw_entry = NULL;
   1503	void  *fw_ptr;
   1504	unsigned int pipe, fw_len, fw_done, bcnt, icnt;
   1505	int actual_length;
   1506	int ret = 0;
   1507	int fwidx;
   1508	static const char *fw_files[] = {
   1509		CX2341X_FIRM_ENC_FILENAME,
   1510	};
   1511
   1512	if (hdw->hdw_desc->flag_skip_cx23416_firmware) {
   1513		return 0;
   1514	}
   1515
   1516	trace_firmware("pvr2_upload_firmware2");
   1517
   1518	ret = pvr2_locate_firmware(hdw,&fw_entry,"encoder",
   1519				   ARRAY_SIZE(fw_files), fw_files);
   1520	if (ret < 0) return ret;
   1521	fwidx = ret;
   1522	ret = 0;
   1523	/* Since we're about to completely reinitialize the encoder,
   1524	   invalidate our cached copy of its configuration state.  Next
   1525	   time we configure the encoder, then we'll fully configure it. */
   1526	hdw->enc_cur_valid = 0;
   1527
   1528	/* Encoder is about to be reset so note that as far as we're
   1529	   concerned now, the encoder has never been run. */
   1530	del_timer_sync(&hdw->encoder_run_timer);
   1531	if (hdw->state_encoder_runok) {
   1532		hdw->state_encoder_runok = 0;
   1533		trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
   1534	}
   1535
   1536	/* First prepare firmware loading */
   1537	ret |= pvr2_write_register(hdw, 0x0048, 0xffffffff); /*interrupt mask*/
   1538	ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000088); /*gpio dir*/
   1539	ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
   1540	ret |= pvr2_hdw_cmd_deep_reset(hdw);
   1541	ret |= pvr2_write_register(hdw, 0xa064, 0x00000000); /*APU command*/
   1542	ret |= pvr2_hdw_gpio_chg_dir(hdw,0xffffffff,0x00000408); /*gpio dir*/
   1543	ret |= pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000008); /*gpio output state*/
   1544	ret |= pvr2_write_register(hdw, 0x9058, 0xffffffed); /*VPU ctrl*/
   1545	ret |= pvr2_write_register(hdw, 0x9054, 0xfffffffd); /*reset hw blocks*/
   1546	ret |= pvr2_write_register(hdw, 0x07f8, 0x80000800); /*encoder SDRAM refresh*/
   1547	ret |= pvr2_write_register(hdw, 0x07fc, 0x0000001a); /*encoder SDRAM pre-charge*/
   1548	ret |= pvr2_write_register(hdw, 0x0700, 0x00000000); /*I2C clock*/
   1549	ret |= pvr2_write_register(hdw, 0xaa00, 0x00000000); /*unknown*/
   1550	ret |= pvr2_write_register(hdw, 0xaa04, 0x00057810); /*unknown*/
   1551	ret |= pvr2_write_register(hdw, 0xaa10, 0x00148500); /*unknown*/
   1552	ret |= pvr2_write_register(hdw, 0xaa18, 0x00840000); /*unknown*/
   1553	ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_FWPOST1);
   1554	ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
   1555
   1556	if (ret) {
   1557		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1558			   "firmware2 upload prep failed, ret=%d",ret);
   1559		release_firmware(fw_entry);
   1560		goto done;
   1561	}
   1562
   1563	/* Now send firmware */
   1564
   1565	fw_len = fw_entry->size;
   1566
   1567	if (fw_len % sizeof(u32)) {
   1568		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1569			   "size of %s firmware must be a multiple of %zu bytes",
   1570			   fw_files[fwidx],sizeof(u32));
   1571		release_firmware(fw_entry);
   1572		ret = -EINVAL;
   1573		goto done;
   1574	}
   1575
   1576	fw_ptr = kmalloc(FIRMWARE_CHUNK_SIZE, GFP_KERNEL);
   1577	if (fw_ptr == NULL){
   1578		release_firmware(fw_entry);
   1579		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1580			   "failed to allocate memory for firmware2 upload");
   1581		ret = -ENOMEM;
   1582		goto done;
   1583	}
   1584
   1585	pipe = usb_sndbulkpipe(hdw->usb_dev, PVR2_FIRMWARE_ENDPOINT);
   1586
   1587	fw_done = 0;
   1588	for (fw_done = 0; fw_done < fw_len;) {
   1589		bcnt = fw_len - fw_done;
   1590		if (bcnt > FIRMWARE_CHUNK_SIZE) bcnt = FIRMWARE_CHUNK_SIZE;
   1591		memcpy(fw_ptr, fw_entry->data + fw_done, bcnt);
   1592		/* Usbsnoop log shows that we must swap bytes... */
   1593		/* Some background info: The data being swapped here is a
   1594		   firmware image destined for the mpeg encoder chip that
   1595		   lives at the other end of a USB endpoint.  The encoder
   1596		   chip always talks in 32 bit chunks and its storage is
   1597		   organized into 32 bit words.  However from the file
   1598		   system to the encoder chip everything is purely a byte
   1599		   stream.  The firmware file's contents are always 32 bit
   1600		   swapped from what the encoder expects.  Thus the need
   1601		   always exists to swap the bytes regardless of the endian
   1602		   type of the host processor and therefore swab32() makes
   1603		   the most sense. */
   1604		for (icnt = 0; icnt < bcnt/4 ; icnt++)
   1605			((u32 *)fw_ptr)[icnt] = swab32(((u32 *)fw_ptr)[icnt]);
   1606
   1607		ret |= usb_bulk_msg(hdw->usb_dev, pipe, fw_ptr,bcnt,
   1608				    &actual_length, 1000);
   1609		ret |= (actual_length != bcnt);
   1610		if (ret) break;
   1611		fw_done += bcnt;
   1612	}
   1613
   1614	trace_firmware("upload of %s : %i / %i ",
   1615		       fw_files[fwidx],fw_done,fw_len);
   1616
   1617	kfree(fw_ptr);
   1618	release_firmware(fw_entry);
   1619
   1620	if (ret) {
   1621		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1622			   "firmware2 upload transfer failure");
   1623		goto done;
   1624	}
   1625
   1626	/* Finish upload */
   1627
   1628	ret |= pvr2_write_register(hdw, 0x9054, 0xffffffff); /*reset hw blocks*/
   1629	ret |= pvr2_write_register(hdw, 0x9058, 0xffffffe8); /*VPU ctrl*/
   1630	ret |= pvr2_issue_simple_cmd(hdw,FX2CMD_MEMSEL | (1 << 8) | (0 << 16));
   1631
   1632	if (ret) {
   1633		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1634			   "firmware2 upload post-proc failure");
   1635	}
   1636
   1637 done:
   1638	if (hdw->hdw_desc->signal_routing_scheme ==
   1639	    PVR2_ROUTING_SCHEME_GOTVIEW) {
   1640		/* Ensure that GPIO 11 is set to output for GOTVIEW
   1641		   hardware. */
   1642		pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
   1643	}
   1644	return ret;
   1645}
   1646
   1647
   1648static const char *pvr2_get_state_name(unsigned int st)
   1649{
   1650	if (st < ARRAY_SIZE(pvr2_state_names)) {
   1651		return pvr2_state_names[st];
   1652	}
   1653	return "???";
   1654}
   1655
   1656static int pvr2_decoder_enable(struct pvr2_hdw *hdw,int enablefl)
   1657{
   1658	/* Even though we really only care about the video decoder chip at
   1659	   this point, we'll broadcast stream on/off to all sub-devices
   1660	   anyway, just in case somebody else wants to hear the
   1661	   command... */
   1662	pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 stream=%s",
   1663		   (enablefl ? "on" : "off"));
   1664	v4l2_device_call_all(&hdw->v4l2_dev, 0, video, s_stream, enablefl);
   1665	v4l2_device_call_all(&hdw->v4l2_dev, 0, audio, s_stream, enablefl);
   1666	if (hdw->decoder_client_id) {
   1667		/* We get here if the encoder has been noticed.  Otherwise
   1668		   we'll issue a warning to the user (which should
   1669		   normally never happen). */
   1670		return 0;
   1671	}
   1672	if (!hdw->flag_decoder_missed) {
   1673		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1674			   "***WARNING*** No decoder present");
   1675		hdw->flag_decoder_missed = !0;
   1676		trace_stbit("flag_decoder_missed",
   1677			    hdw->flag_decoder_missed);
   1678	}
   1679	return -EIO;
   1680}
   1681
   1682
   1683int pvr2_hdw_get_state(struct pvr2_hdw *hdw)
   1684{
   1685	return hdw->master_state;
   1686}
   1687
   1688
   1689static int pvr2_hdw_untrip_unlocked(struct pvr2_hdw *hdw)
   1690{
   1691	if (!hdw->flag_tripped) return 0;
   1692	hdw->flag_tripped = 0;
   1693	pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1694		   "Clearing driver error status");
   1695	return !0;
   1696}
   1697
   1698
   1699int pvr2_hdw_untrip(struct pvr2_hdw *hdw)
   1700{
   1701	int fl;
   1702	LOCK_TAKE(hdw->big_lock); do {
   1703		fl = pvr2_hdw_untrip_unlocked(hdw);
   1704	} while (0); LOCK_GIVE(hdw->big_lock);
   1705	if (fl) pvr2_hdw_state_sched(hdw);
   1706	return 0;
   1707}
   1708
   1709
   1710
   1711
   1712int pvr2_hdw_get_streaming(struct pvr2_hdw *hdw)
   1713{
   1714	return hdw->state_pipeline_req != 0;
   1715}
   1716
   1717
   1718int pvr2_hdw_set_streaming(struct pvr2_hdw *hdw,int enable_flag)
   1719{
   1720	int ret,st;
   1721	LOCK_TAKE(hdw->big_lock);
   1722	pvr2_hdw_untrip_unlocked(hdw);
   1723	if (!enable_flag != !hdw->state_pipeline_req) {
   1724		hdw->state_pipeline_req = enable_flag != 0;
   1725		pvr2_trace(PVR2_TRACE_START_STOP,
   1726			   "/*--TRACE_STREAM--*/ %s",
   1727			   enable_flag ? "enable" : "disable");
   1728	}
   1729	pvr2_hdw_state_sched(hdw);
   1730	LOCK_GIVE(hdw->big_lock);
   1731	if ((ret = pvr2_hdw_wait(hdw,0)) < 0) return ret;
   1732	if (enable_flag) {
   1733		while ((st = hdw->master_state) != PVR2_STATE_RUN) {
   1734			if (st != PVR2_STATE_READY) return -EIO;
   1735			if ((ret = pvr2_hdw_wait(hdw,st)) < 0) return ret;
   1736		}
   1737	}
   1738	return 0;
   1739}
   1740
   1741
   1742int pvr2_hdw_set_stream_type(struct pvr2_hdw *hdw,enum pvr2_config config)
   1743{
   1744	int fl;
   1745	LOCK_TAKE(hdw->big_lock);
   1746	if ((fl = (hdw->desired_stream_type != config)) != 0) {
   1747		hdw->desired_stream_type = config;
   1748		hdw->state_pipeline_config = 0;
   1749		trace_stbit("state_pipeline_config",
   1750			    hdw->state_pipeline_config);
   1751		pvr2_hdw_state_sched(hdw);
   1752	}
   1753	LOCK_GIVE(hdw->big_lock);
   1754	if (fl) return 0;
   1755	return pvr2_hdw_wait(hdw,0);
   1756}
   1757
   1758
   1759static int get_default_tuner_type(struct pvr2_hdw *hdw)
   1760{
   1761	int unit_number = hdw->unit_number;
   1762	int tp = -1;
   1763	if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
   1764		tp = tuner[unit_number];
   1765	}
   1766	if (tp < 0) return -EINVAL;
   1767	hdw->tuner_type = tp;
   1768	hdw->tuner_updated = !0;
   1769	return 0;
   1770}
   1771
   1772
   1773static v4l2_std_id get_default_standard(struct pvr2_hdw *hdw)
   1774{
   1775	int unit_number = hdw->unit_number;
   1776	int tp = 0;
   1777	if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
   1778		tp = video_std[unit_number];
   1779		if (tp) return tp;
   1780	}
   1781	return 0;
   1782}
   1783
   1784
   1785static unsigned int get_default_error_tolerance(struct pvr2_hdw *hdw)
   1786{
   1787	int unit_number = hdw->unit_number;
   1788	int tp = 0;
   1789	if ((unit_number >= 0) && (unit_number < PVR_NUM)) {
   1790		tp = tolerance[unit_number];
   1791	}
   1792	return tp;
   1793}
   1794
   1795
   1796static int pvr2_hdw_check_firmware(struct pvr2_hdw *hdw)
   1797{
   1798	/* Try a harmless request to fetch the eeprom's address over
   1799	   endpoint 1.  See what happens.  Only the full FX2 image can
   1800	   respond to this.  If this probe fails then likely the FX2
   1801	   firmware needs be loaded. */
   1802	int result;
   1803	LOCK_TAKE(hdw->ctl_lock); do {
   1804		hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
   1805		result = pvr2_send_request_ex(hdw,HZ*1,!0,
   1806					   hdw->cmd_buffer,1,
   1807					   hdw->cmd_buffer,1);
   1808		if (result < 0) break;
   1809	} while(0); LOCK_GIVE(hdw->ctl_lock);
   1810	if (result) {
   1811		pvr2_trace(PVR2_TRACE_INIT,
   1812			   "Probe of device endpoint 1 result status %d",
   1813			   result);
   1814	} else {
   1815		pvr2_trace(PVR2_TRACE_INIT,
   1816			   "Probe of device endpoint 1 succeeded");
   1817	}
   1818	return result == 0;
   1819}
   1820
   1821struct pvr2_std_hack {
   1822	v4l2_std_id pat;  /* Pattern to match */
   1823	v4l2_std_id msk;  /* Which bits we care about */
   1824	v4l2_std_id std;  /* What additional standards or default to set */
   1825};
   1826
   1827/* This data structure labels specific combinations of standards from
   1828   tveeprom that we'll try to recognize.  If we recognize one, then assume
   1829   a specified default standard to use.  This is here because tveeprom only
   1830   tells us about available standards not the intended default standard (if
   1831   any) for the device in question.  We guess the default based on what has
   1832   been reported as available.  Note that this is only for guessing a
   1833   default - which can always be overridden explicitly - and if the user
   1834   has otherwise named a default then that default will always be used in
   1835   place of this table. */
   1836static const struct pvr2_std_hack std_eeprom_maps[] = {
   1837	{	/* PAL(B/G) */
   1838		.pat = V4L2_STD_B|V4L2_STD_GH,
   1839		.std = V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_PAL_G,
   1840	},
   1841	{	/* NTSC(M) */
   1842		.pat = V4L2_STD_MN,
   1843		.std = V4L2_STD_NTSC_M,
   1844	},
   1845	{	/* PAL(I) */
   1846		.pat = V4L2_STD_PAL_I,
   1847		.std = V4L2_STD_PAL_I,
   1848	},
   1849	{	/* SECAM(L/L') */
   1850		.pat = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
   1851		.std = V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC,
   1852	},
   1853	{	/* PAL(D/D1/K) */
   1854		.pat = V4L2_STD_DK,
   1855		.std = V4L2_STD_PAL_D|V4L2_STD_PAL_D1|V4L2_STD_PAL_K,
   1856	},
   1857};
   1858
   1859static void pvr2_hdw_setup_std(struct pvr2_hdw *hdw)
   1860{
   1861	char buf[40];
   1862	unsigned int bcnt;
   1863	v4l2_std_id std1,std2,std3;
   1864
   1865	std1 = get_default_standard(hdw);
   1866	std3 = std1 ? 0 : hdw->hdw_desc->default_std_mask;
   1867
   1868	bcnt = pvr2_std_id_to_str(buf,sizeof(buf),hdw->std_mask_eeprom);
   1869	pvr2_trace(PVR2_TRACE_STD,
   1870		   "Supported video standard(s) reported available in hardware: %.*s",
   1871		   bcnt,buf);
   1872
   1873	hdw->std_mask_avail = hdw->std_mask_eeprom;
   1874
   1875	std2 = (std1|std3) & ~hdw->std_mask_avail;
   1876	if (std2) {
   1877		bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std2);
   1878		pvr2_trace(PVR2_TRACE_STD,
   1879			   "Expanding supported video standards to include: %.*s",
   1880			   bcnt,buf);
   1881		hdw->std_mask_avail |= std2;
   1882	}
   1883
   1884	hdw->std_info_cur.def.type_bitmask.valid_bits = hdw->std_mask_avail;
   1885
   1886	if (std1) {
   1887		bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std1);
   1888		pvr2_trace(PVR2_TRACE_STD,
   1889			   "Initial video standard forced to %.*s",
   1890			   bcnt,buf);
   1891		hdw->std_mask_cur = std1;
   1892		hdw->std_dirty = !0;
   1893		return;
   1894	}
   1895	if (std3) {
   1896		bcnt = pvr2_std_id_to_str(buf,sizeof(buf),std3);
   1897		pvr2_trace(PVR2_TRACE_STD,
   1898			   "Initial video standard (determined by device type): %.*s",
   1899			   bcnt, buf);
   1900		hdw->std_mask_cur = std3;
   1901		hdw->std_dirty = !0;
   1902		return;
   1903	}
   1904
   1905	{
   1906		unsigned int idx;
   1907		for (idx = 0; idx < ARRAY_SIZE(std_eeprom_maps); idx++) {
   1908			if (std_eeprom_maps[idx].msk ?
   1909			    ((std_eeprom_maps[idx].pat ^
   1910			     hdw->std_mask_eeprom) &
   1911			     std_eeprom_maps[idx].msk) :
   1912			    (std_eeprom_maps[idx].pat !=
   1913			     hdw->std_mask_eeprom)) continue;
   1914			bcnt = pvr2_std_id_to_str(buf,sizeof(buf),
   1915						  std_eeprom_maps[idx].std);
   1916			pvr2_trace(PVR2_TRACE_STD,
   1917				   "Initial video standard guessed as %.*s",
   1918				   bcnt,buf);
   1919			hdw->std_mask_cur = std_eeprom_maps[idx].std;
   1920			hdw->std_dirty = !0;
   1921			return;
   1922		}
   1923	}
   1924
   1925}
   1926
   1927
   1928static unsigned int pvr2_copy_i2c_addr_list(
   1929	unsigned short *dst, const unsigned char *src,
   1930	unsigned int dst_max)
   1931{
   1932	unsigned int cnt = 0;
   1933	if (!src) return 0;
   1934	while (src[cnt] && (cnt + 1) < dst_max) {
   1935		dst[cnt] = src[cnt];
   1936		cnt++;
   1937	}
   1938	dst[cnt] = I2C_CLIENT_END;
   1939	return cnt;
   1940}
   1941
   1942
   1943static void pvr2_hdw_cx25840_vbi_hack(struct pvr2_hdw *hdw)
   1944{
   1945	/*
   1946	  Mike Isely <isely@pobox.com> 19-Nov-2006 - This bit of nuttiness
   1947	  for cx25840 causes that module to correctly set up its video
   1948	  scaling.  This is really a problem in the cx25840 module itself,
   1949	  but we work around it here.  The problem has not been seen in
   1950	  ivtv because there VBI is supported and set up.  We don't do VBI
   1951	  here (at least not yet) and thus we never attempted to even set
   1952	  it up.
   1953	*/
   1954	struct v4l2_format fmt;
   1955	if (hdw->decoder_client_id != PVR2_CLIENT_ID_CX25840) {
   1956		/* We're not using a cx25840 so don't enable the hack */
   1957		return;
   1958	}
   1959
   1960	pvr2_trace(PVR2_TRACE_INIT,
   1961		   "Module ID %u: Executing cx25840 VBI hack",
   1962		   hdw->decoder_client_id);
   1963	memset(&fmt, 0, sizeof(fmt));
   1964	fmt.type = V4L2_BUF_TYPE_SLICED_VBI_CAPTURE;
   1965	fmt.fmt.sliced.service_lines[0][21] = V4L2_SLICED_CAPTION_525;
   1966	fmt.fmt.sliced.service_lines[1][21] = V4L2_SLICED_CAPTION_525;
   1967	v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
   1968			     vbi, s_sliced_fmt, &fmt.fmt.sliced);
   1969}
   1970
   1971
   1972static int pvr2_hdw_load_subdev(struct pvr2_hdw *hdw,
   1973				const struct pvr2_device_client_desc *cd)
   1974{
   1975	const char *fname;
   1976	unsigned char mid;
   1977	struct v4l2_subdev *sd;
   1978	unsigned int i2ccnt;
   1979	const unsigned char *p;
   1980	/* Arbitrary count - max # i2c addresses we will probe */
   1981	unsigned short i2caddr[25];
   1982
   1983	mid = cd->module_id;
   1984	fname = (mid < ARRAY_SIZE(module_names)) ? module_names[mid] : NULL;
   1985	if (!fname) {
   1986		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   1987			   "Module ID %u for device %s has no name?  The driver might have a configuration problem.",
   1988			   mid,
   1989			   hdw->hdw_desc->description);
   1990		return -EINVAL;
   1991	}
   1992	pvr2_trace(PVR2_TRACE_INIT,
   1993		   "Module ID %u (%s) for device %s being loaded...",
   1994		   mid, fname,
   1995		   hdw->hdw_desc->description);
   1996
   1997	i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, cd->i2c_address_list,
   1998					 ARRAY_SIZE(i2caddr));
   1999	if (!i2ccnt && ((p = (mid < ARRAY_SIZE(module_i2c_addresses)) ?
   2000			 module_i2c_addresses[mid] : NULL) != NULL)) {
   2001		/* Second chance: Try default i2c address list */
   2002		i2ccnt = pvr2_copy_i2c_addr_list(i2caddr, p,
   2003						 ARRAY_SIZE(i2caddr));
   2004		if (i2ccnt) {
   2005			pvr2_trace(PVR2_TRACE_INIT,
   2006				   "Module ID %u: Using default i2c address list",
   2007				   mid);
   2008		}
   2009	}
   2010
   2011	if (!i2ccnt) {
   2012		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   2013			   "Module ID %u (%s) for device %s: No i2c addresses.	The driver might have a configuration problem.",
   2014			   mid, fname, hdw->hdw_desc->description);
   2015		return -EINVAL;
   2016	}
   2017
   2018	if (i2ccnt == 1) {
   2019		pvr2_trace(PVR2_TRACE_INIT,
   2020			   "Module ID %u: Setting up with specified i2c address 0x%x",
   2021			   mid, i2caddr[0]);
   2022		sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
   2023					 fname, i2caddr[0], NULL);
   2024	} else {
   2025		pvr2_trace(PVR2_TRACE_INIT,
   2026			   "Module ID %u: Setting up with address probe list",
   2027			   mid);
   2028		sd = v4l2_i2c_new_subdev(&hdw->v4l2_dev, &hdw->i2c_adap,
   2029					 fname, 0, i2caddr);
   2030	}
   2031
   2032	if (!sd) {
   2033		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   2034			   "Module ID %u (%s) for device %s failed to load.  Possible missing sub-device kernel module or initialization failure within module.",
   2035			   mid, fname, hdw->hdw_desc->description);
   2036		return -EIO;
   2037	}
   2038
   2039	/* Tag this sub-device instance with the module ID we know about.
   2040	   In other places we'll use that tag to determine if the instance
   2041	   requires special handling. */
   2042	sd->grp_id = mid;
   2043
   2044	pvr2_trace(PVR2_TRACE_INFO, "Attached sub-driver %s", fname);
   2045
   2046
   2047	/* client-specific setup... */
   2048	switch (mid) {
   2049	case PVR2_CLIENT_ID_CX25840:
   2050	case PVR2_CLIENT_ID_SAA7115:
   2051		hdw->decoder_client_id = mid;
   2052		break;
   2053	default: break;
   2054	}
   2055
   2056	return 0;
   2057}
   2058
   2059
   2060static void pvr2_hdw_load_modules(struct pvr2_hdw *hdw)
   2061{
   2062	unsigned int idx;
   2063	const struct pvr2_string_table *cm;
   2064	const struct pvr2_device_client_table *ct;
   2065	int okFl = !0;
   2066
   2067	cm = &hdw->hdw_desc->client_modules;
   2068	for (idx = 0; idx < cm->cnt; idx++) {
   2069		request_module(cm->lst[idx]);
   2070	}
   2071
   2072	ct = &hdw->hdw_desc->client_table;
   2073	for (idx = 0; idx < ct->cnt; idx++) {
   2074		if (pvr2_hdw_load_subdev(hdw, &ct->lst[idx]) < 0) okFl = 0;
   2075	}
   2076	if (!okFl) {
   2077		hdw->flag_modulefail = !0;
   2078		pvr2_hdw_render_useless(hdw);
   2079	}
   2080}
   2081
   2082
   2083static void pvr2_hdw_setup_low(struct pvr2_hdw *hdw)
   2084{
   2085	int ret;
   2086	unsigned int idx;
   2087	struct pvr2_ctrl *cptr;
   2088	int reloadFl = 0;
   2089	if (hdw->hdw_desc->fx2_firmware.cnt) {
   2090		if (!reloadFl) {
   2091			reloadFl =
   2092				(hdw->usb_intf->cur_altsetting->desc.bNumEndpoints
   2093				 == 0);
   2094			if (reloadFl) {
   2095				pvr2_trace(PVR2_TRACE_INIT,
   2096					   "USB endpoint config looks strange; possibly firmware needs to be loaded");
   2097			}
   2098		}
   2099		if (!reloadFl) {
   2100			reloadFl = !pvr2_hdw_check_firmware(hdw);
   2101			if (reloadFl) {
   2102				pvr2_trace(PVR2_TRACE_INIT,
   2103					   "Check for FX2 firmware failed; possibly firmware needs to be loaded");
   2104			}
   2105		}
   2106		if (reloadFl) {
   2107			if (pvr2_upload_firmware1(hdw) != 0) {
   2108				pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   2109					   "Failure uploading firmware1");
   2110			}
   2111			return;
   2112		}
   2113	}
   2114	hdw->fw1_state = FW1_STATE_OK;
   2115
   2116	if (!pvr2_hdw_dev_ok(hdw)) return;
   2117
   2118	hdw->force_dirty = !0;
   2119
   2120	if (!hdw->hdw_desc->flag_no_powerup) {
   2121		pvr2_hdw_cmd_powerup(hdw);
   2122		if (!pvr2_hdw_dev_ok(hdw)) return;
   2123	}
   2124
   2125	/* Take the IR chip out of reset, if appropriate */
   2126	if (hdw->ir_scheme_active == PVR2_IR_SCHEME_ZILOG) {
   2127		pvr2_issue_simple_cmd(hdw,
   2128				      FX2CMD_HCW_ZILOG_RESET |
   2129				      (1 << 8) |
   2130				      ((0) << 16));
   2131	}
   2132
   2133	/* This step MUST happen after the earlier powerup step */
   2134	pvr2_i2c_core_init(hdw);
   2135	if (!pvr2_hdw_dev_ok(hdw)) return;
   2136
   2137	/* Reset demod only on Hauppauge 160xxx platform */
   2138	if (le16_to_cpu(hdw->usb_dev->descriptor.idVendor) == 0x2040 &&
   2139	    (le16_to_cpu(hdw->usb_dev->descriptor.idProduct) == 0x7502 ||
   2140	     le16_to_cpu(hdw->usb_dev->descriptor.idProduct) == 0x7510)) {
   2141		pr_info("%s(): resetting 160xxx demod\n", __func__);
   2142		/* TODO: not sure this is proper place to reset once only */
   2143		pvr2_issue_simple_cmd(hdw,
   2144				      FX2CMD_HCW_DEMOD_RESET_PIN |
   2145				      (1 << 8) |
   2146				      ((0) << 16));
   2147		usleep_range(10000, 10500);
   2148		pvr2_issue_simple_cmd(hdw,
   2149				      FX2CMD_HCW_DEMOD_RESET_PIN |
   2150				      (1 << 8) |
   2151				      ((1) << 16));
   2152		usleep_range(10000, 10500);
   2153	}
   2154
   2155	pvr2_hdw_load_modules(hdw);
   2156	if (!pvr2_hdw_dev_ok(hdw)) return;
   2157
   2158	v4l2_device_call_all(&hdw->v4l2_dev, 0, core, load_fw);
   2159
   2160	for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
   2161		cptr = hdw->controls + idx;
   2162		if (cptr->info->skip_init) continue;
   2163		if (!cptr->info->set_value) continue;
   2164		cptr->info->set_value(cptr,~0,cptr->info->default_value);
   2165	}
   2166
   2167	pvr2_hdw_cx25840_vbi_hack(hdw);
   2168
   2169	/* Set up special default values for the television and radio
   2170	   frequencies here.  It's not really important what these defaults
   2171	   are, but I set them to something usable in the Chicago area just
   2172	   to make driver testing a little easier. */
   2173
   2174	hdw->freqValTelevision = default_tv_freq;
   2175	hdw->freqValRadio = default_radio_freq;
   2176
   2177	// Do not use pvr2_reset_ctl_endpoints() here.  It is not
   2178	// thread-safe against the normal pvr2_send_request() mechanism.
   2179	// (We should make it thread safe).
   2180
   2181	if (hdw->hdw_desc->flag_has_hauppauge_rom) {
   2182		ret = pvr2_hdw_get_eeprom_addr(hdw);
   2183		if (!pvr2_hdw_dev_ok(hdw)) return;
   2184		if (ret < 0) {
   2185			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   2186				   "Unable to determine location of eeprom, skipping");
   2187		} else {
   2188			hdw->eeprom_addr = ret;
   2189			pvr2_eeprom_analyze(hdw);
   2190			if (!pvr2_hdw_dev_ok(hdw)) return;
   2191		}
   2192	} else {
   2193		hdw->tuner_type = hdw->hdw_desc->default_tuner_type;
   2194		hdw->tuner_updated = !0;
   2195		hdw->std_mask_eeprom = V4L2_STD_ALL;
   2196	}
   2197
   2198	if (hdw->serial_number) {
   2199		idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
   2200				"sn-%lu", hdw->serial_number);
   2201	} else if (hdw->unit_number >= 0) {
   2202		idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
   2203				"unit-%c",
   2204				hdw->unit_number + 'a');
   2205	} else {
   2206		idx = scnprintf(hdw->identifier, sizeof(hdw->identifier) - 1,
   2207				"unit-??");
   2208	}
   2209	hdw->identifier[idx] = 0;
   2210
   2211	pvr2_hdw_setup_std(hdw);
   2212
   2213	if (!get_default_tuner_type(hdw)) {
   2214		pvr2_trace(PVR2_TRACE_INIT,
   2215			   "pvr2_hdw_setup: Tuner type overridden to %d",
   2216			   hdw->tuner_type);
   2217	}
   2218
   2219
   2220	if (!pvr2_hdw_dev_ok(hdw)) return;
   2221
   2222	if (hdw->hdw_desc->signal_routing_scheme ==
   2223	    PVR2_ROUTING_SCHEME_GOTVIEW) {
   2224		/* Ensure that GPIO 11 is set to output for GOTVIEW
   2225		   hardware. */
   2226		pvr2_hdw_gpio_chg_dir(hdw,(1 << 11),~0);
   2227	}
   2228
   2229	pvr2_hdw_commit_setup(hdw);
   2230
   2231	hdw->vid_stream = pvr2_stream_create();
   2232	if (!pvr2_hdw_dev_ok(hdw)) return;
   2233	pvr2_trace(PVR2_TRACE_INIT,
   2234		   "pvr2_hdw_setup: video stream is %p",hdw->vid_stream);
   2235	if (hdw->vid_stream) {
   2236		idx = get_default_error_tolerance(hdw);
   2237		if (idx) {
   2238			pvr2_trace(PVR2_TRACE_INIT,
   2239				   "pvr2_hdw_setup: video stream %p setting tolerance %u",
   2240				   hdw->vid_stream,idx);
   2241		}
   2242		pvr2_stream_setup(hdw->vid_stream,hdw->usb_dev,
   2243				  PVR2_VID_ENDPOINT,idx);
   2244	}
   2245
   2246	if (!pvr2_hdw_dev_ok(hdw)) return;
   2247
   2248	hdw->flag_init_ok = !0;
   2249
   2250	pvr2_hdw_state_sched(hdw);
   2251}
   2252
   2253
   2254/* Set up the structure and attempt to put the device into a usable state.
   2255   This can be a time-consuming operation, which is why it is not done
   2256   internally as part of the create() step. */
   2257static void pvr2_hdw_setup(struct pvr2_hdw *hdw)
   2258{
   2259	pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) begin",hdw);
   2260	do {
   2261		pvr2_hdw_setup_low(hdw);
   2262		pvr2_trace(PVR2_TRACE_INIT,
   2263			   "pvr2_hdw_setup(hdw=%p) done, ok=%d init_ok=%d",
   2264			   hdw,pvr2_hdw_dev_ok(hdw),hdw->flag_init_ok);
   2265		if (pvr2_hdw_dev_ok(hdw)) {
   2266			if (hdw->flag_init_ok) {
   2267				pvr2_trace(
   2268					PVR2_TRACE_INFO,
   2269					"Device initialization completed successfully.");
   2270				break;
   2271			}
   2272			if (hdw->fw1_state == FW1_STATE_RELOAD) {
   2273				pvr2_trace(
   2274					PVR2_TRACE_INFO,
   2275					"Device microcontroller firmware (re)loaded; it should now reset and reconnect.");
   2276				break;
   2277			}
   2278			pvr2_trace(
   2279				PVR2_TRACE_ERROR_LEGS,
   2280				"Device initialization was not successful.");
   2281			if (hdw->fw1_state == FW1_STATE_MISSING) {
   2282				pvr2_trace(
   2283					PVR2_TRACE_ERROR_LEGS,
   2284					"Giving up since device microcontroller firmware appears to be missing.");
   2285				break;
   2286			}
   2287		}
   2288		if (hdw->flag_modulefail) {
   2289			pvr2_trace(
   2290				PVR2_TRACE_ERROR_LEGS,
   2291				"***WARNING*** pvrusb2 driver initialization failed due to the failure of one or more sub-device kernel modules.");
   2292			pvr2_trace(
   2293				PVR2_TRACE_ERROR_LEGS,
   2294				"You need to resolve the failing condition before this driver can function.  There should be some earlier messages giving more information about the problem.");
   2295			break;
   2296		}
   2297		if (procreload) {
   2298			pvr2_trace(
   2299				PVR2_TRACE_ERROR_LEGS,
   2300				"Attempting pvrusb2 recovery by reloading primary firmware.");
   2301			pvr2_trace(
   2302				PVR2_TRACE_ERROR_LEGS,
   2303				"If this works, device should disconnect and reconnect in a sane state.");
   2304			hdw->fw1_state = FW1_STATE_UNKNOWN;
   2305			pvr2_upload_firmware1(hdw);
   2306		} else {
   2307			pvr2_trace(
   2308				PVR2_TRACE_ERROR_LEGS,
   2309				"***WARNING*** pvrusb2 device hardware appears to be jammed and I can't clear it.");
   2310			pvr2_trace(
   2311				PVR2_TRACE_ERROR_LEGS,
   2312				"You might need to power cycle the pvrusb2 device in order to recover.");
   2313		}
   2314	} while (0);
   2315	pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_setup(hdw=%p) end",hdw);
   2316}
   2317
   2318
   2319/* Perform second stage initialization.  Set callback pointer first so that
   2320   we can avoid a possible initialization race (if the kernel thread runs
   2321   before the callback has been set). */
   2322int pvr2_hdw_initialize(struct pvr2_hdw *hdw,
   2323			void (*callback_func)(void *),
   2324			void *callback_data)
   2325{
   2326	LOCK_TAKE(hdw->big_lock); do {
   2327		if (hdw->flag_disconnected) {
   2328			/* Handle a race here: If we're already
   2329			   disconnected by this point, then give up.  If we
   2330			   get past this then we'll remain connected for
   2331			   the duration of initialization since the entire
   2332			   initialization sequence is now protected by the
   2333			   big_lock. */
   2334			break;
   2335		}
   2336		hdw->state_data = callback_data;
   2337		hdw->state_func = callback_func;
   2338		pvr2_hdw_setup(hdw);
   2339	} while (0); LOCK_GIVE(hdw->big_lock);
   2340	return hdw->flag_init_ok;
   2341}
   2342
   2343
   2344/* Create, set up, and return a structure for interacting with the
   2345   underlying hardware.  */
   2346struct pvr2_hdw *pvr2_hdw_create(struct usb_interface *intf,
   2347				 const struct usb_device_id *devid)
   2348{
   2349	unsigned int idx,cnt1,cnt2,m;
   2350	struct pvr2_hdw *hdw = NULL;
   2351	int valid_std_mask;
   2352	struct pvr2_ctrl *cptr;
   2353	struct usb_device *usb_dev;
   2354	const struct pvr2_device_desc *hdw_desc;
   2355	__u8 ifnum;
   2356	struct v4l2_queryctrl qctrl;
   2357	struct pvr2_ctl_info *ciptr;
   2358
   2359	usb_dev = interface_to_usbdev(intf);
   2360
   2361	hdw_desc = (const struct pvr2_device_desc *)(devid->driver_info);
   2362
   2363	if (hdw_desc == NULL) {
   2364		pvr2_trace(PVR2_TRACE_INIT, "pvr2_hdw_create: No device description pointer, unable to continue.");
   2365		pvr2_trace(PVR2_TRACE_INIT,
   2366			   "If you have a new device type, please contact Mike Isely <isely@pobox.com> to get it included in the driver");
   2367		goto fail;
   2368	}
   2369
   2370	hdw = kzalloc(sizeof(*hdw),GFP_KERNEL);
   2371	pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_create: hdw=%p, type \"%s\"",
   2372		   hdw,hdw_desc->description);
   2373	pvr2_trace(PVR2_TRACE_INFO, "Hardware description: %s",
   2374		hdw_desc->description);
   2375	if (hdw_desc->flag_is_experimental) {
   2376		pvr2_trace(PVR2_TRACE_INFO, "**********");
   2377		pvr2_trace(PVR2_TRACE_INFO,
   2378			   "***WARNING*** Support for this device (%s) is experimental.",
   2379							      hdw_desc->description);
   2380		pvr2_trace(PVR2_TRACE_INFO,
   2381			   "Important functionality might not be entirely working.");
   2382		pvr2_trace(PVR2_TRACE_INFO,
   2383			   "Please consider contacting the driver author to help with further stabilization of the driver.");
   2384		pvr2_trace(PVR2_TRACE_INFO, "**********");
   2385	}
   2386	if (!hdw) goto fail;
   2387
   2388	timer_setup(&hdw->quiescent_timer, pvr2_hdw_quiescent_timeout, 0);
   2389
   2390	timer_setup(&hdw->decoder_stabilization_timer,
   2391		    pvr2_hdw_decoder_stabilization_timeout, 0);
   2392
   2393	timer_setup(&hdw->encoder_wait_timer, pvr2_hdw_encoder_wait_timeout,
   2394		    0);
   2395
   2396	timer_setup(&hdw->encoder_run_timer, pvr2_hdw_encoder_run_timeout, 0);
   2397
   2398	hdw->master_state = PVR2_STATE_DEAD;
   2399
   2400	init_waitqueue_head(&hdw->state_wait_data);
   2401
   2402	hdw->tuner_signal_stale = !0;
   2403	cx2341x_fill_defaults(&hdw->enc_ctl_state);
   2404
   2405	/* Calculate which inputs are OK */
   2406	m = 0;
   2407	if (hdw_desc->flag_has_analogtuner) m |= 1 << PVR2_CVAL_INPUT_TV;
   2408	if (hdw_desc->digital_control_scheme != PVR2_DIGITAL_SCHEME_NONE) {
   2409		m |= 1 << PVR2_CVAL_INPUT_DTV;
   2410	}
   2411	if (hdw_desc->flag_has_svideo) m |= 1 << PVR2_CVAL_INPUT_SVIDEO;
   2412	if (hdw_desc->flag_has_composite) m |= 1 << PVR2_CVAL_INPUT_COMPOSITE;
   2413	if (hdw_desc->flag_has_fmradio) m |= 1 << PVR2_CVAL_INPUT_RADIO;
   2414	hdw->input_avail_mask = m;
   2415	hdw->input_allowed_mask = hdw->input_avail_mask;
   2416
   2417	/* If not a hybrid device, pathway_state never changes.  So
   2418	   initialize it here to what it should forever be. */
   2419	if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_DTV))) {
   2420		hdw->pathway_state = PVR2_PATHWAY_ANALOG;
   2421	} else if (!(hdw->input_avail_mask & (1 << PVR2_CVAL_INPUT_TV))) {
   2422		hdw->pathway_state = PVR2_PATHWAY_DIGITAL;
   2423	}
   2424
   2425	hdw->control_cnt = CTRLDEF_COUNT;
   2426	hdw->control_cnt += MPEGDEF_COUNT;
   2427	hdw->controls = kcalloc(hdw->control_cnt, sizeof(struct pvr2_ctrl),
   2428				GFP_KERNEL);
   2429	if (!hdw->controls) goto fail;
   2430	hdw->hdw_desc = hdw_desc;
   2431	hdw->ir_scheme_active = hdw->hdw_desc->ir_scheme;
   2432	for (idx = 0; idx < hdw->control_cnt; idx++) {
   2433		cptr = hdw->controls + idx;
   2434		cptr->hdw = hdw;
   2435	}
   2436	for (idx = 0; idx < 32; idx++) {
   2437		hdw->std_mask_ptrs[idx] = hdw->std_mask_names[idx];
   2438	}
   2439	for (idx = 0; idx < CTRLDEF_COUNT; idx++) {
   2440		cptr = hdw->controls + idx;
   2441		cptr->info = control_defs+idx;
   2442	}
   2443
   2444	/* Ensure that default input choice is a valid one. */
   2445	m = hdw->input_avail_mask;
   2446	if (m) for (idx = 0; idx < (sizeof(m) << 3); idx++) {
   2447		if (!((1UL << idx) & m)) continue;
   2448		hdw->input_val = idx;
   2449		break;
   2450	}
   2451
   2452	/* Define and configure additional controls from cx2341x module. */
   2453	hdw->mpeg_ctrl_info = kcalloc(MPEGDEF_COUNT,
   2454				      sizeof(*(hdw->mpeg_ctrl_info)),
   2455				      GFP_KERNEL);
   2456	if (!hdw->mpeg_ctrl_info) goto fail;
   2457	for (idx = 0; idx < MPEGDEF_COUNT; idx++) {
   2458		cptr = hdw->controls + idx + CTRLDEF_COUNT;
   2459		ciptr = &(hdw->mpeg_ctrl_info[idx].info);
   2460		ciptr->desc = hdw->mpeg_ctrl_info[idx].desc;
   2461		ciptr->name = mpeg_ids[idx].strid;
   2462		ciptr->v4l_id = mpeg_ids[idx].id;
   2463		ciptr->skip_init = !0;
   2464		ciptr->get_value = ctrl_cx2341x_get;
   2465		ciptr->get_v4lflags = ctrl_cx2341x_getv4lflags;
   2466		ciptr->is_dirty = ctrl_cx2341x_is_dirty;
   2467		if (!idx) ciptr->clear_dirty = ctrl_cx2341x_clear_dirty;
   2468		qctrl.id = ciptr->v4l_id;
   2469		cx2341x_ctrl_query(&hdw->enc_ctl_state,&qctrl);
   2470		if (!(qctrl.flags & V4L2_CTRL_FLAG_READ_ONLY)) {
   2471			ciptr->set_value = ctrl_cx2341x_set;
   2472		}
   2473		strscpy(hdw->mpeg_ctrl_info[idx].desc, qctrl.name,
   2474			sizeof(hdw->mpeg_ctrl_info[idx].desc));
   2475		ciptr->default_value = qctrl.default_value;
   2476		switch (qctrl.type) {
   2477		default:
   2478		case V4L2_CTRL_TYPE_INTEGER:
   2479			ciptr->type = pvr2_ctl_int;
   2480			ciptr->def.type_int.min_value = qctrl.minimum;
   2481			ciptr->def.type_int.max_value = qctrl.maximum;
   2482			break;
   2483		case V4L2_CTRL_TYPE_BOOLEAN:
   2484			ciptr->type = pvr2_ctl_bool;
   2485			break;
   2486		case V4L2_CTRL_TYPE_MENU:
   2487			ciptr->type = pvr2_ctl_enum;
   2488			ciptr->def.type_enum.value_names =
   2489				cx2341x_ctrl_get_menu(&hdw->enc_ctl_state,
   2490								ciptr->v4l_id);
   2491			for (cnt1 = 0;
   2492			     ciptr->def.type_enum.value_names[cnt1] != NULL;
   2493			     cnt1++) { }
   2494			ciptr->def.type_enum.count = cnt1;
   2495			break;
   2496		}
   2497		cptr->info = ciptr;
   2498	}
   2499
   2500	// Initialize control data regarding video standard masks
   2501	valid_std_mask = pvr2_std_get_usable();
   2502	for (idx = 0; idx < 32; idx++) {
   2503		if (!(valid_std_mask & (1UL << idx))) continue;
   2504		cnt1 = pvr2_std_id_to_str(
   2505			hdw->std_mask_names[idx],
   2506			sizeof(hdw->std_mask_names[idx])-1,
   2507			1UL << idx);
   2508		hdw->std_mask_names[idx][cnt1] = 0;
   2509	}
   2510	cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDAVAIL);
   2511	if (cptr) {
   2512		memcpy(&hdw->std_info_avail,cptr->info,
   2513		       sizeof(hdw->std_info_avail));
   2514		cptr->info = &hdw->std_info_avail;
   2515		hdw->std_info_avail.def.type_bitmask.bit_names =
   2516			hdw->std_mask_ptrs;
   2517		hdw->std_info_avail.def.type_bitmask.valid_bits =
   2518			valid_std_mask;
   2519	}
   2520	cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDCUR);
   2521	if (cptr) {
   2522		memcpy(&hdw->std_info_cur,cptr->info,
   2523		       sizeof(hdw->std_info_cur));
   2524		cptr->info = &hdw->std_info_cur;
   2525		hdw->std_info_cur.def.type_bitmask.bit_names =
   2526			hdw->std_mask_ptrs;
   2527		hdw->std_info_cur.def.type_bitmask.valid_bits =
   2528			valid_std_mask;
   2529	}
   2530	cptr = pvr2_hdw_get_ctrl_by_id(hdw,PVR2_CID_STDDETECT);
   2531	if (cptr) {
   2532		memcpy(&hdw->std_info_detect,cptr->info,
   2533		       sizeof(hdw->std_info_detect));
   2534		cptr->info = &hdw->std_info_detect;
   2535		hdw->std_info_detect.def.type_bitmask.bit_names =
   2536			hdw->std_mask_ptrs;
   2537		hdw->std_info_detect.def.type_bitmask.valid_bits =
   2538			valid_std_mask;
   2539	}
   2540
   2541	hdw->cropcap_stale = !0;
   2542	hdw->eeprom_addr = -1;
   2543	hdw->unit_number = -1;
   2544	hdw->v4l_minor_number_video = -1;
   2545	hdw->v4l_minor_number_vbi = -1;
   2546	hdw->v4l_minor_number_radio = -1;
   2547	hdw->ctl_write_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
   2548	if (!hdw->ctl_write_buffer) goto fail;
   2549	hdw->ctl_read_buffer = kmalloc(PVR2_CTL_BUFFSIZE,GFP_KERNEL);
   2550	if (!hdw->ctl_read_buffer) goto fail;
   2551	hdw->ctl_write_urb = usb_alloc_urb(0,GFP_KERNEL);
   2552	if (!hdw->ctl_write_urb) goto fail;
   2553	hdw->ctl_read_urb = usb_alloc_urb(0,GFP_KERNEL);
   2554	if (!hdw->ctl_read_urb) goto fail;
   2555
   2556	if (v4l2_device_register(&intf->dev, &hdw->v4l2_dev) != 0) {
   2557		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   2558			   "Error registering with v4l core, giving up");
   2559		goto fail;
   2560	}
   2561	mutex_lock(&pvr2_unit_mtx);
   2562	do {
   2563		for (idx = 0; idx < PVR_NUM; idx++) {
   2564			if (unit_pointers[idx]) continue;
   2565			hdw->unit_number = idx;
   2566			unit_pointers[idx] = hdw;
   2567			break;
   2568		}
   2569	} while (0);
   2570	mutex_unlock(&pvr2_unit_mtx);
   2571
   2572	INIT_WORK(&hdw->workpoll, pvr2_hdw_worker_poll);
   2573
   2574	if (hdw->unit_number == -1)
   2575		goto fail;
   2576
   2577	cnt1 = 0;
   2578	cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"pvrusb2");
   2579	cnt1 += cnt2;
   2580	if (hdw->unit_number >= 0) {
   2581		cnt2 = scnprintf(hdw->name+cnt1,sizeof(hdw->name)-cnt1,"_%c",
   2582				 ('a' + hdw->unit_number));
   2583		cnt1 += cnt2;
   2584	}
   2585	if (cnt1 >= sizeof(hdw->name)) cnt1 = sizeof(hdw->name)-1;
   2586	hdw->name[cnt1] = 0;
   2587
   2588	pvr2_trace(PVR2_TRACE_INIT,"Driver unit number is %d, name is %s",
   2589		   hdw->unit_number,hdw->name);
   2590
   2591	hdw->tuner_type = -1;
   2592	hdw->flag_ok = !0;
   2593
   2594	hdw->usb_intf = intf;
   2595	hdw->usb_dev = usb_dev;
   2596
   2597	usb_make_path(hdw->usb_dev, hdw->bus_info, sizeof(hdw->bus_info));
   2598
   2599	ifnum = hdw->usb_intf->cur_altsetting->desc.bInterfaceNumber;
   2600	usb_set_interface(hdw->usb_dev,ifnum,0);
   2601
   2602	mutex_init(&hdw->ctl_lock_mutex);
   2603	mutex_init(&hdw->big_lock_mutex);
   2604
   2605	return hdw;
   2606 fail:
   2607	if (hdw) {
   2608		del_timer_sync(&hdw->quiescent_timer);
   2609		del_timer_sync(&hdw->decoder_stabilization_timer);
   2610		del_timer_sync(&hdw->encoder_run_timer);
   2611		del_timer_sync(&hdw->encoder_wait_timer);
   2612		flush_work(&hdw->workpoll);
   2613		usb_free_urb(hdw->ctl_read_urb);
   2614		usb_free_urb(hdw->ctl_write_urb);
   2615		kfree(hdw->ctl_read_buffer);
   2616		kfree(hdw->ctl_write_buffer);
   2617		kfree(hdw->controls);
   2618		kfree(hdw->mpeg_ctrl_info);
   2619		kfree(hdw);
   2620	}
   2621	return NULL;
   2622}
   2623
   2624
   2625/* Remove _all_ associations between this driver and the underlying USB
   2626   layer. */
   2627static void pvr2_hdw_remove_usb_stuff(struct pvr2_hdw *hdw)
   2628{
   2629	if (hdw->flag_disconnected) return;
   2630	pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_remove_usb_stuff: hdw=%p",hdw);
   2631	if (hdw->ctl_read_urb) {
   2632		usb_kill_urb(hdw->ctl_read_urb);
   2633		usb_free_urb(hdw->ctl_read_urb);
   2634		hdw->ctl_read_urb = NULL;
   2635	}
   2636	if (hdw->ctl_write_urb) {
   2637		usb_kill_urb(hdw->ctl_write_urb);
   2638		usb_free_urb(hdw->ctl_write_urb);
   2639		hdw->ctl_write_urb = NULL;
   2640	}
   2641	if (hdw->ctl_read_buffer) {
   2642		kfree(hdw->ctl_read_buffer);
   2643		hdw->ctl_read_buffer = NULL;
   2644	}
   2645	if (hdw->ctl_write_buffer) {
   2646		kfree(hdw->ctl_write_buffer);
   2647		hdw->ctl_write_buffer = NULL;
   2648	}
   2649	hdw->flag_disconnected = !0;
   2650	/* If we don't do this, then there will be a dangling struct device
   2651	   reference to our disappearing device persisting inside the V4L
   2652	   core... */
   2653	v4l2_device_disconnect(&hdw->v4l2_dev);
   2654	hdw->usb_dev = NULL;
   2655	hdw->usb_intf = NULL;
   2656	pvr2_hdw_render_useless(hdw);
   2657}
   2658
   2659void pvr2_hdw_set_v4l2_dev(struct pvr2_hdw *hdw, struct video_device *vdev)
   2660{
   2661	vdev->v4l2_dev = &hdw->v4l2_dev;
   2662}
   2663
   2664/* Destroy hardware interaction structure */
   2665void pvr2_hdw_destroy(struct pvr2_hdw *hdw)
   2666{
   2667	if (!hdw) return;
   2668	pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_destroy: hdw=%p",hdw);
   2669	flush_work(&hdw->workpoll);
   2670	del_timer_sync(&hdw->quiescent_timer);
   2671	del_timer_sync(&hdw->decoder_stabilization_timer);
   2672	del_timer_sync(&hdw->encoder_run_timer);
   2673	del_timer_sync(&hdw->encoder_wait_timer);
   2674	if (hdw->fw_buffer) {
   2675		kfree(hdw->fw_buffer);
   2676		hdw->fw_buffer = NULL;
   2677	}
   2678	if (hdw->vid_stream) {
   2679		pvr2_stream_destroy(hdw->vid_stream);
   2680		hdw->vid_stream = NULL;
   2681	}
   2682	v4l2_device_unregister(&hdw->v4l2_dev);
   2683	pvr2_hdw_disconnect(hdw);
   2684	mutex_lock(&pvr2_unit_mtx);
   2685	do {
   2686		if ((hdw->unit_number >= 0) &&
   2687		    (hdw->unit_number < PVR_NUM) &&
   2688		    (unit_pointers[hdw->unit_number] == hdw)) {
   2689			unit_pointers[hdw->unit_number] = NULL;
   2690		}
   2691	} while (0);
   2692	mutex_unlock(&pvr2_unit_mtx);
   2693	kfree(hdw->controls);
   2694	kfree(hdw->mpeg_ctrl_info);
   2695	kfree(hdw);
   2696}
   2697
   2698
   2699int pvr2_hdw_dev_ok(struct pvr2_hdw *hdw)
   2700{
   2701	return (hdw && hdw->flag_ok);
   2702}
   2703
   2704
   2705/* Called when hardware has been unplugged */
   2706void pvr2_hdw_disconnect(struct pvr2_hdw *hdw)
   2707{
   2708	pvr2_trace(PVR2_TRACE_INIT,"pvr2_hdw_disconnect(hdw=%p)",hdw);
   2709	LOCK_TAKE(hdw->big_lock);
   2710	pvr2_i2c_core_done(hdw);
   2711	LOCK_TAKE(hdw->ctl_lock);
   2712	pvr2_hdw_remove_usb_stuff(hdw);
   2713	LOCK_GIVE(hdw->ctl_lock);
   2714	LOCK_GIVE(hdw->big_lock);
   2715}
   2716
   2717
   2718/* Get the number of defined controls */
   2719unsigned int pvr2_hdw_get_ctrl_count(struct pvr2_hdw *hdw)
   2720{
   2721	return hdw->control_cnt;
   2722}
   2723
   2724
   2725/* Retrieve a control handle given its index (0..count-1) */
   2726struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_index(struct pvr2_hdw *hdw,
   2727					     unsigned int idx)
   2728{
   2729	if (idx >= hdw->control_cnt) return NULL;
   2730	return hdw->controls + idx;
   2731}
   2732
   2733
   2734/* Retrieve a control handle given its index (0..count-1) */
   2735struct pvr2_ctrl *pvr2_hdw_get_ctrl_by_id(struct pvr2_hdw *hdw,
   2736					  unsigned int ctl_id)
   2737{
   2738	struct pvr2_ctrl *cptr;
   2739	unsigned int idx;
   2740	int i;
   2741
   2742	/* This could be made a lot more efficient, but for now... */
   2743	for (idx = 0; idx < hdw->control_cnt; idx++) {
   2744		cptr = hdw->controls + idx;
   2745		i = cptr->info->internal_id;
   2746		if (i && (i == ctl_id)) return cptr;
   2747	}
   2748	return NULL;
   2749}
   2750
   2751
   2752/* Given a V4L ID, retrieve the control structure associated with it. */
   2753struct pvr2_ctrl *pvr2_hdw_get_ctrl_v4l(struct pvr2_hdw *hdw,unsigned int ctl_id)
   2754{
   2755	struct pvr2_ctrl *cptr;
   2756	unsigned int idx;
   2757	int i;
   2758
   2759	/* This could be made a lot more efficient, but for now... */
   2760	for (idx = 0; idx < hdw->control_cnt; idx++) {
   2761		cptr = hdw->controls + idx;
   2762		i = cptr->info->v4l_id;
   2763		if (i && (i == ctl_id)) return cptr;
   2764	}
   2765	return NULL;
   2766}
   2767
   2768
   2769/* Given a V4L ID for its immediate predecessor, retrieve the control
   2770   structure associated with it. */
   2771struct pvr2_ctrl *pvr2_hdw_get_ctrl_nextv4l(struct pvr2_hdw *hdw,
   2772					    unsigned int ctl_id)
   2773{
   2774	struct pvr2_ctrl *cptr,*cp2;
   2775	unsigned int idx;
   2776	int i;
   2777
   2778	/* This could be made a lot more efficient, but for now... */
   2779	cp2 = NULL;
   2780	for (idx = 0; idx < hdw->control_cnt; idx++) {
   2781		cptr = hdw->controls + idx;
   2782		i = cptr->info->v4l_id;
   2783		if (!i) continue;
   2784		if (i <= ctl_id) continue;
   2785		if (cp2 && (cp2->info->v4l_id < i)) continue;
   2786		cp2 = cptr;
   2787	}
   2788	return cp2;
   2789	return NULL;
   2790}
   2791
   2792
   2793static const char *get_ctrl_typename(enum pvr2_ctl_type tp)
   2794{
   2795	switch (tp) {
   2796	case pvr2_ctl_int: return "integer";
   2797	case pvr2_ctl_enum: return "enum";
   2798	case pvr2_ctl_bool: return "boolean";
   2799	case pvr2_ctl_bitmask: return "bitmask";
   2800	}
   2801	return "";
   2802}
   2803
   2804
   2805static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
   2806				    const char *name, int val)
   2807{
   2808	struct v4l2_control ctrl;
   2809	struct v4l2_subdev *sd;
   2810
   2811	pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 %s=%d", name, val);
   2812	memset(&ctrl, 0, sizeof(ctrl));
   2813	ctrl.id = id;
   2814	ctrl.value = val;
   2815
   2816	v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev)
   2817		v4l2_s_ctrl(NULL, sd->ctrl_handler, &ctrl);
   2818}
   2819
   2820#define PVR2_SUBDEV_SET_CONTROL(hdw, id, lab) \
   2821	if ((hdw)->lab##_dirty || (hdw)->force_dirty) {		\
   2822		pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
   2823	}
   2824
   2825static v4l2_std_id pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw)
   2826{
   2827	v4l2_std_id std;
   2828	std = (v4l2_std_id)hdw->std_mask_avail;
   2829	v4l2_device_call_all(&hdw->v4l2_dev, 0,
   2830			     video, querystd, &std);
   2831	return std;
   2832}
   2833
   2834/* Execute whatever commands are required to update the state of all the
   2835   sub-devices so that they match our current control values. */
   2836static void pvr2_subdev_update(struct pvr2_hdw *hdw)
   2837{
   2838	struct v4l2_subdev *sd;
   2839	unsigned int id;
   2840	pvr2_subdev_update_func fp;
   2841
   2842	pvr2_trace(PVR2_TRACE_CHIPS, "subdev update...");
   2843
   2844	if (hdw->tuner_updated || hdw->force_dirty) {
   2845		struct tuner_setup setup;
   2846		pvr2_trace(PVR2_TRACE_CHIPS, "subdev tuner set_type(%d)",
   2847			   hdw->tuner_type);
   2848		if (((int)(hdw->tuner_type)) >= 0) {
   2849			memset(&setup, 0, sizeof(setup));
   2850			setup.addr = ADDR_UNSET;
   2851			setup.type = hdw->tuner_type;
   2852			setup.mode_mask = T_RADIO | T_ANALOG_TV;
   2853			v4l2_device_call_all(&hdw->v4l2_dev, 0,
   2854					     tuner, s_type_addr, &setup);
   2855		}
   2856	}
   2857
   2858	if (hdw->input_dirty || hdw->std_dirty || hdw->force_dirty) {
   2859		pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_standard");
   2860		if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
   2861			v4l2_device_call_all(&hdw->v4l2_dev, 0,
   2862					     tuner, s_radio);
   2863		} else {
   2864			v4l2_std_id vs;
   2865			vs = hdw->std_mask_cur;
   2866			v4l2_device_call_all(&hdw->v4l2_dev, 0,
   2867					     video, s_std, vs);
   2868			pvr2_hdw_cx25840_vbi_hack(hdw);
   2869		}
   2870		hdw->tuner_signal_stale = !0;
   2871		hdw->cropcap_stale = !0;
   2872	}
   2873
   2874	PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_BRIGHTNESS, brightness);
   2875	PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_CONTRAST, contrast);
   2876	PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_SATURATION, saturation);
   2877	PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_HUE, hue);
   2878	PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_MUTE, mute);
   2879	PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_VOLUME, volume);
   2880	PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BALANCE, balance);
   2881	PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_BASS, bass);
   2882	PVR2_SUBDEV_SET_CONTROL(hdw, V4L2_CID_AUDIO_TREBLE, treble);
   2883
   2884	if (hdw->input_dirty || hdw->audiomode_dirty || hdw->force_dirty) {
   2885		struct v4l2_tuner vt;
   2886		memset(&vt, 0, sizeof(vt));
   2887		vt.type = (hdw->input_val == PVR2_CVAL_INPUT_RADIO) ?
   2888			V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
   2889		vt.audmode = hdw->audiomode_val;
   2890		v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, s_tuner, &vt);
   2891	}
   2892
   2893	if (hdw->freqDirty || hdw->force_dirty) {
   2894		unsigned long fv;
   2895		struct v4l2_frequency freq;
   2896		fv = pvr2_hdw_get_cur_freq(hdw);
   2897		pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_freq(%lu)", fv);
   2898		if (hdw->tuner_signal_stale) pvr2_hdw_status_poll(hdw);
   2899		memset(&freq, 0, sizeof(freq));
   2900		if (hdw->tuner_signal_info.capability & V4L2_TUNER_CAP_LOW) {
   2901			/* ((fv * 1000) / 62500) */
   2902			freq.frequency = (fv * 2) / 125;
   2903		} else {
   2904			freq.frequency = fv / 62500;
   2905		}
   2906		/* tuner-core currently doesn't seem to care about this, but
   2907		   let's set it anyway for completeness. */
   2908		if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
   2909			freq.type = V4L2_TUNER_RADIO;
   2910		} else {
   2911			freq.type = V4L2_TUNER_ANALOG_TV;
   2912		}
   2913		freq.tuner = 0;
   2914		v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner,
   2915				     s_frequency, &freq);
   2916	}
   2917
   2918	if (hdw->res_hor_dirty || hdw->res_ver_dirty || hdw->force_dirty) {
   2919		struct v4l2_subdev_format format = {
   2920			.which = V4L2_SUBDEV_FORMAT_ACTIVE,
   2921		};
   2922
   2923		format.format.width = hdw->res_hor_val;
   2924		format.format.height = hdw->res_ver_val;
   2925		format.format.code = MEDIA_BUS_FMT_FIXED;
   2926		pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_size(%dx%d)",
   2927			   format.format.width, format.format.height);
   2928		v4l2_device_call_all(&hdw->v4l2_dev, 0, pad, set_fmt,
   2929				     NULL, &format);
   2930	}
   2931
   2932	if (hdw->srate_dirty || hdw->force_dirty) {
   2933		u32 val;
   2934		pvr2_trace(PVR2_TRACE_CHIPS, "subdev v4l2 set_audio %d",
   2935			   hdw->srate_val);
   2936		switch (hdw->srate_val) {
   2937		default:
   2938		case V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000:
   2939			val = 48000;
   2940			break;
   2941		case V4L2_MPEG_AUDIO_SAMPLING_FREQ_44100:
   2942			val = 44100;
   2943			break;
   2944		case V4L2_MPEG_AUDIO_SAMPLING_FREQ_32000:
   2945			val = 32000;
   2946			break;
   2947		}
   2948		v4l2_device_call_all(&hdw->v4l2_dev, 0,
   2949				     audio, s_clock_freq, val);
   2950	}
   2951
   2952	/* Unable to set crop parameters; there is apparently no equivalent
   2953	   for VIDIOC_S_CROP */
   2954
   2955	v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
   2956		id = sd->grp_id;
   2957		if (id >= ARRAY_SIZE(pvr2_module_update_functions)) continue;
   2958		fp = pvr2_module_update_functions[id];
   2959		if (!fp) continue;
   2960		(*fp)(hdw, sd);
   2961	}
   2962
   2963	if (hdw->tuner_signal_stale || hdw->cropcap_stale) {
   2964		pvr2_hdw_status_poll(hdw);
   2965	}
   2966}
   2967
   2968
   2969/* Figure out if we need to commit control changes.  If so, mark internal
   2970   state flags to indicate this fact and return true.  Otherwise do nothing
   2971   else and return false. */
   2972static int pvr2_hdw_commit_setup(struct pvr2_hdw *hdw)
   2973{
   2974	unsigned int idx;
   2975	struct pvr2_ctrl *cptr;
   2976	int value;
   2977	int commit_flag = hdw->force_dirty;
   2978	char buf[100];
   2979	unsigned int bcnt,ccnt;
   2980
   2981	for (idx = 0; idx < hdw->control_cnt; idx++) {
   2982		cptr = hdw->controls + idx;
   2983		if (!cptr->info->is_dirty) continue;
   2984		if (!cptr->info->is_dirty(cptr)) continue;
   2985		commit_flag = !0;
   2986
   2987		if (!(pvrusb2_debug & PVR2_TRACE_CTL)) continue;
   2988		bcnt = scnprintf(buf,sizeof(buf),"\"%s\" <-- ",
   2989				 cptr->info->name);
   2990		value = 0;
   2991		cptr->info->get_value(cptr,&value);
   2992		pvr2_ctrl_value_to_sym_internal(cptr,~0,value,
   2993						buf+bcnt,
   2994						sizeof(buf)-bcnt,&ccnt);
   2995		bcnt += ccnt;
   2996		bcnt += scnprintf(buf+bcnt,sizeof(buf)-bcnt," <%s>",
   2997				  get_ctrl_typename(cptr->info->type));
   2998		pvr2_trace(PVR2_TRACE_CTL,
   2999			   "/*--TRACE_COMMIT--*/ %.*s",
   3000			   bcnt,buf);
   3001	}
   3002
   3003	if (!commit_flag) {
   3004		/* Nothing has changed */
   3005		return 0;
   3006	}
   3007
   3008	hdw->state_pipeline_config = 0;
   3009	trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
   3010	pvr2_hdw_state_sched(hdw);
   3011
   3012	return !0;
   3013}
   3014
   3015
   3016/* Perform all operations needed to commit all control changes.  This must
   3017   be performed in synchronization with the pipeline state and is thus
   3018   expected to be called as part of the driver's worker thread.  Return
   3019   true if commit successful, otherwise return false to indicate that
   3020   commit isn't possible at this time. */
   3021static int pvr2_hdw_commit_execute(struct pvr2_hdw *hdw)
   3022{
   3023	unsigned int idx;
   3024	struct pvr2_ctrl *cptr;
   3025	int disruptive_change;
   3026
   3027	if (hdw->input_dirty && hdw->state_pathway_ok &&
   3028	    (((hdw->input_val == PVR2_CVAL_INPUT_DTV) ?
   3029	      PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG) !=
   3030	     hdw->pathway_state)) {
   3031		/* Change of mode being asked for... */
   3032		hdw->state_pathway_ok = 0;
   3033		trace_stbit("state_pathway_ok", hdw->state_pathway_ok);
   3034	}
   3035	if (!hdw->state_pathway_ok) {
   3036		/* Can't commit anything until pathway is ok. */
   3037		return 0;
   3038	}
   3039
   3040	/* Handle some required side effects when the video standard is
   3041	   changed.... */
   3042	if (hdw->std_dirty) {
   3043		int nvres;
   3044		int gop_size;
   3045		if (hdw->std_mask_cur & V4L2_STD_525_60) {
   3046			nvres = 480;
   3047			gop_size = 15;
   3048		} else {
   3049			nvres = 576;
   3050			gop_size = 12;
   3051		}
   3052		/* Rewrite the vertical resolution to be appropriate to the
   3053		   video standard that has been selected. */
   3054		if (nvres != hdw->res_ver_val) {
   3055			hdw->res_ver_val = nvres;
   3056			hdw->res_ver_dirty = !0;
   3057		}
   3058		/* Rewrite the GOP size to be appropriate to the video
   3059		   standard that has been selected. */
   3060		if (gop_size != hdw->enc_ctl_state.video_gop_size) {
   3061			struct v4l2_ext_controls cs;
   3062			struct v4l2_ext_control c1;
   3063			memset(&cs, 0, sizeof(cs));
   3064			memset(&c1, 0, sizeof(c1));
   3065			cs.controls = &c1;
   3066			cs.count = 1;
   3067			c1.id = V4L2_CID_MPEG_VIDEO_GOP_SIZE;
   3068			c1.value = gop_size;
   3069			cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,
   3070					  VIDIOC_S_EXT_CTRLS);
   3071		}
   3072	}
   3073
   3074	/* The broadcast decoder can only scale down, so if
   3075	 * res_*_dirty && crop window < output format ==> enlarge crop.
   3076	 *
   3077	 * The mpeg encoder receives fields of res_hor_val dots and
   3078	 * res_ver_val halflines.  Limits: hor<=720, ver<=576.
   3079	 */
   3080	if (hdw->res_hor_dirty && hdw->cropw_val < hdw->res_hor_val) {
   3081		hdw->cropw_val = hdw->res_hor_val;
   3082		hdw->cropw_dirty = !0;
   3083	} else if (hdw->cropw_dirty) {
   3084		hdw->res_hor_dirty = !0;           /* must rescale */
   3085		hdw->res_hor_val = min(720, hdw->cropw_val);
   3086	}
   3087	if (hdw->res_ver_dirty && hdw->croph_val < hdw->res_ver_val) {
   3088		hdw->croph_val = hdw->res_ver_val;
   3089		hdw->croph_dirty = !0;
   3090	} else if (hdw->croph_dirty) {
   3091		int nvres = hdw->std_mask_cur & V4L2_STD_525_60 ? 480 : 576;
   3092		hdw->res_ver_dirty = !0;
   3093		hdw->res_ver_val = min(nvres, hdw->croph_val);
   3094	}
   3095
   3096	/* If any of the below has changed, then we can't do the update
   3097	   while the pipeline is running.  Pipeline must be paused first
   3098	   and decoder -> encoder connection be made quiescent before we
   3099	   can proceed. */
   3100	disruptive_change =
   3101		(hdw->std_dirty ||
   3102		 hdw->enc_unsafe_stale ||
   3103		 hdw->srate_dirty ||
   3104		 hdw->res_ver_dirty ||
   3105		 hdw->res_hor_dirty ||
   3106		 hdw->cropw_dirty ||
   3107		 hdw->croph_dirty ||
   3108		 hdw->input_dirty ||
   3109		 (hdw->active_stream_type != hdw->desired_stream_type));
   3110	if (disruptive_change && !hdw->state_pipeline_idle) {
   3111		/* Pipeline is not idle; we can't proceed.  Arrange to
   3112		   cause pipeline to stop so that we can try this again
   3113		   later.... */
   3114		hdw->state_pipeline_pause = !0;
   3115		return 0;
   3116	}
   3117
   3118	if (hdw->srate_dirty) {
   3119		/* Write new sample rate into control structure since
   3120		 * the master copy is stale.  We must track srate
   3121		 * separate from the mpeg control structure because
   3122		 * other logic also uses this value. */
   3123		struct v4l2_ext_controls cs;
   3124		struct v4l2_ext_control c1;
   3125		memset(&cs,0,sizeof(cs));
   3126		memset(&c1,0,sizeof(c1));
   3127		cs.controls = &c1;
   3128		cs.count = 1;
   3129		c1.id = V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ;
   3130		c1.value = hdw->srate_val;
   3131		cx2341x_ext_ctrls(&hdw->enc_ctl_state, 0, &cs,VIDIOC_S_EXT_CTRLS);
   3132	}
   3133
   3134	if (hdw->active_stream_type != hdw->desired_stream_type) {
   3135		/* Handle any side effects of stream config here */
   3136		hdw->active_stream_type = hdw->desired_stream_type;
   3137	}
   3138
   3139	if (hdw->hdw_desc->signal_routing_scheme ==
   3140	    PVR2_ROUTING_SCHEME_GOTVIEW) {
   3141		u32 b;
   3142		/* Handle GOTVIEW audio switching */
   3143		pvr2_hdw_gpio_get_out(hdw,&b);
   3144		if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
   3145			/* Set GPIO 11 */
   3146			pvr2_hdw_gpio_chg_out(hdw,(1 << 11),~0);
   3147		} else {
   3148			/* Clear GPIO 11 */
   3149			pvr2_hdw_gpio_chg_out(hdw,(1 << 11),0);
   3150		}
   3151	}
   3152
   3153	/* Check and update state for all sub-devices. */
   3154	pvr2_subdev_update(hdw);
   3155
   3156	hdw->tuner_updated = 0;
   3157	hdw->force_dirty = 0;
   3158	for (idx = 0; idx < hdw->control_cnt; idx++) {
   3159		cptr = hdw->controls + idx;
   3160		if (!cptr->info->clear_dirty) continue;
   3161		cptr->info->clear_dirty(cptr);
   3162	}
   3163
   3164	if ((hdw->pathway_state == PVR2_PATHWAY_ANALOG) &&
   3165	    hdw->state_encoder_run) {
   3166		/* If encoder isn't running or it can't be touched, then
   3167		   this will get worked out later when we start the
   3168		   encoder. */
   3169		if (pvr2_encoder_adjust(hdw) < 0) return !0;
   3170	}
   3171
   3172	hdw->state_pipeline_config = !0;
   3173	/* Hardware state may have changed in a way to cause the cropping
   3174	   capabilities to have changed.  So mark it stale, which will
   3175	   cause a later re-fetch. */
   3176	trace_stbit("state_pipeline_config",hdw->state_pipeline_config);
   3177	return !0;
   3178}
   3179
   3180
   3181int pvr2_hdw_commit_ctl(struct pvr2_hdw *hdw)
   3182{
   3183	int fl;
   3184	LOCK_TAKE(hdw->big_lock);
   3185	fl = pvr2_hdw_commit_setup(hdw);
   3186	LOCK_GIVE(hdw->big_lock);
   3187	if (!fl) return 0;
   3188	return pvr2_hdw_wait(hdw,0);
   3189}
   3190
   3191
   3192static void pvr2_hdw_worker_poll(struct work_struct *work)
   3193{
   3194	int fl = 0;
   3195	struct pvr2_hdw *hdw = container_of(work,struct pvr2_hdw,workpoll);
   3196	LOCK_TAKE(hdw->big_lock); do {
   3197		fl = pvr2_hdw_state_eval(hdw);
   3198	} while (0); LOCK_GIVE(hdw->big_lock);
   3199	if (fl && hdw->state_func) {
   3200		hdw->state_func(hdw->state_data);
   3201	}
   3202}
   3203
   3204
   3205static int pvr2_hdw_wait(struct pvr2_hdw *hdw,int state)
   3206{
   3207	return wait_event_interruptible(
   3208		hdw->state_wait_data,
   3209		(hdw->state_stale == 0) &&
   3210		(!state || (hdw->master_state != state)));
   3211}
   3212
   3213
   3214/* Return name for this driver instance */
   3215const char *pvr2_hdw_get_driver_name(struct pvr2_hdw *hdw)
   3216{
   3217	return hdw->name;
   3218}
   3219
   3220
   3221const char *pvr2_hdw_get_desc(struct pvr2_hdw *hdw)
   3222{
   3223	return hdw->hdw_desc->description;
   3224}
   3225
   3226
   3227const char *pvr2_hdw_get_type(struct pvr2_hdw *hdw)
   3228{
   3229	return hdw->hdw_desc->shortname;
   3230}
   3231
   3232
   3233int pvr2_hdw_is_hsm(struct pvr2_hdw *hdw)
   3234{
   3235	int result;
   3236	LOCK_TAKE(hdw->ctl_lock); do {
   3237		hdw->cmd_buffer[0] = FX2CMD_GET_USB_SPEED;
   3238		result = pvr2_send_request(hdw,
   3239					   hdw->cmd_buffer,1,
   3240					   hdw->cmd_buffer,1);
   3241		if (result < 0) break;
   3242		result = (hdw->cmd_buffer[0] != 0);
   3243	} while(0); LOCK_GIVE(hdw->ctl_lock);
   3244	return result;
   3245}
   3246
   3247
   3248/* Execute poll of tuner status */
   3249void pvr2_hdw_execute_tuner_poll(struct pvr2_hdw *hdw)
   3250{
   3251	LOCK_TAKE(hdw->big_lock); do {
   3252		pvr2_hdw_status_poll(hdw);
   3253	} while (0); LOCK_GIVE(hdw->big_lock);
   3254}
   3255
   3256
   3257static int pvr2_hdw_check_cropcap(struct pvr2_hdw *hdw)
   3258{
   3259	if (!hdw->cropcap_stale) {
   3260		return 0;
   3261	}
   3262	pvr2_hdw_status_poll(hdw);
   3263	if (hdw->cropcap_stale) {
   3264		return -EIO;
   3265	}
   3266	return 0;
   3267}
   3268
   3269
   3270/* Return information about cropping capabilities */
   3271int pvr2_hdw_get_cropcap(struct pvr2_hdw *hdw, struct v4l2_cropcap *pp)
   3272{
   3273	int stat = 0;
   3274	LOCK_TAKE(hdw->big_lock);
   3275	stat = pvr2_hdw_check_cropcap(hdw);
   3276	if (!stat) {
   3277		memcpy(pp, &hdw->cropcap_info, sizeof(hdw->cropcap_info));
   3278	}
   3279	LOCK_GIVE(hdw->big_lock);
   3280	return stat;
   3281}
   3282
   3283
   3284/* Return information about the tuner */
   3285int pvr2_hdw_get_tuner_status(struct pvr2_hdw *hdw,struct v4l2_tuner *vtp)
   3286{
   3287	LOCK_TAKE(hdw->big_lock); do {
   3288		if (hdw->tuner_signal_stale) {
   3289			pvr2_hdw_status_poll(hdw);
   3290		}
   3291		memcpy(vtp,&hdw->tuner_signal_info,sizeof(struct v4l2_tuner));
   3292	} while (0); LOCK_GIVE(hdw->big_lock);
   3293	return 0;
   3294}
   3295
   3296
   3297/* Get handle to video output stream */
   3298struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *hp)
   3299{
   3300	return hp->vid_stream;
   3301}
   3302
   3303
   3304void pvr2_hdw_trigger_module_log(struct pvr2_hdw *hdw)
   3305{
   3306	int nr = pvr2_hdw_get_unit_number(hdw);
   3307	LOCK_TAKE(hdw->big_lock);
   3308	do {
   3309		pr_info("pvrusb2: =================  START STATUS CARD #%d  =================\n", nr);
   3310		v4l2_device_call_all(&hdw->v4l2_dev, 0, core, log_status);
   3311		pvr2_trace(PVR2_TRACE_INFO,"cx2341x config:");
   3312		cx2341x_log_status(&hdw->enc_ctl_state, "pvrusb2");
   3313		pvr2_hdw_state_log_state(hdw);
   3314		pr_info("pvrusb2: ==================  END STATUS CARD #%d  ==================\n", nr);
   3315	} while (0);
   3316	LOCK_GIVE(hdw->big_lock);
   3317}
   3318
   3319
   3320/* Grab EEPROM contents, needed for direct method. */
   3321#define EEPROM_SIZE 8192
   3322#define trace_eeprom(...) pvr2_trace(PVR2_TRACE_EEPROM,__VA_ARGS__)
   3323static u8 *pvr2_full_eeprom_fetch(struct pvr2_hdw *hdw)
   3324{
   3325	struct i2c_msg msg[2];
   3326	u8 *eeprom;
   3327	u8 iadd[2];
   3328	u8 addr;
   3329	u16 eepromSize;
   3330	unsigned int offs;
   3331	int ret;
   3332	int mode16 = 0;
   3333	unsigned pcnt,tcnt;
   3334	eeprom = kzalloc(EEPROM_SIZE, GFP_KERNEL);
   3335	if (!eeprom) {
   3336		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3337			   "Failed to allocate memory required to read eeprom");
   3338		return NULL;
   3339	}
   3340
   3341	trace_eeprom("Value for eeprom addr from controller was 0x%x",
   3342		     hdw->eeprom_addr);
   3343	addr = hdw->eeprom_addr;
   3344	/* Seems that if the high bit is set, then the *real* eeprom
   3345	   address is shifted right now bit position (noticed this in
   3346	   newer PVR USB2 hardware) */
   3347	if (addr & 0x80) addr >>= 1;
   3348
   3349	/* FX2 documentation states that a 16bit-addressed eeprom is
   3350	   expected if the I2C address is an odd number (yeah, this is
   3351	   strange but it's what they do) */
   3352	mode16 = (addr & 1);
   3353	eepromSize = (mode16 ? EEPROM_SIZE : 256);
   3354	trace_eeprom("Examining %d byte eeprom at location 0x%x using %d bit addressing",
   3355		     eepromSize, addr,
   3356		     mode16 ? 16 : 8);
   3357
   3358	msg[0].addr = addr;
   3359	msg[0].flags = 0;
   3360	msg[0].len = mode16 ? 2 : 1;
   3361	msg[0].buf = iadd;
   3362	msg[1].addr = addr;
   3363	msg[1].flags = I2C_M_RD;
   3364
   3365	/* We have to do the actual eeprom data fetch ourselves, because
   3366	   (1) we're only fetching part of the eeprom, and (2) if we were
   3367	   getting the whole thing our I2C driver can't grab it in one
   3368	   pass - which is what tveeprom is otherwise going to attempt */
   3369	for (tcnt = 0; tcnt < EEPROM_SIZE; tcnt += pcnt) {
   3370		pcnt = 16;
   3371		if (pcnt + tcnt > EEPROM_SIZE) pcnt = EEPROM_SIZE-tcnt;
   3372		offs = tcnt + (eepromSize - EEPROM_SIZE);
   3373		if (mode16) {
   3374			iadd[0] = offs >> 8;
   3375			iadd[1] = offs;
   3376		} else {
   3377			iadd[0] = offs;
   3378		}
   3379		msg[1].len = pcnt;
   3380		msg[1].buf = eeprom+tcnt;
   3381		if ((ret = i2c_transfer(&hdw->i2c_adap,
   3382					msg,ARRAY_SIZE(msg))) != 2) {
   3383			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3384				   "eeprom fetch set offs err=%d",ret);
   3385			kfree(eeprom);
   3386			return NULL;
   3387		}
   3388	}
   3389	return eeprom;
   3390}
   3391
   3392
   3393void pvr2_hdw_cpufw_set_enabled(struct pvr2_hdw *hdw,
   3394				int mode,
   3395				int enable_flag)
   3396{
   3397	int ret;
   3398	u16 address;
   3399	unsigned int pipe;
   3400	LOCK_TAKE(hdw->big_lock);
   3401	do {
   3402		if ((hdw->fw_buffer == NULL) == !enable_flag) break;
   3403
   3404		if (!enable_flag) {
   3405			pvr2_trace(PVR2_TRACE_FIRMWARE,
   3406				   "Cleaning up after CPU firmware fetch");
   3407			kfree(hdw->fw_buffer);
   3408			hdw->fw_buffer = NULL;
   3409			hdw->fw_size = 0;
   3410			if (hdw->fw_cpu_flag) {
   3411				/* Now release the CPU.  It will disconnect
   3412				   and reconnect later. */
   3413				pvr2_hdw_cpureset_assert(hdw,0);
   3414			}
   3415			break;
   3416		}
   3417
   3418		hdw->fw_cpu_flag = (mode != 2);
   3419		if (hdw->fw_cpu_flag) {
   3420			hdw->fw_size = (mode == 1) ? 0x4000 : 0x2000;
   3421			pvr2_trace(PVR2_TRACE_FIRMWARE,
   3422				   "Preparing to suck out CPU firmware (size=%u)",
   3423				   hdw->fw_size);
   3424			hdw->fw_buffer = kzalloc(hdw->fw_size,GFP_KERNEL);
   3425			if (!hdw->fw_buffer) {
   3426				hdw->fw_size = 0;
   3427				break;
   3428			}
   3429
   3430			/* We have to hold the CPU during firmware upload. */
   3431			pvr2_hdw_cpureset_assert(hdw,1);
   3432
   3433			/* download the firmware from address 0000-1fff in 2048
   3434			   (=0x800) bytes chunk. */
   3435
   3436			pvr2_trace(PVR2_TRACE_FIRMWARE,
   3437				   "Grabbing CPU firmware");
   3438			pipe = usb_rcvctrlpipe(hdw->usb_dev, 0);
   3439			for(address = 0; address < hdw->fw_size;
   3440			    address += 0x800) {
   3441				ret = usb_control_msg(hdw->usb_dev,pipe,
   3442						      0xa0,0xc0,
   3443						      address,0,
   3444						      hdw->fw_buffer+address,
   3445						      0x800,1000);
   3446				if (ret < 0) break;
   3447			}
   3448
   3449			pvr2_trace(PVR2_TRACE_FIRMWARE,
   3450				   "Done grabbing CPU firmware");
   3451		} else {
   3452			pvr2_trace(PVR2_TRACE_FIRMWARE,
   3453				   "Sucking down EEPROM contents");
   3454			hdw->fw_buffer = pvr2_full_eeprom_fetch(hdw);
   3455			if (!hdw->fw_buffer) {
   3456				pvr2_trace(PVR2_TRACE_FIRMWARE,
   3457					   "EEPROM content suck failed.");
   3458				break;
   3459			}
   3460			hdw->fw_size = EEPROM_SIZE;
   3461			pvr2_trace(PVR2_TRACE_FIRMWARE,
   3462				   "Done sucking down EEPROM contents");
   3463		}
   3464	} while (0);
   3465	LOCK_GIVE(hdw->big_lock);
   3466}
   3467
   3468
   3469/* Return true if we're in a mode for retrieval CPU firmware */
   3470int pvr2_hdw_cpufw_get_enabled(struct pvr2_hdw *hdw)
   3471{
   3472	return hdw->fw_buffer != NULL;
   3473}
   3474
   3475
   3476int pvr2_hdw_cpufw_get(struct pvr2_hdw *hdw,unsigned int offs,
   3477		       char *buf,unsigned int cnt)
   3478{
   3479	int ret = -EINVAL;
   3480	LOCK_TAKE(hdw->big_lock);
   3481	do {
   3482		if (!buf) break;
   3483		if (!cnt) break;
   3484
   3485		if (!hdw->fw_buffer) {
   3486			ret = -EIO;
   3487			break;
   3488		}
   3489
   3490		if (offs >= hdw->fw_size) {
   3491			pvr2_trace(PVR2_TRACE_FIRMWARE,
   3492				   "Read firmware data offs=%d EOF",
   3493				   offs);
   3494			ret = 0;
   3495			break;
   3496		}
   3497
   3498		if (offs + cnt > hdw->fw_size) cnt = hdw->fw_size - offs;
   3499
   3500		memcpy(buf,hdw->fw_buffer+offs,cnt);
   3501
   3502		pvr2_trace(PVR2_TRACE_FIRMWARE,
   3503			   "Read firmware data offs=%d cnt=%d",
   3504			   offs,cnt);
   3505		ret = cnt;
   3506	} while (0);
   3507	LOCK_GIVE(hdw->big_lock);
   3508
   3509	return ret;
   3510}
   3511
   3512
   3513int pvr2_hdw_v4l_get_minor_number(struct pvr2_hdw *hdw,
   3514				  enum pvr2_v4l_type index)
   3515{
   3516	switch (index) {
   3517	case pvr2_v4l_type_video: return hdw->v4l_minor_number_video;
   3518	case pvr2_v4l_type_vbi: return hdw->v4l_minor_number_vbi;
   3519	case pvr2_v4l_type_radio: return hdw->v4l_minor_number_radio;
   3520	default: return -1;
   3521	}
   3522}
   3523
   3524
   3525/* Store a v4l minor device number */
   3526void pvr2_hdw_v4l_store_minor_number(struct pvr2_hdw *hdw,
   3527				     enum pvr2_v4l_type index,int v)
   3528{
   3529	switch (index) {
   3530	case pvr2_v4l_type_video: hdw->v4l_minor_number_video = v;break;
   3531	case pvr2_v4l_type_vbi: hdw->v4l_minor_number_vbi = v;break;
   3532	case pvr2_v4l_type_radio: hdw->v4l_minor_number_radio = v;break;
   3533	default: break;
   3534	}
   3535}
   3536
   3537
   3538static void pvr2_ctl_write_complete(struct urb *urb)
   3539{
   3540	struct pvr2_hdw *hdw = urb->context;
   3541	hdw->ctl_write_pend_flag = 0;
   3542	if (hdw->ctl_read_pend_flag) return;
   3543	complete(&hdw->ctl_done);
   3544}
   3545
   3546
   3547static void pvr2_ctl_read_complete(struct urb *urb)
   3548{
   3549	struct pvr2_hdw *hdw = urb->context;
   3550	hdw->ctl_read_pend_flag = 0;
   3551	if (hdw->ctl_write_pend_flag) return;
   3552	complete(&hdw->ctl_done);
   3553}
   3554
   3555struct hdw_timer {
   3556	struct timer_list timer;
   3557	struct pvr2_hdw *hdw;
   3558};
   3559
   3560static void pvr2_ctl_timeout(struct timer_list *t)
   3561{
   3562	struct hdw_timer *timer = from_timer(timer, t, timer);
   3563	struct pvr2_hdw *hdw = timer->hdw;
   3564
   3565	if (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
   3566		hdw->ctl_timeout_flag = !0;
   3567		if (hdw->ctl_write_pend_flag)
   3568			usb_unlink_urb(hdw->ctl_write_urb);
   3569		if (hdw->ctl_read_pend_flag)
   3570			usb_unlink_urb(hdw->ctl_read_urb);
   3571	}
   3572}
   3573
   3574
   3575/* Issue a command and get a response from the device.  This extended
   3576   version includes a probe flag (which if set means that device errors
   3577   should not be logged or treated as fatal) and a timeout in jiffies.
   3578   This can be used to non-lethally probe the health of endpoint 1. */
   3579static int pvr2_send_request_ex(struct pvr2_hdw *hdw,
   3580				unsigned int timeout,int probe_fl,
   3581				void *write_data,unsigned int write_len,
   3582				void *read_data,unsigned int read_len)
   3583{
   3584	unsigned int idx;
   3585	int status = 0;
   3586	struct hdw_timer timer = {
   3587		.hdw = hdw,
   3588	};
   3589
   3590	if (!hdw->ctl_lock_held) {
   3591		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3592			   "Attempted to execute control transfer without lock!!");
   3593		return -EDEADLK;
   3594	}
   3595	if (!hdw->flag_ok && !probe_fl) {
   3596		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3597			   "Attempted to execute control transfer when device not ok");
   3598		return -EIO;
   3599	}
   3600	if (!(hdw->ctl_read_urb && hdw->ctl_write_urb)) {
   3601		if (!probe_fl) {
   3602			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3603				   "Attempted to execute control transfer when USB is disconnected");
   3604		}
   3605		return -ENOTTY;
   3606	}
   3607
   3608	/* Ensure that we have sane parameters */
   3609	if (!write_data) write_len = 0;
   3610	if (!read_data) read_len = 0;
   3611	if (write_len > PVR2_CTL_BUFFSIZE) {
   3612		pvr2_trace(
   3613			PVR2_TRACE_ERROR_LEGS,
   3614			"Attempted to execute %d byte control-write transfer (limit=%d)",
   3615			write_len,PVR2_CTL_BUFFSIZE);
   3616		return -EINVAL;
   3617	}
   3618	if (read_len > PVR2_CTL_BUFFSIZE) {
   3619		pvr2_trace(
   3620			PVR2_TRACE_ERROR_LEGS,
   3621			"Attempted to execute %d byte control-read transfer (limit=%d)",
   3622			write_len,PVR2_CTL_BUFFSIZE);
   3623		return -EINVAL;
   3624	}
   3625	if ((!write_len) && (!read_len)) {
   3626		pvr2_trace(
   3627			PVR2_TRACE_ERROR_LEGS,
   3628			"Attempted to execute null control transfer?");
   3629		return -EINVAL;
   3630	}
   3631
   3632
   3633	hdw->cmd_debug_state = 1;
   3634	if (write_len && write_data)
   3635		hdw->cmd_debug_code = ((unsigned char *)write_data)[0];
   3636	else
   3637		hdw->cmd_debug_code = 0;
   3638	hdw->cmd_debug_write_len = write_len;
   3639	hdw->cmd_debug_read_len = read_len;
   3640
   3641	/* Initialize common stuff */
   3642	init_completion(&hdw->ctl_done);
   3643	hdw->ctl_timeout_flag = 0;
   3644	hdw->ctl_write_pend_flag = 0;
   3645	hdw->ctl_read_pend_flag = 0;
   3646	timer_setup_on_stack(&timer.timer, pvr2_ctl_timeout, 0);
   3647	timer.timer.expires = jiffies + timeout;
   3648
   3649	if (write_len && write_data) {
   3650		hdw->cmd_debug_state = 2;
   3651		/* Transfer write data to internal buffer */
   3652		for (idx = 0; idx < write_len; idx++) {
   3653			hdw->ctl_write_buffer[idx] =
   3654				((unsigned char *)write_data)[idx];
   3655		}
   3656		/* Initiate a write request */
   3657		usb_fill_bulk_urb(hdw->ctl_write_urb,
   3658				  hdw->usb_dev,
   3659				  usb_sndbulkpipe(hdw->usb_dev,
   3660						  PVR2_CTL_WRITE_ENDPOINT),
   3661				  hdw->ctl_write_buffer,
   3662				  write_len,
   3663				  pvr2_ctl_write_complete,
   3664				  hdw);
   3665		hdw->ctl_write_urb->actual_length = 0;
   3666		hdw->ctl_write_pend_flag = !0;
   3667		if (usb_urb_ep_type_check(hdw->ctl_write_urb)) {
   3668			pvr2_trace(
   3669				PVR2_TRACE_ERROR_LEGS,
   3670				"Invalid write control endpoint");
   3671			return -EINVAL;
   3672		}
   3673		status = usb_submit_urb(hdw->ctl_write_urb,GFP_KERNEL);
   3674		if (status < 0) {
   3675			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3676				   "Failed to submit write-control URB status=%d",
   3677status);
   3678			hdw->ctl_write_pend_flag = 0;
   3679			goto done;
   3680		}
   3681	}
   3682
   3683	if (read_len) {
   3684		hdw->cmd_debug_state = 3;
   3685		memset(hdw->ctl_read_buffer,0x43,read_len);
   3686		/* Initiate a read request */
   3687		usb_fill_bulk_urb(hdw->ctl_read_urb,
   3688				  hdw->usb_dev,
   3689				  usb_rcvbulkpipe(hdw->usb_dev,
   3690						  PVR2_CTL_READ_ENDPOINT),
   3691				  hdw->ctl_read_buffer,
   3692				  read_len,
   3693				  pvr2_ctl_read_complete,
   3694				  hdw);
   3695		hdw->ctl_read_urb->actual_length = 0;
   3696		hdw->ctl_read_pend_flag = !0;
   3697		if (usb_urb_ep_type_check(hdw->ctl_read_urb)) {
   3698			pvr2_trace(
   3699				PVR2_TRACE_ERROR_LEGS,
   3700				"Invalid read control endpoint");
   3701			return -EINVAL;
   3702		}
   3703		status = usb_submit_urb(hdw->ctl_read_urb,GFP_KERNEL);
   3704		if (status < 0) {
   3705			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3706				   "Failed to submit read-control URB status=%d",
   3707status);
   3708			hdw->ctl_read_pend_flag = 0;
   3709			goto done;
   3710		}
   3711	}
   3712
   3713	/* Start timer */
   3714	add_timer(&timer.timer);
   3715
   3716	/* Now wait for all I/O to complete */
   3717	hdw->cmd_debug_state = 4;
   3718	while (hdw->ctl_write_pend_flag || hdw->ctl_read_pend_flag) {
   3719		wait_for_completion(&hdw->ctl_done);
   3720	}
   3721	hdw->cmd_debug_state = 5;
   3722
   3723	/* Stop timer */
   3724	del_timer_sync(&timer.timer);
   3725
   3726	hdw->cmd_debug_state = 6;
   3727	status = 0;
   3728
   3729	if (hdw->ctl_timeout_flag) {
   3730		status = -ETIMEDOUT;
   3731		if (!probe_fl) {
   3732			pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3733				   "Timed out control-write");
   3734		}
   3735		goto done;
   3736	}
   3737
   3738	if (write_len) {
   3739		/* Validate results of write request */
   3740		if ((hdw->ctl_write_urb->status != 0) &&
   3741		    (hdw->ctl_write_urb->status != -ENOENT) &&
   3742		    (hdw->ctl_write_urb->status != -ESHUTDOWN) &&
   3743		    (hdw->ctl_write_urb->status != -ECONNRESET)) {
   3744			/* USB subsystem is reporting some kind of failure
   3745			   on the write */
   3746			status = hdw->ctl_write_urb->status;
   3747			if (!probe_fl) {
   3748				pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3749					   "control-write URB failure, status=%d",
   3750					   status);
   3751			}
   3752			goto done;
   3753		}
   3754		if (hdw->ctl_write_urb->actual_length < write_len) {
   3755			/* Failed to write enough data */
   3756			status = -EIO;
   3757			if (!probe_fl) {
   3758				pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3759					   "control-write URB short, expected=%d got=%d",
   3760					   write_len,
   3761					   hdw->ctl_write_urb->actual_length);
   3762			}
   3763			goto done;
   3764		}
   3765	}
   3766	if (read_len && read_data) {
   3767		/* Validate results of read request */
   3768		if ((hdw->ctl_read_urb->status != 0) &&
   3769		    (hdw->ctl_read_urb->status != -ENOENT) &&
   3770		    (hdw->ctl_read_urb->status != -ESHUTDOWN) &&
   3771		    (hdw->ctl_read_urb->status != -ECONNRESET)) {
   3772			/* USB subsystem is reporting some kind of failure
   3773			   on the read */
   3774			status = hdw->ctl_read_urb->status;
   3775			if (!probe_fl) {
   3776				pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3777					   "control-read URB failure, status=%d",
   3778					   status);
   3779			}
   3780			goto done;
   3781		}
   3782		if (hdw->ctl_read_urb->actual_length < read_len) {
   3783			/* Failed to read enough data */
   3784			status = -EIO;
   3785			if (!probe_fl) {
   3786				pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3787					   "control-read URB short, expected=%d got=%d",
   3788					   read_len,
   3789					   hdw->ctl_read_urb->actual_length);
   3790			}
   3791			goto done;
   3792		}
   3793		/* Transfer retrieved data out from internal buffer */
   3794		for (idx = 0; idx < read_len; idx++) {
   3795			((unsigned char *)read_data)[idx] =
   3796				hdw->ctl_read_buffer[idx];
   3797		}
   3798	}
   3799
   3800 done:
   3801
   3802	hdw->cmd_debug_state = 0;
   3803	if ((status < 0) && (!probe_fl)) {
   3804		pvr2_hdw_render_useless(hdw);
   3805	}
   3806	destroy_timer_on_stack(&timer.timer);
   3807
   3808	return status;
   3809}
   3810
   3811
   3812int pvr2_send_request(struct pvr2_hdw *hdw,
   3813		      void *write_data,unsigned int write_len,
   3814		      void *read_data,unsigned int read_len)
   3815{
   3816	return pvr2_send_request_ex(hdw,HZ*4,0,
   3817				    write_data,write_len,
   3818				    read_data,read_len);
   3819}
   3820
   3821
   3822static int pvr2_issue_simple_cmd(struct pvr2_hdw *hdw,u32 cmdcode)
   3823{
   3824	int ret;
   3825	unsigned int cnt = 1;
   3826	unsigned int args = 0;
   3827	LOCK_TAKE(hdw->ctl_lock);
   3828	hdw->cmd_buffer[0] = cmdcode & 0xffu;
   3829	args = (cmdcode >> 8) & 0xffu;
   3830	args = (args > 2) ? 2 : args;
   3831	if (args) {
   3832		cnt += args;
   3833		hdw->cmd_buffer[1] = (cmdcode >> 16) & 0xffu;
   3834		if (args > 1) {
   3835			hdw->cmd_buffer[2] = (cmdcode >> 24) & 0xffu;
   3836		}
   3837	}
   3838	if (pvrusb2_debug & PVR2_TRACE_INIT) {
   3839		unsigned int idx;
   3840		unsigned int ccnt,bcnt;
   3841		char tbuf[50];
   3842		cmdcode &= 0xffu;
   3843		bcnt = 0;
   3844		ccnt = scnprintf(tbuf+bcnt,
   3845				 sizeof(tbuf)-bcnt,
   3846				 "Sending FX2 command 0x%x",cmdcode);
   3847		bcnt += ccnt;
   3848		for (idx = 0; idx < ARRAY_SIZE(pvr2_fx2cmd_desc); idx++) {
   3849			if (pvr2_fx2cmd_desc[idx].id == cmdcode) {
   3850				ccnt = scnprintf(tbuf+bcnt,
   3851						 sizeof(tbuf)-bcnt,
   3852						 " \"%s\"",
   3853						 pvr2_fx2cmd_desc[idx].desc);
   3854				bcnt += ccnt;
   3855				break;
   3856			}
   3857		}
   3858		if (args) {
   3859			ccnt = scnprintf(tbuf+bcnt,
   3860					 sizeof(tbuf)-bcnt,
   3861					 " (%u",hdw->cmd_buffer[1]);
   3862			bcnt += ccnt;
   3863			if (args > 1) {
   3864				ccnt = scnprintf(tbuf+bcnt,
   3865						 sizeof(tbuf)-bcnt,
   3866						 ",%u",hdw->cmd_buffer[2]);
   3867				bcnt += ccnt;
   3868			}
   3869			ccnt = scnprintf(tbuf+bcnt,
   3870					 sizeof(tbuf)-bcnt,
   3871					 ")");
   3872			bcnt += ccnt;
   3873		}
   3874		pvr2_trace(PVR2_TRACE_INIT,"%.*s",bcnt,tbuf);
   3875	}
   3876	ret = pvr2_send_request(hdw,hdw->cmd_buffer,cnt,NULL,0);
   3877	LOCK_GIVE(hdw->ctl_lock);
   3878	return ret;
   3879}
   3880
   3881
   3882int pvr2_write_register(struct pvr2_hdw *hdw, u16 reg, u32 data)
   3883{
   3884	int ret;
   3885
   3886	LOCK_TAKE(hdw->ctl_lock);
   3887
   3888	hdw->cmd_buffer[0] = FX2CMD_REG_WRITE;  /* write register prefix */
   3889	PVR2_DECOMPOSE_LE(hdw->cmd_buffer,1,data);
   3890	hdw->cmd_buffer[5] = 0;
   3891	hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
   3892	hdw->cmd_buffer[7] = reg & 0xff;
   3893
   3894
   3895	ret = pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 0);
   3896
   3897	LOCK_GIVE(hdw->ctl_lock);
   3898
   3899	return ret;
   3900}
   3901
   3902
   3903static int pvr2_read_register(struct pvr2_hdw *hdw, u16 reg, u32 *data)
   3904{
   3905	int ret = 0;
   3906
   3907	LOCK_TAKE(hdw->ctl_lock);
   3908
   3909	hdw->cmd_buffer[0] = FX2CMD_REG_READ;  /* read register prefix */
   3910	hdw->cmd_buffer[1] = 0;
   3911	hdw->cmd_buffer[2] = 0;
   3912	hdw->cmd_buffer[3] = 0;
   3913	hdw->cmd_buffer[4] = 0;
   3914	hdw->cmd_buffer[5] = 0;
   3915	hdw->cmd_buffer[6] = (reg >> 8) & 0xff;
   3916	hdw->cmd_buffer[7] = reg & 0xff;
   3917
   3918	ret |= pvr2_send_request(hdw, hdw->cmd_buffer, 8, hdw->cmd_buffer, 4);
   3919	*data = PVR2_COMPOSE_LE(hdw->cmd_buffer,0);
   3920
   3921	LOCK_GIVE(hdw->ctl_lock);
   3922
   3923	return ret;
   3924}
   3925
   3926
   3927void pvr2_hdw_render_useless(struct pvr2_hdw *hdw)
   3928{
   3929	if (!hdw->flag_ok) return;
   3930	pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3931		   "Device being rendered inoperable");
   3932	if (hdw->vid_stream) {
   3933		pvr2_stream_setup(hdw->vid_stream,NULL,0,0);
   3934	}
   3935	hdw->flag_ok = 0;
   3936	trace_stbit("flag_ok",hdw->flag_ok);
   3937	pvr2_hdw_state_sched(hdw);
   3938}
   3939
   3940
   3941void pvr2_hdw_device_reset(struct pvr2_hdw *hdw)
   3942{
   3943	int ret;
   3944	pvr2_trace(PVR2_TRACE_INIT,"Performing a device reset...");
   3945	ret = usb_lock_device_for_reset(hdw->usb_dev,NULL);
   3946	if (ret == 0) {
   3947		ret = usb_reset_device(hdw->usb_dev);
   3948		usb_unlock_device(hdw->usb_dev);
   3949	} else {
   3950		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3951			   "Failed to lock USB device ret=%d",ret);
   3952	}
   3953	if (init_pause_msec) {
   3954		pvr2_trace(PVR2_TRACE_INFO,
   3955			   "Waiting %u msec for hardware to settle",
   3956			   init_pause_msec);
   3957		msleep(init_pause_msec);
   3958	}
   3959
   3960}
   3961
   3962
   3963void pvr2_hdw_cpureset_assert(struct pvr2_hdw *hdw,int val)
   3964{
   3965	char *da;
   3966	unsigned int pipe;
   3967	int ret;
   3968
   3969	if (!hdw->usb_dev) return;
   3970
   3971	da = kmalloc(16, GFP_KERNEL);
   3972
   3973	if (da == NULL) {
   3974		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3975			   "Unable to allocate memory to control CPU reset");
   3976		return;
   3977	}
   3978
   3979	pvr2_trace(PVR2_TRACE_INIT,"cpureset_assert(%d)",val);
   3980
   3981	da[0] = val ? 0x01 : 0x00;
   3982
   3983	/* Write the CPUCS register on the 8051.  The lsb of the register
   3984	   is the reset bit; a 1 asserts reset while a 0 clears it. */
   3985	pipe = usb_sndctrlpipe(hdw->usb_dev, 0);
   3986	ret = usb_control_msg(hdw->usb_dev,pipe,0xa0,0x40,0xe600,0,da,1,1000);
   3987	if (ret < 0) {
   3988		pvr2_trace(PVR2_TRACE_ERROR_LEGS,
   3989			   "cpureset_assert(%d) error=%d",val,ret);
   3990		pvr2_hdw_render_useless(hdw);
   3991	}
   3992
   3993	kfree(da);
   3994}
   3995
   3996
   3997int pvr2_hdw_cmd_deep_reset(struct pvr2_hdw *hdw)
   3998{
   3999	return pvr2_issue_simple_cmd(hdw,FX2CMD_DEEP_RESET);
   4000}
   4001
   4002
   4003int pvr2_hdw_cmd_powerup(struct pvr2_hdw *hdw)
   4004{
   4005	return pvr2_issue_simple_cmd(hdw,FX2CMD_POWER_ON);
   4006}
   4007
   4008
   4009
   4010int pvr2_hdw_cmd_decoder_reset(struct pvr2_hdw *hdw)
   4011{
   4012	pvr2_trace(PVR2_TRACE_INIT,
   4013		   "Requesting decoder reset");
   4014	if (hdw->decoder_client_id) {
   4015		v4l2_device_call_all(&hdw->v4l2_dev, hdw->decoder_client_id,
   4016				     core, reset, 0);
   4017		pvr2_hdw_cx25840_vbi_hack(hdw);
   4018		return 0;
   4019	}
   4020	pvr2_trace(PVR2_TRACE_INIT,
   4021		   "Unable to reset decoder: nothing attached");
   4022	return -ENOTTY;
   4023}
   4024
   4025
   4026static int pvr2_hdw_cmd_hcw_demod_reset(struct pvr2_hdw *hdw, int onoff)
   4027{
   4028	hdw->flag_ok = !0;
   4029
   4030	/* Use this for Hauppauge 160xxx only */
   4031	if (le16_to_cpu(hdw->usb_dev->descriptor.idVendor) == 0x2040 &&
   4032	    (le16_to_cpu(hdw->usb_dev->descriptor.idProduct) == 0x7502 ||
   4033	     le16_to_cpu(hdw->usb_dev->descriptor.idProduct) == 0x7510)) {
   4034		pr_debug("%s(): resetting demod on Hauppauge 160xxx platform skipped\n",
   4035			 __func__);
   4036		/* Can't reset 160xxx or it will trash Demod tristate */
   4037		return pvr2_issue_simple_cmd(hdw,
   4038					     FX2CMD_HCW_MAKO_SLEEP_PIN |
   4039					     (1 << 8) |
   4040					     ((onoff ? 1 : 0) << 16));
   4041	}
   4042
   4043	return pvr2_issue_simple_cmd(hdw,
   4044				     FX2CMD_HCW_DEMOD_RESETIN |
   4045				     (1 << 8) |
   4046				     ((onoff ? 1 : 0) << 16));
   4047}
   4048
   4049
   4050static int pvr2_hdw_cmd_onair_fe_power_ctrl(struct pvr2_hdw *hdw, int onoff)
   4051{
   4052	hdw->flag_ok = !0;
   4053	return pvr2_issue_simple_cmd(hdw,(onoff ?
   4054					  FX2CMD_ONAIR_DTV_POWER_ON :
   4055					  FX2CMD_ONAIR_DTV_POWER_OFF));
   4056}
   4057
   4058
   4059static int pvr2_hdw_cmd_onair_digital_path_ctrl(struct pvr2_hdw *hdw,
   4060						int onoff)
   4061{
   4062	return pvr2_issue_simple_cmd(hdw,(onoff ?
   4063					  FX2CMD_ONAIR_DTV_STREAMING_ON :
   4064					  FX2CMD_ONAIR_DTV_STREAMING_OFF));
   4065}
   4066
   4067
   4068static void pvr2_hdw_cmd_modeswitch(struct pvr2_hdw *hdw,int digitalFl)
   4069{
   4070	int cmode;
   4071	/* Compare digital/analog desired setting with current setting.  If
   4072	   they don't match, fix it... */
   4073	cmode = (digitalFl ? PVR2_PATHWAY_DIGITAL : PVR2_PATHWAY_ANALOG);
   4074	if (cmode == hdw->pathway_state) {
   4075		/* They match; nothing to do */
   4076		return;
   4077	}
   4078
   4079	switch (hdw->hdw_desc->digital_control_scheme) {
   4080	case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
   4081		pvr2_hdw_cmd_hcw_demod_reset(hdw,digitalFl);
   4082		if (cmode == PVR2_PATHWAY_ANALOG) {
   4083			/* If moving to analog mode, also force the decoder
   4084			   to reset.  If no decoder is attached, then it's
   4085			   ok to ignore this because if/when the decoder
   4086			   attaches, it will reset itself at that time. */
   4087			pvr2_hdw_cmd_decoder_reset(hdw);
   4088		}
   4089		break;
   4090	case PVR2_DIGITAL_SCHEME_ONAIR:
   4091		/* Supposedly we should always have the power on whether in
   4092		   digital or analog mode.  But for now do what appears to
   4093		   work... */
   4094		pvr2_hdw_cmd_onair_fe_power_ctrl(hdw,digitalFl);
   4095		break;
   4096	default: break;
   4097	}
   4098
   4099	pvr2_hdw_untrip_unlocked(hdw);
   4100	hdw->pathway_state = cmode;
   4101}
   4102
   4103
   4104static void pvr2_led_ctrl_hauppauge(struct pvr2_hdw *hdw, int onoff)
   4105{
   4106	/* change some GPIO data
   4107	 *
   4108	 * note: bit d7 of dir appears to control the LED,
   4109	 * so we shut it off here.
   4110	 *
   4111	 */
   4112	if (onoff) {
   4113		pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000481);
   4114	} else {
   4115		pvr2_hdw_gpio_chg_dir(hdw, 0xffffffff, 0x00000401);
   4116	}
   4117	pvr2_hdw_gpio_chg_out(hdw, 0xffffffff, 0x00000000);
   4118}
   4119
   4120
   4121typedef void (*led_method_func)(struct pvr2_hdw *,int);
   4122
   4123static led_method_func led_methods[] = {
   4124	[PVR2_LED_SCHEME_HAUPPAUGE] = pvr2_led_ctrl_hauppauge,
   4125};
   4126
   4127
   4128/* Toggle LED */
   4129static void pvr2_led_ctrl(struct pvr2_hdw *hdw,int onoff)
   4130{
   4131	unsigned int scheme_id;
   4132	led_method_func fp;
   4133
   4134	if ((!onoff) == (!hdw->led_on)) return;
   4135
   4136	hdw->led_on = onoff != 0;
   4137
   4138	scheme_id = hdw->hdw_desc->led_scheme;
   4139	if (scheme_id < ARRAY_SIZE(led_methods)) {
   4140		fp = led_methods[scheme_id];
   4141	} else {
   4142		fp = NULL;
   4143	}
   4144
   4145	if (fp) (*fp)(hdw,onoff);
   4146}
   4147
   4148
   4149/* Stop / start video stream transport */
   4150static int pvr2_hdw_cmd_usbstream(struct pvr2_hdw *hdw,int runFl)
   4151{
   4152	int ret;
   4153
   4154	/* If we're in analog mode, then just issue the usual analog
   4155	   command. */
   4156	if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
   4157		return pvr2_issue_simple_cmd(hdw,
   4158					     (runFl ?
   4159					      FX2CMD_STREAMING_ON :
   4160					      FX2CMD_STREAMING_OFF));
   4161		/*Note: Not reached */
   4162	}
   4163
   4164	if (hdw->pathway_state != PVR2_PATHWAY_DIGITAL) {
   4165		/* Whoops, we don't know what mode we're in... */
   4166		return -EINVAL;
   4167	}
   4168
   4169	/* To get here we have to be in digital mode.  The mechanism here
   4170	   is unfortunately different for different vendors.  So we switch
   4171	   on the device's digital scheme attribute in order to figure out
   4172	   what to do. */
   4173	switch (hdw->hdw_desc->digital_control_scheme) {
   4174	case PVR2_DIGITAL_SCHEME_HAUPPAUGE:
   4175		return pvr2_issue_simple_cmd(hdw,
   4176					     (runFl ?
   4177					      FX2CMD_HCW_DTV_STREAMING_ON :
   4178					      FX2CMD_HCW_DTV_STREAMING_OFF));
   4179	case PVR2_DIGITAL_SCHEME_ONAIR:
   4180		ret = pvr2_issue_simple_cmd(hdw,
   4181					    (runFl ?
   4182					     FX2CMD_STREAMING_ON :
   4183					     FX2CMD_STREAMING_OFF));
   4184		if (ret) return ret;
   4185		return pvr2_hdw_cmd_onair_digital_path_ctrl(hdw,runFl);
   4186	default:
   4187		return -EINVAL;
   4188	}
   4189}
   4190
   4191
   4192/* Evaluate whether or not state_pathway_ok can change */
   4193static int state_eval_pathway_ok(struct pvr2_hdw *hdw)
   4194{
   4195	if (hdw->state_pathway_ok) {
   4196		/* Nothing to do if pathway is already ok */
   4197		return 0;
   4198	}
   4199	if (!hdw->state_pipeline_idle) {
   4200		/* Not allowed to change anything if pipeline is not idle */
   4201		return 0;
   4202	}
   4203	pvr2_hdw_cmd_modeswitch(hdw,hdw->input_val == PVR2_CVAL_INPUT_DTV);
   4204	hdw->state_pathway_ok = !0;
   4205	trace_stbit("state_pathway_ok",hdw->state_pathway_ok);
   4206	return !0;
   4207}
   4208
   4209
   4210/* Evaluate whether or not state_encoder_ok can change */
   4211static int state_eval_encoder_ok(struct pvr2_hdw *hdw)
   4212{
   4213	if (hdw->state_encoder_ok) return 0;
   4214	if (hdw->flag_tripped) return 0;
   4215	if (hdw->state_encoder_run) return 0;
   4216	if (hdw->state_encoder_config) return 0;
   4217	if (hdw->state_decoder_run) return 0;
   4218	if (hdw->state_usbstream_run) return 0;
   4219	if (hdw->pathway_state == PVR2_PATHWAY_DIGITAL) {
   4220		if (!hdw->hdw_desc->flag_digital_requires_cx23416) return 0;
   4221	} else if (hdw->pathway_state != PVR2_PATHWAY_ANALOG) {
   4222		return 0;
   4223	}
   4224
   4225	if (pvr2_upload_firmware2(hdw) < 0) {
   4226		hdw->flag_tripped = !0;
   4227		trace_stbit("flag_tripped",hdw->flag_tripped);
   4228		return !0;
   4229	}
   4230	hdw->state_encoder_ok = !0;
   4231	trace_stbit("state_encoder_ok",hdw->state_encoder_ok);
   4232	return !0;
   4233}
   4234
   4235
   4236/* Evaluate whether or not state_encoder_config can change */
   4237static int state_eval_encoder_config(struct pvr2_hdw *hdw)
   4238{
   4239	if (hdw->state_encoder_config) {
   4240		if (hdw->state_encoder_ok) {
   4241			if (hdw->state_pipeline_req &&
   4242			    !hdw->state_pipeline_pause) return 0;
   4243		}
   4244		hdw->state_encoder_config = 0;
   4245		hdw->state_encoder_waitok = 0;
   4246		trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
   4247		/* paranoia - solve race if timer just completed */
   4248		del_timer_sync(&hdw->encoder_wait_timer);
   4249	} else {
   4250		if (!hdw->state_pathway_ok ||
   4251		    (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
   4252		    !hdw->state_encoder_ok ||
   4253		    !hdw->state_pipeline_idle ||
   4254		    hdw->state_pipeline_pause ||
   4255		    !hdw->state_pipeline_req ||
   4256		    !hdw->state_pipeline_config) {
   4257			/* We must reset the enforced wait interval if
   4258			   anything has happened that might have disturbed
   4259			   the encoder.  This should be a rare case. */
   4260			if (timer_pending(&hdw->encoder_wait_timer)) {
   4261				del_timer_sync(&hdw->encoder_wait_timer);
   4262			}
   4263			if (hdw->state_encoder_waitok) {
   4264				/* Must clear the state - therefore we did
   4265				   something to a state bit and must also
   4266				   return true. */
   4267				hdw->state_encoder_waitok = 0;
   4268				trace_stbit("state_encoder_waitok",
   4269					    hdw->state_encoder_waitok);
   4270				return !0;
   4271			}
   4272			return 0;
   4273		}
   4274		if (!hdw->state_encoder_waitok) {
   4275			if (!timer_pending(&hdw->encoder_wait_timer)) {
   4276				/* waitok flag wasn't set and timer isn't
   4277				   running.  Check flag once more to avoid
   4278				   a race then start the timer.  This is
   4279				   the point when we measure out a minimal
   4280				   quiet interval before doing something to
   4281				   the encoder. */
   4282				if (!hdw->state_encoder_waitok) {
   4283					hdw->encoder_wait_timer.expires =
   4284						jiffies + msecs_to_jiffies(
   4285						TIME_MSEC_ENCODER_WAIT);
   4286					add_timer(&hdw->encoder_wait_timer);
   4287				}
   4288			}
   4289			/* We can't continue until we know we have been
   4290			   quiet for the interval measured by this
   4291			   timer. */
   4292			return 0;
   4293		}
   4294		pvr2_encoder_configure(hdw);
   4295		if (hdw->state_encoder_ok) hdw->state_encoder_config = !0;
   4296	}
   4297	trace_stbit("state_encoder_config",hdw->state_encoder_config);
   4298	return !0;
   4299}
   4300
   4301
   4302/* Return true if the encoder should not be running. */
   4303static int state_check_disable_encoder_run(struct pvr2_hdw *hdw)
   4304{
   4305	if (!hdw->state_encoder_ok) {
   4306		/* Encoder isn't healthy at the moment, so stop it. */
   4307		return !0;
   4308	}
   4309	if (!hdw->state_pathway_ok) {
   4310		/* Mode is not understood at the moment (i.e. it wants to
   4311		   change), so encoder must be stopped. */
   4312		return !0;
   4313	}
   4314
   4315	switch (hdw->pathway_state) {
   4316	case PVR2_PATHWAY_ANALOG:
   4317		if (!hdw->state_decoder_run) {
   4318			/* We're in analog mode and the decoder is not
   4319			   running; thus the encoder should be stopped as
   4320			   well. */
   4321			return !0;
   4322		}
   4323		break;
   4324	case PVR2_PATHWAY_DIGITAL:
   4325		if (hdw->state_encoder_runok) {
   4326			/* This is a funny case.  We're in digital mode so
   4327			   really the encoder should be stopped.  However
   4328			   if it really is running, only kill it after
   4329			   runok has been set.  This gives a chance for the
   4330			   onair quirk to function (encoder must run
   4331			   briefly first, at least once, before onair
   4332			   digital streaming can work). */
   4333			return !0;
   4334		}
   4335		break;
   4336	default:
   4337		/* Unknown mode; so encoder should be stopped. */
   4338		return !0;
   4339	}
   4340
   4341	/* If we get here, we haven't found a reason to stop the
   4342	   encoder. */
   4343	return 0;
   4344}
   4345
   4346
   4347/* Return true if the encoder should be running. */
   4348static int state_check_enable_encoder_run(struct pvr2_hdw *hdw)
   4349{
   4350	if (!hdw->state_encoder_ok) {
   4351		/* Don't run the encoder if it isn't healthy... */
   4352		return 0;
   4353	}
   4354	if (!hdw->state_pathway_ok) {
   4355		/* Don't run the encoder if we don't (yet) know what mode
   4356		   we need to be in... */
   4357		return 0;
   4358	}
   4359
   4360	switch (hdw->pathway_state) {
   4361	case PVR2_PATHWAY_ANALOG:
   4362		if (hdw->state_decoder_run && hdw->state_decoder_ready) {
   4363			/* In analog mode, if the decoder is running, then
   4364			   run the encoder. */
   4365			return !0;
   4366		}
   4367		break;
   4368	case PVR2_PATHWAY_DIGITAL:
   4369		if ((hdw->hdw_desc->digital_control_scheme ==
   4370		     PVR2_DIGITAL_SCHEME_ONAIR) &&
   4371		    !hdw->state_encoder_runok) {
   4372			/* This is a quirk.  OnAir hardware won't stream
   4373			   digital until the encoder has been run at least
   4374			   once, for a minimal period of time (empiricially
   4375			   measured to be 1/4 second).  So if we're on
   4376			   OnAir hardware and the encoder has never been
   4377			   run at all, then start the encoder.  Normal
   4378			   state machine logic in the driver will
   4379			   automatically handle the remaining bits. */
   4380			return !0;
   4381		}
   4382		break;
   4383	default:
   4384		/* For completeness (unknown mode; encoder won't run ever) */
   4385		break;
   4386	}
   4387	/* If we get here, then we haven't found any reason to run the
   4388	   encoder, so don't run it. */
   4389	return 0;
   4390}
   4391
   4392
   4393/* Evaluate whether or not state_encoder_run can change */
   4394static int state_eval_encoder_run(struct pvr2_hdw *hdw)
   4395{
   4396	if (hdw->state_encoder_run) {
   4397		if (!state_check_disable_encoder_run(hdw)) return 0;
   4398		if (hdw->state_encoder_ok) {
   4399			del_timer_sync(&hdw->encoder_run_timer);
   4400			if (pvr2_encoder_stop(hdw) < 0) return !0;
   4401		}
   4402		hdw->state_encoder_run = 0;
   4403	} else {
   4404		if (!state_check_enable_encoder_run(hdw)) return 0;
   4405		if (pvr2_encoder_start(hdw) < 0) return !0;
   4406		hdw->state_encoder_run = !0;
   4407		if (!hdw->state_encoder_runok) {
   4408			hdw->encoder_run_timer.expires = jiffies +
   4409				 msecs_to_jiffies(TIME_MSEC_ENCODER_OK);
   4410			add_timer(&hdw->encoder_run_timer);
   4411		}
   4412	}
   4413	trace_stbit("state_encoder_run",hdw->state_encoder_run);
   4414	return !0;
   4415}
   4416
   4417
   4418/* Timeout function for quiescent timer. */
   4419static void pvr2_hdw_quiescent_timeout(struct timer_list *t)
   4420{
   4421	struct pvr2_hdw *hdw = from_timer(hdw, t, quiescent_timer);
   4422	hdw->state_decoder_quiescent = !0;
   4423	trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
   4424	hdw->state_stale = !0;
   4425	schedule_work(&hdw->workpoll);
   4426}
   4427
   4428
   4429/* Timeout function for decoder stabilization timer. */
   4430static void pvr2_hdw_decoder_stabilization_timeout(struct timer_list *t)
   4431{
   4432	struct pvr2_hdw *hdw = from_timer(hdw, t, decoder_stabilization_timer);
   4433	hdw->state_decoder_ready = !0;
   4434	trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
   4435	hdw->state_stale = !0;
   4436	schedule_work(&hdw->workpoll);
   4437}
   4438
   4439
   4440/* Timeout function for encoder wait timer. */
   4441static void pvr2_hdw_encoder_wait_timeout(struct timer_list *t)
   4442{
   4443	struct pvr2_hdw *hdw = from_timer(hdw, t, encoder_wait_timer);
   4444	hdw->state_encoder_waitok = !0;
   4445	trace_stbit("state_encoder_waitok",hdw->state_encoder_waitok);
   4446	hdw->state_stale = !0;
   4447	schedule_work(&hdw->workpoll);
   4448}
   4449
   4450
   4451/* Timeout function for encoder run timer. */
   4452static void pvr2_hdw_encoder_run_timeout(struct timer_list *t)
   4453{
   4454	struct pvr2_hdw *hdw = from_timer(hdw, t, encoder_run_timer);
   4455	if (!hdw->state_encoder_runok) {
   4456		hdw->state_encoder_runok = !0;
   4457		trace_stbit("state_encoder_runok",hdw->state_encoder_runok);
   4458		hdw->state_stale = !0;
   4459		schedule_work(&hdw->workpoll);
   4460	}
   4461}
   4462
   4463
   4464/* Evaluate whether or not state_decoder_run can change */
   4465static int state_eval_decoder_run(struct pvr2_hdw *hdw)
   4466{
   4467	if (hdw->state_decoder_run) {
   4468		if (hdw->state_encoder_ok) {
   4469			if (hdw->state_pipeline_req &&
   4470			    !hdw->state_pipeline_pause &&
   4471			    hdw->state_pathway_ok) return 0;
   4472		}
   4473		if (!hdw->flag_decoder_missed) {
   4474			pvr2_decoder_enable(hdw,0);
   4475		}
   4476		hdw->state_decoder_quiescent = 0;
   4477		hdw->state_decoder_run = 0;
   4478		/* paranoia - solve race if timer(s) just completed */
   4479		del_timer_sync(&hdw->quiescent_timer);
   4480		/* Kill the stabilization timer, in case we're killing the
   4481		   encoder before the previous stabilization interval has
   4482		   been properly timed. */
   4483		del_timer_sync(&hdw->decoder_stabilization_timer);
   4484		hdw->state_decoder_ready = 0;
   4485	} else {
   4486		if (!hdw->state_decoder_quiescent) {
   4487			if (!timer_pending(&hdw->quiescent_timer)) {
   4488				/* We don't do something about the
   4489				   quiescent timer until right here because
   4490				   we also want to catch cases where the
   4491				   decoder was already not running (like
   4492				   after initialization) as opposed to
   4493				   knowing that we had just stopped it.
   4494				   The second flag check is here to cover a
   4495				   race - the timer could have run and set
   4496				   this flag just after the previous check
   4497				   but before we did the pending check. */
   4498				if (!hdw->state_decoder_quiescent) {
   4499					hdw->quiescent_timer.expires =
   4500						jiffies + msecs_to_jiffies(
   4501						TIME_MSEC_DECODER_WAIT);
   4502					add_timer(&hdw->quiescent_timer);
   4503				}
   4504			}
   4505			/* Don't allow decoder to start again until it has
   4506			   been quiesced first.  This little detail should
   4507			   hopefully further stabilize the encoder. */
   4508			return 0;
   4509		}
   4510		if (!hdw->state_pathway_ok ||
   4511		    (hdw->pathway_state != PVR2_PATHWAY_ANALOG) ||
   4512		    !hdw->state_pipeline_req ||
   4513		    hdw->state_pipeline_pause ||
   4514		    !hdw->state_pipeline_config ||
   4515		    !hdw->state_encoder_config ||
   4516		    !hdw->state_encoder_ok) return 0;
   4517		del_timer_sync(&hdw->quiescent_timer);
   4518		if (hdw->flag_decoder_missed) return 0;
   4519		if (pvr2_decoder_enable(hdw,!0) < 0) return 0;
   4520		hdw->state_decoder_quiescent = 0;
   4521		hdw->state_decoder_ready = 0;
   4522		hdw->state_decoder_run = !0;
   4523		if (hdw->decoder_client_id == PVR2_CLIENT_ID_SAA7115) {
   4524			hdw->decoder_stabilization_timer.expires =
   4525				jiffies + msecs_to_jiffies(
   4526				TIME_MSEC_DECODER_STABILIZATION_WAIT);
   4527			add_timer(&hdw->decoder_stabilization_timer);
   4528		} else {
   4529			hdw->state_decoder_ready = !0;
   4530		}
   4531	}
   4532	trace_stbit("state_decoder_quiescent",hdw->state_decoder_quiescent);
   4533	trace_stbit("state_decoder_run",hdw->state_decoder_run);
   4534	trace_stbit("state_decoder_ready", hdw->state_decoder_ready);
   4535	return !0;
   4536}
   4537
   4538
   4539/* Evaluate whether or not state_usbstream_run can change */
   4540static int state_eval_usbstream_run(struct pvr2_hdw *hdw)
   4541{
   4542	if (hdw->state_usbstream_run) {
   4543		int fl = !0;
   4544		if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
   4545			fl = (hdw->state_encoder_ok &&
   4546			      hdw->state_encoder_run);
   4547		} else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
   4548			   (hdw->hdw_desc->flag_digital_requires_cx23416)) {
   4549			fl = hdw->state_encoder_ok;
   4550		}
   4551		if (fl &&
   4552		    hdw->state_pipeline_req &&
   4553		    !hdw->state_pipeline_pause &&
   4554		    hdw->state_pathway_ok) {
   4555			return 0;
   4556		}
   4557		pvr2_hdw_cmd_usbstream(hdw,0);
   4558		hdw->state_usbstream_run = 0;
   4559	} else {
   4560		if (!hdw->state_pipeline_req ||
   4561		    hdw->state_pipeline_pause ||
   4562		    !hdw->state_pathway_ok) return 0;
   4563		if (hdw->pathway_state == PVR2_PATHWAY_ANALOG) {
   4564			if (!hdw->state_encoder_ok ||
   4565			    !hdw->state_encoder_run) return 0;
   4566		} else if ((hdw->pathway_state == PVR2_PATHWAY_DIGITAL) &&
   4567			   (hdw->hdw_desc->flag_digital_requires_cx23416)) {
   4568			if (!hdw->state_encoder_ok) return 0;
   4569			if (hdw->state_encoder_run) return 0;
   4570			if (hdw->hdw_desc->digital_control_scheme ==
   4571			    PVR2_DIGITAL_SCHEME_ONAIR) {
   4572				/* OnAir digital receivers won't stream
   4573				   unless the analog encoder has run first.
   4574				   Why?  I have no idea.  But don't even
   4575				   try until we know the analog side is
   4576				   known to have run. */
   4577				if (!hdw->state_encoder_runok) return 0;
   4578			}
   4579		}
   4580		if (pvr2_hdw_cmd_usbstream(hdw,!0) < 0) return 0;
   4581		hdw->state_usbstream_run = !0;
   4582	}
   4583	trace_stbit("state_usbstream_run",hdw->state_usbstream_run);
   4584	return !0;
   4585}
   4586
   4587
   4588/* Attempt to configure pipeline, if needed */
   4589static int state_eval_pipeline_config(struct pvr2_hdw *hdw)
   4590{
   4591	if (hdw->state_pipeline_config ||
   4592	    hdw->state_pipeline_pause) return 0;
   4593	pvr2_hdw_commit_execute(hdw);
   4594	return !0;
   4595}
   4596
   4597
   4598/* Update pipeline idle and pipeline pause tracking states based on other
   4599   inputs.  This must be called whenever the other relevant inputs have
   4600   changed. */
   4601static int state_update_pipeline_state(struct pvr2_hdw *hdw)
   4602{
   4603	unsigned int st;
   4604	int updatedFl = 0;
   4605	/* Update pipeline state */
   4606	st = !(hdw->state_encoder_run ||
   4607	       hdw->state_decoder_run ||
   4608	       hdw->state_usbstream_run ||
   4609	       (!hdw->state_decoder_quiescent));
   4610	if (!st != !hdw->state_pipeline_idle) {
   4611		hdw->state_pipeline_idle = st;
   4612		updatedFl = !0;
   4613	}
   4614	if (hdw->state_pipeline_idle && hdw->state_pipeline_pause) {
   4615		hdw->state_pipeline_pause = 0;
   4616		updatedFl = !0;
   4617	}
   4618	return updatedFl;
   4619}
   4620
   4621
   4622typedef int (*state_eval_func)(struct pvr2_hdw *);
   4623
   4624/* Set of functions to be run to evaluate various states in the driver. */
   4625static const state_eval_func eval_funcs[] = {
   4626	state_eval_pathway_ok,
   4627	state_eval_pipeline_config,
   4628	state_eval_encoder_ok,
   4629	state_eval_encoder_config,
   4630	state_eval_decoder_run,
   4631	state_eval_encoder_run,
   4632	state_eval_usbstream_run,
   4633};
   4634
   4635
   4636/* Process various states and return true if we did anything interesting. */
   4637static int pvr2_hdw_state_update(struct pvr2_hdw *hdw)
   4638{
   4639	unsigned int i;
   4640	int state_updated = 0;
   4641	int check_flag;
   4642
   4643	if (!hdw->state_stale) return 0;
   4644	if ((hdw->fw1_state != FW1_STATE_OK) ||
   4645	    !hdw->flag_ok) {
   4646		hdw->state_stale = 0;
   4647		return !0;
   4648	}
   4649	/* This loop is the heart of the entire driver.  It keeps trying to
   4650	   evaluate various bits of driver state until nothing changes for
   4651	   one full iteration.  Each "bit of state" tracks some global
   4652	   aspect of the driver, e.g. whether decoder should run, if
   4653	   pipeline is configured, usb streaming is on, etc.  We separately
   4654	   evaluate each of those questions based on other driver state to
   4655	   arrive at the correct running configuration. */
   4656	do {
   4657		check_flag = 0;
   4658		state_update_pipeline_state(hdw);
   4659		/* Iterate over each bit of state */
   4660		for (i = 0; (i<ARRAY_SIZE(eval_funcs)) && hdw->flag_ok; i++) {
   4661			if ((*eval_funcs[i])(hdw)) {
   4662				check_flag = !0;
   4663				state_updated = !0;
   4664				state_update_pipeline_state(hdw);
   4665			}
   4666		}
   4667	} while (check_flag && hdw->flag_ok);
   4668	hdw->state_stale = 0;
   4669	trace_stbit("state_stale",hdw->state_stale);
   4670	return state_updated;
   4671}
   4672
   4673
   4674static unsigned int print_input_mask(unsigned int msk,
   4675				     char *buf,unsigned int acnt)
   4676{
   4677	unsigned int idx,ccnt;
   4678	unsigned int tcnt = 0;
   4679	for (idx = 0; idx < ARRAY_SIZE(control_values_input); idx++) {
   4680		if (!((1UL << idx) & msk)) continue;
   4681		ccnt = scnprintf(buf+tcnt,
   4682				 acnt-tcnt,
   4683				 "%s%s",
   4684				 (tcnt ? ", " : ""),
   4685				 control_values_input[idx]);
   4686		tcnt += ccnt;
   4687	}
   4688	return tcnt;
   4689}
   4690
   4691
   4692static const char *pvr2_pathway_state_name(int id)
   4693{
   4694	switch (id) {
   4695	case PVR2_PATHWAY_ANALOG: return "analog";
   4696	case PVR2_PATHWAY_DIGITAL: return "digital";
   4697	default: return "unknown";
   4698	}
   4699}
   4700
   4701
   4702static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
   4703					     char *buf,unsigned int acnt)
   4704{
   4705	switch (which) {
   4706	case 0:
   4707		return scnprintf(
   4708			buf,acnt,
   4709			"driver:%s%s%s%s%s <mode=%s>",
   4710			(hdw->flag_ok ? " <ok>" : " <fail>"),
   4711			(hdw->flag_init_ok ? " <init>" : " <uninitialized>"),
   4712			(hdw->flag_disconnected ? " <disconnected>" :
   4713			 " <connected>"),
   4714			(hdw->flag_tripped ? " <tripped>" : ""),
   4715			(hdw->flag_decoder_missed ? " <no decoder>" : ""),
   4716			pvr2_pathway_state_name(hdw->pathway_state));
   4717
   4718	case 1:
   4719		return scnprintf(
   4720			buf,acnt,
   4721			"pipeline:%s%s%s%s",
   4722			(hdw->state_pipeline_idle ? " <idle>" : ""),
   4723			(hdw->state_pipeline_config ?
   4724			 " <configok>" : " <stale>"),
   4725			(hdw->state_pipeline_req ? " <req>" : ""),
   4726			(hdw->state_pipeline_pause ? " <pause>" : ""));
   4727	case 2:
   4728		return scnprintf(
   4729			buf,acnt,
   4730			"worker:%s%s%s%s%s%s%s",
   4731			(hdw->state_decoder_run ?
   4732			 (hdw->state_decoder_ready ?
   4733			  "<decode:run>" : " <decode:start>") :
   4734			 (hdw->state_decoder_quiescent ?
   4735			  "" : " <decode:stop>")),
   4736			(hdw->state_decoder_quiescent ?
   4737			 " <decode:quiescent>" : ""),
   4738			(hdw->state_encoder_ok ?
   4739			 "" : " <encode:init>"),
   4740			(hdw->state_encoder_run ?
   4741			 (hdw->state_encoder_runok ?
   4742			  " <encode:run>" :
   4743			  " <encode:firstrun>") :
   4744			 (hdw->state_encoder_runok ?
   4745			  " <encode:stop>" :
   4746			  " <encode:virgin>")),
   4747			(hdw->state_encoder_config ?
   4748			 " <encode:configok>" :
   4749			 (hdw->state_encoder_waitok ?
   4750			  "" : " <encode:waitok>")),
   4751			(hdw->state_usbstream_run ?
   4752			 " <usb:run>" : " <usb:stop>"),
   4753			(hdw->state_pathway_ok ?
   4754			 " <pathway:ok>" : ""));
   4755	case 3:
   4756		return scnprintf(
   4757			buf,acnt,
   4758			"state: %s",
   4759			pvr2_get_state_name(hdw->master_state));
   4760	case 4: {
   4761		unsigned int tcnt = 0;
   4762		unsigned int ccnt;
   4763
   4764		ccnt = scnprintf(buf,
   4765				 acnt,
   4766				 "Hardware supported inputs: ");
   4767		tcnt += ccnt;
   4768		tcnt += print_input_mask(hdw->input_avail_mask,
   4769					 buf+tcnt,
   4770					 acnt-tcnt);
   4771		if (hdw->input_avail_mask != hdw->input_allowed_mask) {
   4772			ccnt = scnprintf(buf+tcnt,
   4773					 acnt-tcnt,
   4774					 "; allowed inputs: ");
   4775			tcnt += ccnt;
   4776			tcnt += print_input_mask(hdw->input_allowed_mask,
   4777						 buf+tcnt,
   4778						 acnt-tcnt);
   4779		}
   4780		return tcnt;
   4781	}
   4782	case 5: {
   4783		struct pvr2_stream_stats stats;
   4784		if (!hdw->vid_stream) break;
   4785		pvr2_stream_get_stats(hdw->vid_stream,
   4786				      &stats,
   4787				      0);
   4788		return scnprintf(
   4789			buf,acnt,
   4790			"Bytes streamed=%u URBs: queued=%u idle=%u ready=%u processed=%u failed=%u",
   4791			stats.bytes_processed,
   4792			stats.buffers_in_queue,
   4793			stats.buffers_in_idle,
   4794			stats.buffers_in_ready,
   4795			stats.buffers_processed,
   4796			stats.buffers_failed);
   4797	}
   4798	case 6: {
   4799		unsigned int id = hdw->ir_scheme_active;
   4800		return scnprintf(buf, acnt, "ir scheme: id=%d %s", id,
   4801				 (id >= ARRAY_SIZE(ir_scheme_names) ?
   4802				  "?" : ir_scheme_names[id]));
   4803	}
   4804	default: break;
   4805	}
   4806	return 0;
   4807}
   4808
   4809
   4810/* Generate report containing info about attached sub-devices and attached
   4811   i2c clients, including an indication of which attached i2c clients are
   4812   actually sub-devices. */
   4813static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw *hdw,
   4814					    char *buf, unsigned int acnt)
   4815{
   4816	struct v4l2_subdev *sd;
   4817	unsigned int tcnt = 0;
   4818	unsigned int ccnt;
   4819	struct i2c_client *client;
   4820	const char *p;
   4821	unsigned int id;
   4822
   4823	ccnt = scnprintf(buf, acnt, "Associated v4l2-subdev drivers and I2C clients:\n");
   4824	tcnt += ccnt;
   4825	v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
   4826		id = sd->grp_id;
   4827		p = NULL;
   4828		if (id < ARRAY_SIZE(module_names)) p = module_names[id];
   4829		if (p) {
   4830			ccnt = scnprintf(buf + tcnt, acnt - tcnt, "  %s:", p);
   4831			tcnt += ccnt;
   4832		} else {
   4833			ccnt = scnprintf(buf + tcnt, acnt - tcnt,
   4834					 "  (unknown id=%u):", id);
   4835			tcnt += ccnt;
   4836		}
   4837		client = v4l2_get_subdevdata(sd);
   4838		if (client) {
   4839			ccnt = scnprintf(buf + tcnt, acnt - tcnt,
   4840					 " %s @ %02x\n", client->name,
   4841					 client->addr);
   4842			tcnt += ccnt;
   4843		} else {
   4844			ccnt = scnprintf(buf + tcnt, acnt - tcnt,
   4845					 " no i2c client\n");
   4846			tcnt += ccnt;
   4847		}
   4848	}
   4849	return tcnt;
   4850}
   4851
   4852
   4853unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
   4854				   char *buf,unsigned int acnt)
   4855{
   4856	unsigned int bcnt,ccnt,idx;
   4857	bcnt = 0;
   4858	LOCK_TAKE(hdw->big_lock);
   4859	for (idx = 0; ; idx++) {
   4860		ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,acnt);
   4861		if (!ccnt) break;
   4862		bcnt += ccnt; acnt -= ccnt; buf += ccnt;
   4863		if (!acnt) break;
   4864		buf[0] = '\n'; ccnt = 1;
   4865		bcnt += ccnt; acnt -= ccnt; buf += ccnt;
   4866	}
   4867	ccnt = pvr2_hdw_report_clients(hdw, buf, acnt);
   4868	bcnt += ccnt; acnt -= ccnt; buf += ccnt;
   4869	LOCK_GIVE(hdw->big_lock);
   4870	return bcnt;
   4871}
   4872
   4873
   4874static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
   4875{
   4876	char buf[256];
   4877	unsigned int idx, ccnt;
   4878	unsigned int lcnt, ucnt;
   4879
   4880	for (idx = 0; ; idx++) {
   4881		ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
   4882		if (!ccnt) break;
   4883		pr_info("%s %.*s\n", hdw->name, ccnt, buf);
   4884	}
   4885	ccnt = pvr2_hdw_report_clients(hdw, buf, sizeof(buf));
   4886	if (ccnt >= sizeof(buf))
   4887		ccnt = sizeof(buf);
   4888
   4889	ucnt = 0;
   4890	while (ucnt < ccnt) {
   4891		lcnt = 0;
   4892		while ((lcnt + ucnt < ccnt) && (buf[lcnt + ucnt] != '\n')) {
   4893			lcnt++;
   4894		}
   4895		pr_info("%s %.*s\n", hdw->name, lcnt, buf + ucnt);
   4896		ucnt += lcnt + 1;
   4897	}
   4898}
   4899
   4900
   4901/* Evaluate and update the driver's current state, taking various actions
   4902   as appropriate for the update. */
   4903static int pvr2_hdw_state_eval(struct pvr2_hdw *hdw)
   4904{
   4905	unsigned int st;
   4906	int state_updated = 0;
   4907	int callback_flag = 0;
   4908	int analog_mode;
   4909
   4910	pvr2_trace(PVR2_TRACE_STBITS,
   4911		   "Drive state check START");
   4912	if (pvrusb2_debug & PVR2_TRACE_STBITS) {
   4913		pvr2_hdw_state_log_state(hdw);
   4914	}
   4915
   4916	/* Process all state and get back over disposition */
   4917	state_updated = pvr2_hdw_state_update(hdw);
   4918
   4919	analog_mode = (hdw->pathway_state != PVR2_PATHWAY_DIGITAL);
   4920
   4921	/* Update master state based upon all other states. */
   4922	if (!hdw->flag_ok) {
   4923		st = PVR2_STATE_DEAD;
   4924	} else if (hdw->fw1_state != FW1_STATE_OK) {
   4925		st = PVR2_STATE_COLD;
   4926	} else if ((analog_mode ||
   4927		    hdw->hdw_desc->flag_digital_requires_cx23416) &&
   4928		   !hdw->state_encoder_ok) {
   4929		st = PVR2_STATE_WARM;
   4930	} else if (hdw->flag_tripped ||
   4931		   (analog_mode && hdw->flag_decoder_missed)) {
   4932		st = PVR2_STATE_ERROR;
   4933	} else if (hdw->state_usbstream_run &&
   4934		   (!analog_mode ||
   4935		    (hdw->state_encoder_run && hdw->state_decoder_run))) {
   4936		st = PVR2_STATE_RUN;
   4937	} else {
   4938		st = PVR2_STATE_READY;
   4939	}
   4940	if (hdw->master_state != st) {
   4941		pvr2_trace(PVR2_TRACE_STATE,
   4942			   "Device state change from %s to %s",
   4943			   pvr2_get_state_name(hdw->master_state),
   4944			   pvr2_get_state_name(st));
   4945		pvr2_led_ctrl(hdw,st == PVR2_STATE_RUN);
   4946		hdw->master_state = st;
   4947		state_updated = !0;
   4948		callback_flag = !0;
   4949	}
   4950	if (state_updated) {
   4951		/* Trigger anyone waiting on any state changes here. */
   4952		wake_up(&hdw->state_wait_data);
   4953	}
   4954
   4955	if (pvrusb2_debug & PVR2_TRACE_STBITS) {
   4956		pvr2_hdw_state_log_state(hdw);
   4957	}
   4958	pvr2_trace(PVR2_TRACE_STBITS,
   4959		   "Drive state check DONE callback=%d",callback_flag);
   4960
   4961	return callback_flag;
   4962}
   4963
   4964
   4965/* Cause kernel thread to check / update driver state */
   4966static void pvr2_hdw_state_sched(struct pvr2_hdw *hdw)
   4967{
   4968	if (hdw->state_stale) return;
   4969	hdw->state_stale = !0;
   4970	trace_stbit("state_stale",hdw->state_stale);
   4971	schedule_work(&hdw->workpoll);
   4972}
   4973
   4974
   4975int pvr2_hdw_gpio_get_dir(struct pvr2_hdw *hdw,u32 *dp)
   4976{
   4977	return pvr2_read_register(hdw,PVR2_GPIO_DIR,dp);
   4978}
   4979
   4980
   4981int pvr2_hdw_gpio_get_out(struct pvr2_hdw *hdw,u32 *dp)
   4982{
   4983	return pvr2_read_register(hdw,PVR2_GPIO_OUT,dp);
   4984}
   4985
   4986
   4987int pvr2_hdw_gpio_get_in(struct pvr2_hdw *hdw,u32 *dp)
   4988{
   4989	return pvr2_read_register(hdw,PVR2_GPIO_IN,dp);
   4990}
   4991
   4992
   4993int pvr2_hdw_gpio_chg_dir(struct pvr2_hdw *hdw,u32 msk,u32 val)
   4994{
   4995	u32 cval,nval;
   4996	int ret;
   4997	if (~msk) {
   4998		ret = pvr2_read_register(hdw,PVR2_GPIO_DIR,&cval);
   4999		if (ret) return ret;
   5000		nval = (cval & ~msk) | (val & msk);
   5001		pvr2_trace(PVR2_TRACE_GPIO,
   5002			   "GPIO direction changing 0x%x:0x%x from 0x%x to 0x%x",
   5003			   msk,val,cval,nval);
   5004	} else {
   5005		nval = val;
   5006		pvr2_trace(PVR2_TRACE_GPIO,
   5007			   "GPIO direction changing to 0x%x",nval);
   5008	}
   5009	return pvr2_write_register(hdw,PVR2_GPIO_DIR,nval);
   5010}
   5011
   5012
   5013int pvr2_hdw_gpio_chg_out(struct pvr2_hdw *hdw,u32 msk,u32 val)
   5014{
   5015	u32 cval,nval;
   5016	int ret;
   5017	if (~msk) {
   5018		ret = pvr2_read_register(hdw,PVR2_GPIO_OUT,&cval);
   5019		if (ret) return ret;
   5020		nval = (cval & ~msk) | (val & msk);
   5021		pvr2_trace(PVR2_TRACE_GPIO,
   5022			   "GPIO output changing 0x%x:0x%x from 0x%x to 0x%x",
   5023			   msk,val,cval,nval);
   5024	} else {
   5025		nval = val;
   5026		pvr2_trace(PVR2_TRACE_GPIO,
   5027			   "GPIO output changing to 0x%x",nval);
   5028	}
   5029	return pvr2_write_register(hdw,PVR2_GPIO_OUT,nval);
   5030}
   5031
   5032
   5033void pvr2_hdw_status_poll(struct pvr2_hdw *hdw)
   5034{
   5035	struct v4l2_tuner *vtp = &hdw->tuner_signal_info;
   5036	memset(vtp, 0, sizeof(*vtp));
   5037	vtp->type = (hdw->input_val == PVR2_CVAL_INPUT_RADIO) ?
   5038		V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
   5039	hdw->tuner_signal_stale = 0;
   5040	/* Note: There apparently is no replacement for VIDIOC_CROPCAP
   5041	   using v4l2-subdev - therefore we can't support that AT ALL right
   5042	   now.  (Of course, no sub-drivers seem to implement it either.
   5043	   But now it's a a chicken and egg problem...) */
   5044	v4l2_device_call_all(&hdw->v4l2_dev, 0, tuner, g_tuner, vtp);
   5045	pvr2_trace(PVR2_TRACE_CHIPS, "subdev status poll type=%u strength=%u audio=0x%x cap=0x%x low=%u hi=%u",
   5046		   vtp->type,
   5047		   vtp->signal, vtp->rxsubchans, vtp->capability,
   5048		   vtp->rangelow, vtp->rangehigh);
   5049
   5050	/* We have to do this to avoid getting into constant polling if
   5051	   there's nobody to answer a poll of cropcap info. */
   5052	hdw->cropcap_stale = 0;
   5053}
   5054
   5055
   5056unsigned int pvr2_hdw_get_input_available(struct pvr2_hdw *hdw)
   5057{
   5058	return hdw->input_avail_mask;
   5059}
   5060
   5061
   5062unsigned int pvr2_hdw_get_input_allowed(struct pvr2_hdw *hdw)
   5063{
   5064	return hdw->input_allowed_mask;
   5065}
   5066
   5067
   5068static int pvr2_hdw_set_input(struct pvr2_hdw *hdw,int v)
   5069{
   5070	if (hdw->input_val != v) {
   5071		hdw->input_val = v;
   5072		hdw->input_dirty = !0;
   5073	}
   5074
   5075	/* Handle side effects - if we switch to a mode that needs the RF
   5076	   tuner, then select the right frequency choice as well and mark
   5077	   it dirty. */
   5078	if (hdw->input_val == PVR2_CVAL_INPUT_RADIO) {
   5079		hdw->freqSelector = 0;
   5080		hdw->freqDirty = !0;
   5081	} else if ((hdw->input_val == PVR2_CVAL_INPUT_TV) ||
   5082		   (hdw->input_val == PVR2_CVAL_INPUT_DTV)) {
   5083		hdw->freqSelector = 1;
   5084		hdw->freqDirty = !0;
   5085	}
   5086	return 0;
   5087}
   5088
   5089
   5090int pvr2_hdw_set_input_allowed(struct pvr2_hdw *hdw,
   5091			       unsigned int change_mask,
   5092			       unsigned int change_val)
   5093{
   5094	int ret = 0;
   5095	unsigned int nv,m,idx;
   5096	LOCK_TAKE(hdw->big_lock);
   5097	do {
   5098		nv = hdw->input_allowed_mask & ~change_mask;
   5099		nv |= (change_val & change_mask);
   5100		nv &= hdw->input_avail_mask;
   5101		if (!nv) {
   5102			/* No legal modes left; return error instead. */
   5103			ret = -EPERM;
   5104			break;
   5105		}
   5106		hdw->input_allowed_mask = nv;
   5107		if ((1UL << hdw->input_val) & hdw->input_allowed_mask) {
   5108			/* Current mode is still in the allowed mask, so
   5109			   we're done. */
   5110			break;
   5111		}
   5112		/* Select and switch to a mode that is still in the allowed
   5113		   mask */
   5114		if (!hdw->input_allowed_mask) {
   5115			/* Nothing legal; give up */
   5116			break;
   5117		}
   5118		m = hdw->input_allowed_mask;
   5119		for (idx = 0; idx < (sizeof(m) << 3); idx++) {
   5120			if (!((1UL << idx) & m)) continue;
   5121			pvr2_hdw_set_input(hdw,idx);
   5122			break;
   5123		}
   5124	} while (0);
   5125	LOCK_GIVE(hdw->big_lock);
   5126	return ret;
   5127}
   5128
   5129
   5130/* Find I2C address of eeprom */
   5131static int pvr2_hdw_get_eeprom_addr(struct pvr2_hdw *hdw)
   5132{
   5133	int result;
   5134	LOCK_TAKE(hdw->ctl_lock); do {
   5135		hdw->cmd_buffer[0] = FX2CMD_GET_EEPROM_ADDR;
   5136		result = pvr2_send_request(hdw,
   5137					   hdw->cmd_buffer,1,
   5138					   hdw->cmd_buffer,1);
   5139		if (result < 0) break;
   5140		result = hdw->cmd_buffer[0];
   5141	} while(0); LOCK_GIVE(hdw->ctl_lock);
   5142	return result;
   5143}