Lines Matching +full:addr +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) 2005-2006 Micronas USA Inc.
11 #include <media/v4l2-common.h>
12 #include <media/v4l2-ioctl.h>
13 #include <media/v4l2-device.h>
16 MODULE_DESCRIPTION("sony-btf-mpx driver");
33 static int force_mpx_mode = -1;
47 static int mpx_write(struct i2c_client *client, int dev, int addr, int val) in mpx_write() argument
53 buffer[1] = addr >> 8; in mpx_write()
54 buffer[2] = addr & 0xff; in mpx_write()
57 msg.addr = client->addr; in mpx_write()
61 i2c_transfer(client->adapter, &msg, 1); in mpx_write()
66 * MPX register values for the BTF-PG472Z:
71 * ---------------------------------------------------------------
85 * A2-1 1003 0020 0100 2601 5000 XXXX 0004 7500
86 * A2-2 1003 0020 0100 2601 5000 XXXX 0005 7500
87 * A2-3 1003 0020 0100 2601 5000 XXXX 0007 7500
111 * --------
141 /* D/K A2-1 */ { AUD_A2, 0x1003, 0x0020, 0x0100, 0x2601,
143 /* D/K A2-2 */ { AUD_A2, 0x1003, 0x0020, 0x0100, 0x2601,
145 /* D/K A2-3 */ { AUD_A2, 0x1003, 0x0020, 0x0100, 0x2601,
159 struct i2c_client *client = v4l2_get_subdevdata(&t->sd); in mpx_setup()
163 int mode = t->mpxmode; in mpx_setup() local
169 msg.addr = client->addr; in mpx_setup()
173 i2c_transfer(client->adapter, &msg, 1); in mpx_setup()
175 i2c_transfer(client->adapter, &msg, 1); in mpx_setup()
177 if (t->audmode != V4L2_TUNER_MODE_MONO) in mpx_setup()
178 mode++; in mpx_setup()
180 if (mpx_audio_modes[mode].audio_mode != AUD_MONO) { in mpx_setup()
181 switch (t->audmode) { in mpx_setup()
183 switch (mpx_audio_modes[mode].audio_mode) { in mpx_setup()
185 source = mpx_audio_modes[mode].source; in mpx_setup()
198 source = mpx_audio_modes[mode].source; in mpx_setup()
207 source |= mpx_audio_modes[mode].source & 0x00ff; in mpx_setup()
209 source = mpx_audio_modes[mode].source; in mpx_setup()
211 mpx_write(client, 0x10, 0x0030, mpx_audio_modes[mode].modus); in mpx_setup()
213 mpx_write(client, 0x12, 0x0013, mpx_audio_modes[mode].acb); in mpx_setup()
215 mpx_audio_modes[mode].fm_prescale); in mpx_setup()
217 mpx_audio_modes[mode].nicam_prescale); in mpx_setup()
219 mpx_audio_modes[mode].scart_prescale); in mpx_setup()
220 mpx_write(client, 0x10, 0x0020, mpx_audio_modes[mode].system); in mpx_setup()
221 mpx_write(client, 0x12, 0x0000, mpx_audio_modes[mode].volume); in mpx_setup()
222 if (mpx_audio_modes[mode].audio_mode == AUD_A2) in mpx_setup()
224 t->audmode == V4L2_TUNER_MODE_MONO ? 0x07f0 : 0x0190); in mpx_setup()
233 mpx_audio_modes[mode].modus, in mpx_setup()
235 mpx_audio_modes[mode].acb, in mpx_setup()
236 mpx_audio_modes[mode].fm_prescale, in mpx_setup()
237 mpx_audio_modes[mode].nicam_prescale, in mpx_setup()
238 mpx_audio_modes[mode].scart_prescale, in mpx_setup()
239 mpx_audio_modes[mode].system, in mpx_setup()
240 mpx_audio_modes[mode].volume); in mpx_setup()
244 msgs[0].addr = client->addr; in mpx_setup()
248 msgs[1].addr = client->addr; in mpx_setup()
252 i2c_transfer(client->adapter, msgs, 2); in mpx_setup()
258 i2c_transfer(client->adapter, msgs, 2); in mpx_setup()
281 if (default_mpx_mode != t->mpxmode) { in sony_btf_mpx_s_std()
282 t->mpxmode = default_mpx_mode; in sony_btf_mpx_s_std()
292 vt->capability = V4L2_TUNER_CAP_NORM | in sony_btf_mpx_g_tuner()
295 vt->rxsubchans = V4L2_TUNER_SUB_MONO | in sony_btf_mpx_g_tuner()
298 vt->audmode = t->audmode; in sony_btf_mpx_g_tuner()
306 if (vt->type != V4L2_TUNER_ANALOG_TV) in sony_btf_mpx_s_tuner()
307 return -EINVAL; in sony_btf_mpx_s_tuner()
309 if (vt->audmode != t->audmode) { in sony_btf_mpx_s_tuner()
310 t->audmode = vt->audmode; in sony_btf_mpx_s_tuner()
316 /* --------------------------------------------------------------------------*/
332 /* --------------------------------------------------------------------------*/
339 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK)) in sony_btf_mpx_probe()
340 return -ENODEV; in sony_btf_mpx_probe()
343 client->addr << 1, client->adapter->name); in sony_btf_mpx_probe()
345 t = devm_kzalloc(&client->dev, sizeof(*t), GFP_KERNEL); in sony_btf_mpx_probe()
347 return -ENOMEM; in sony_btf_mpx_probe()
349 sd = &t->sd; in sony_btf_mpx_probe()
353 t->mpxmode = 0; in sony_btf_mpx_probe()
354 t->audmode = V4L2_TUNER_MODE_STEREO; in sony_btf_mpx_probe()
366 /* ----------------------------------------------------------------------- */
369 { "sony-btf-mpx" },
376 .name = "sony-btf-mpx",