Lines Matching refs:cx

38 static void gpio_write(struct cx18 *cx)
40 u32 dir_lo = cx->gpio_dir & 0xffff;
41 u32 val_lo = cx->gpio_val & 0xffff;
42 u32 dir_hi = cx->gpio_dir >> 16;
43 u32 val_hi = cx->gpio_val >> 16;
45 cx18_write_reg_expect(cx, dir_lo << 16,
47 cx18_write_reg_expect(cx, (dir_lo << 16) | val_lo,
49 cx18_write_reg_expect(cx, dir_hi << 16,
51 cx18_write_reg_expect(cx, (dir_hi << 16) | val_hi,
55 static void gpio_update(struct cx18 *cx, u32 mask, u32 data)
60 mutex_lock(&cx->gpio_lock);
61 cx->gpio_val = (cx->gpio_val & ~mask) | (data & mask);
62 gpio_write(cx);
63 mutex_unlock(&cx->gpio_lock);
66 static void gpio_reset_seq(struct cx18 *cx, u32 active_lo, u32 active_hi,
83 gpio_update(cx, mask, ~active_lo);
87 gpio_update(cx, mask, ~active_hi);
96 struct cx18 *cx = v4l2_get_subdevdata(sd);
98 mutex_lock(&cx->gpio_lock);
100 cx->gpio_dir, cx->gpio_val);
101 mutex_unlock(&cx->gpio_lock);
107 struct cx18 *cx = v4l2_get_subdevdata(sd);
110 * FIXME - work out the cx->active/audio_input mess - this is
112 * audio routing, but we need to update the state in cx
114 gpio_update(cx, cx->card->gpio_audio_input.mask,
115 cx->card->gpio_audio_input.radio);
121 struct cx18 *cx = v4l2_get_subdevdata(sd);
124 switch (cx->card->audio_inputs[cx->audio_input].muxer_input) {
126 data = cx->card->gpio_audio_input.linein;
129 data = cx->card->gpio_audio_input.tuner;
133 * FIXME - work out the cx->active/audio_input mess - this is
135 * audio routing, but we need to update the state in cx
137 data = cx->card->gpio_audio_input.tuner;
140 gpio_update(cx, cx->card->gpio_audio_input.mask, data);
147 struct cx18 *cx = v4l2_get_subdevdata(sd);
152 data = cx->card->gpio_audio_input.tuner;
155 data = cx->card->gpio_audio_input.linein;
158 data = cx->card->gpio_audio_input.radio;
163 gpio_update(cx, cx->card->gpio_audio_input.mask, data);
195 struct cx18 *cx = v4l2_get_subdevdata(sd);
197 mutex_lock(&cx->gpio_lock);
199 cx->gpio_dir, cx->gpio_val);
200 mutex_unlock(&cx->gpio_lock);
206 struct cx18 *cx = v4l2_get_subdevdata(sd);
209 p = &cx->card->gpio_i2c_slave_reset;
212 gpio_reset_seq(cx, p->active_lo_mask, p->active_hi_mask,
230 gpio_reset_seq(cx, p->ir_reset_mask, 0,
234 if (cx->card->tuners[0].tuner == TUNER_XC2028)
235 gpio_reset_seq(cx, (1 << cx->card->xceive_pin), 0,
254 void cx18_gpio_init(struct cx18 *cx)
256 mutex_lock(&cx->gpio_lock);
257 cx->gpio_dir = cx->card->gpio_init.direction;
258 cx->gpio_val = cx->card->gpio_init.initial_value;
260 if (cx->card->tuners[0].tuner == TUNER_XC2028) {
261 cx->gpio_dir |= 1 << cx->card->xceive_pin;
262 cx->gpio_val |= 1 << cx->card->xceive_pin;
265 if (cx->gpio_dir == 0) {
266 mutex_unlock(&cx->gpio_lock);
271 cx18_read_reg(cx, CX18_REG_GPIO_DIR1),
272 cx18_read_reg(cx, CX18_REG_GPIO_DIR2),
273 cx18_read_reg(cx, CX18_REG_GPIO_OUT1),
274 cx18_read_reg(cx, CX18_REG_GPIO_OUT2));
276 gpio_write(cx);
277 mutex_unlock(&cx->gpio_lock);
280 int cx18_gpio_register(struct cx18 *cx, u32 hw)
288 sd = &cx->sd_gpiomux;
293 sd = &cx->sd_resetctrl;
302 v4l2_set_subdevdata(sd, cx);
303 snprintf(sd->name, sizeof(sd->name), "%s %s", cx->v4l2_dev.name, str);
305 return v4l2_device_register_subdev(&cx->v4l2_dev, sd);
310 struct cx18 *cx = to_cx18(data);
312 if (cx->card->gpio_i2c_slave_reset.ir_reset_mask == 0)
317 v4l2_subdev_call(&cx->sd_resetctrl,
328 struct cx18 *cx = cb_data->cx;
331 cx->card->tuners[0].tuner != TUNER_XC2028)
335 return v4l2_subdev_call(&cx->sd_resetctrl,