Lines Matching refs:cx

52 static void gpio_write(struct cx18 *cx)
54 u32 dir_lo = cx->gpio_dir & 0xffff;
55 u32 val_lo = cx->gpio_val & 0xffff;
56 u32 dir_hi = cx->gpio_dir >> 16;
57 u32 val_hi = cx->gpio_val >> 16;
59 cx18_write_reg_expect(cx, dir_lo << 16,
61 cx18_write_reg_expect(cx, (dir_lo << 16) | val_lo,
63 cx18_write_reg_expect(cx, dir_hi << 16,
65 cx18_write_reg_expect(cx, (dir_hi << 16) | val_hi,
69 static void gpio_update(struct cx18 *cx, u32 mask, u32 data)
74 mutex_lock(&cx->gpio_lock);
75 cx->gpio_val = (cx->gpio_val & ~mask) | (data & mask);
76 gpio_write(cx);
77 mutex_unlock(&cx->gpio_lock);
80 static void gpio_reset_seq(struct cx18 *cx, u32 active_lo, u32 active_hi,
97 gpio_update(cx, mask, ~active_lo);
101 gpio_update(cx, mask, ~active_hi);
110 struct cx18 *cx = v4l2_get_subdevdata(sd);
112 mutex_lock(&cx->gpio_lock);
114 cx->gpio_dir, cx->gpio_val);
115 mutex_unlock(&cx->gpio_lock);
121 struct cx18 *cx = v4l2_get_subdevdata(sd);
124 * FIXME - work out the cx->active/audio_input mess - this is
126 * audio routing, but we need to update the state in cx
128 gpio_update(cx, cx->card->gpio_audio_input.mask,
129 cx->card->gpio_audio_input.radio);
135 struct cx18 *cx = v4l2_get_subdevdata(sd);
138 switch (cx->card->audio_inputs[cx->audio_input].muxer_input) {
140 data = cx->card->gpio_audio_input.linein;
143 data = cx->card->gpio_audio_input.tuner;
147 * FIXME - work out the cx->active/audio_input mess - this is
149 * audio routing, but we need to update the state in cx
151 data = cx->card->gpio_audio_input.tuner;
154 gpio_update(cx, cx->card->gpio_audio_input.mask, data);
161 struct cx18 *cx = v4l2_get_subdevdata(sd);
166 data = cx->card->gpio_audio_input.tuner;
169 data = cx->card->gpio_audio_input.linein;
172 data = cx->card->gpio_audio_input.radio;
177 gpio_update(cx, cx->card->gpio_audio_input.mask, data);
205 struct cx18 *cx = v4l2_get_subdevdata(sd);
207 mutex_lock(&cx->gpio_lock);
209 cx->gpio_dir, cx->gpio_val);
210 mutex_unlock(&cx->gpio_lock);
216 struct cx18 *cx = v4l2_get_subdevdata(sd);
219 p = &cx->card->gpio_i2c_slave_reset;
222 gpio_reset_seq(cx, p->active_lo_mask, p->active_hi_mask,
240 gpio_reset_seq(cx, p->ir_reset_mask, 0,
244 if (cx->card->tuners[0].tuner == TUNER_XC2028)
245 gpio_reset_seq(cx, (1 << cx->card->xceive_pin), 0,
264 void cx18_gpio_init(struct cx18 *cx)
266 mutex_lock(&cx->gpio_lock);
267 cx->gpio_dir = cx->card->gpio_init.direction;
268 cx->gpio_val = cx->card->gpio_init.initial_value;
270 if (cx->card->tuners[0].tuner == TUNER_XC2028) {
271 cx->gpio_dir |= 1 << cx->card->xceive_pin;
272 cx->gpio_val |= 1 << cx->card->xceive_pin;
275 if (cx->gpio_dir == 0) {
276 mutex_unlock(&cx->gpio_lock);
281 cx18_read_reg(cx, CX18_REG_GPIO_DIR1),
282 cx18_read_reg(cx, CX18_REG_GPIO_DIR2),
283 cx18_read_reg(cx, CX18_REG_GPIO_OUT1),
284 cx18_read_reg(cx, CX18_REG_GPIO_OUT2));
286 gpio_write(cx);
287 mutex_unlock(&cx->gpio_lock);
290 int cx18_gpio_register(struct cx18 *cx, u32 hw)
298 sd = &cx->sd_gpiomux;
303 sd = &cx->sd_resetctrl;
312 v4l2_set_subdevdata(sd, cx);
313 snprintf(sd->name, sizeof(sd->name), "%s %s", cx->v4l2_dev.name, str);
315 return v4l2_device_register_subdev(&cx->v4l2_dev, sd);
320 struct cx18 *cx = to_cx18((struct v4l2_device *)data);
322 if (cx->card->gpio_i2c_slave_reset.ir_reset_mask == 0)
327 v4l2_subdev_call(&cx->sd_resetctrl,
338 struct cx18 *cx = cb_data->cx;
341 cx->card->tuners[0].tuner != TUNER_XC2028)
345 return v4l2_subdev_call(&cx->sd_resetctrl,