Lines Matching +full:gemini +full:- +full:gpio
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 hexium_gemini.c - v4l2 driver for Hexium Gemini frame grabber cards
16 #include <media/drv-intf/saa7146_vv.h>
103 { 0x01, 0x52 }, { 0x12, 0x64 }, { 0x2D, 0x2C }, { 0x2E, 0x9B }, { -1 , 0xFF }
107 { 0x01, 0x53 }, { 0x12, 0x04 }, { 0x2D, 0x23 }, { 0x2E, 0x81 }, { -1 , 0xFF }
111 { 0x01, 0x52 }, { 0x12, 0x64 }, { 0x2D, 0x2C }, { 0x2E, 0x9B }, { -1 , 0xFF }
126 /* fixme: h_offset = 0 for Hexium Gemini *Dual*, which
153 struct hexium *hexium = (struct hexium *) dev->ext_priv; in hexium_init_done()
162 …if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x6c, 0, I2C_SMBUS_WRITE, i, I2C_SMBUS_BYTE_DATA, &d… in hexium_init_done()
178 …if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x6c, 0, I2C_SMBUS_WRITE, hexium_input_select[input]… in hexium_set_input()
179 return -1; in hexium_set_input()
192 while (vdec[i].adr != -1) { in hexium_set_standard()
194 …if (0 != i2c_smbus_xfer(&hexium->i2c_adapter, 0x6c, 0, I2C_SMBUS_WRITE, vdec[i].adr, I2C_SMBUS_BYT… in hexium_set_standard()
197 return -1; in hexium_set_standard()
206 DEB_EE("VIDIOC_ENUMINPUT %d\n", i->index); in vidioc_enum_input()
208 if (i->index >= HEXIUM_INPUTS) in vidioc_enum_input()
209 return -EINVAL; in vidioc_enum_input()
211 memcpy(i, &hexium_inputs[i->index], sizeof(struct v4l2_input)); in vidioc_enum_input()
213 DEB_D("v4l2_ioctl: VIDIOC_ENUMINPUT %d\n", i->index); in vidioc_enum_input()
220 struct hexium *hexium = (struct hexium *) dev->ext_priv; in vidioc_g_input()
222 *input = hexium->cur_input; in vidioc_g_input()
231 struct hexium *hexium = (struct hexium *) dev->ext_priv; in vidioc_s_input()
236 return -EINVAL; in vidioc_s_input()
238 hexium->cur_input = input; in vidioc_s_input()
255 return -ENOMEM; in hexium_attach()
257 dev->ext_priv = hexium; in hexium_attach()
259 /* enable i2c-port pins */ in hexium_attach()
262 strscpy(hexium->i2c_adapter.name, "hexium gemini", in hexium_attach()
263 sizeof(hexium->i2c_adapter.name)); in hexium_attach()
264 saa7146_i2c_adapter_prepare(dev, &hexium->i2c_adapter, SAA7146_I2C_BUS_BIT_RATE_480); in hexium_attach()
265 if (i2c_add_adapter(&hexium->i2c_adapter) < 0) { in hexium_attach()
266 DEB_S("cannot register i2c-device. skipping.\n"); in hexium_attach()
268 return -EFAULT; in hexium_attach()
271 /* set HWControl GPIO number 2 */ in hexium_attach()
279 hexium->cur_input = 0; in hexium_attach()
283 hexium->cur_std = V4L2_STD_PAL; in hexium_attach()
286 hexium->cur_input = 0; in hexium_attach()
290 i2c_del_adapter(&hexium->i2c_adapter); in hexium_attach()
298 ret = saa7146_register_device(&hexium->video_dev, dev, "hexium gemini", VFL_TYPE_VIDEO); in hexium_attach()
302 i2c_del_adapter(&hexium->i2c_adapter); in hexium_attach()
307 pr_info("found 'hexium gemini' frame grabber-%d\n", hexium_num); in hexium_attach()
315 struct hexium *hexium = (struct hexium *) dev->ext_priv; in hexium_detach()
319 saa7146_unregister_device(&hexium->video_dev, dev); in hexium_detach()
322 hexium_num--; in hexium_detach()
324 i2c_del_adapter(&hexium->i2c_adapter); in hexium_detach()
331 struct hexium *hexium = (struct hexium *) dev->ext_priv; in std_callback()
333 if (V4L2_STD_PAL == std->id) { in std_callback()
335 hexium->cur_std = V4L2_STD_PAL; in std_callback()
337 } else if (V4L2_STD_NTSC == std->id) { in std_callback()
339 hexium->cur_std = V4L2_STD_NTSC; in std_callback()
341 } else if (V4L2_STD_SECAM == std->id) { in std_callback()
343 hexium->cur_std = V4L2_STD_SECAM; in std_callback()
347 return -1; in std_callback()
353 .ext_priv = "Hexium Gemini (4 BNC)",
358 .ext_priv = "Hexium Gemini Dual (4 BNC)",
393 .name = "hexium gemini",
410 return -ENODEV; in hexium_init_module()
424 MODULE_DESCRIPTION("video4linux-2 driver for Hexium Gemini frame grabber cards");