From: "Alfredo Jesús Delaiti" <alfredodelaiti@netscape.net>
To: "Nicolás Sugino" <nsugino@3way.com.ar>, linux-media@vger.kernel.org
Subject: Re: [PATCH] cx23885: Add radio support for MyGica x8507
Date: Sun, 20 Oct 2013 15:11:19 -0300 [thread overview]
Message-ID: <52641CC7.2000302@netscape.net> (raw)
In-Reply-To: <CAFjMtCmv+ZvbsuQkFMZz6kt5btZegSArZtWYFF5gKjn1xXPnJQ@mail.gmail.com>
Hi Nicolás
El 18/10/13 17:47, Nicolás Sugino escribió:
> From: Sugino Nicolas
> Date: Fri, 18 Oct 2013 17:37:00 -0300
> Subject: [PATCH] cx23885: Add radio support for MyGica x8507
>
> This patch allows radio capture for the cx23885 driver with the MyGica
> x8507 card
>
> diff -rcNP a/drivers/media/pci/cx23885/cx23885-cards.c
> b/drivers/media/pci/cx23885/cx23885-cards.c
> *** a/drivers/media/pci/cx23885/cx23885-cards.c 2013-10-18
> 17:17:43.257083061 -0300
> --- b/drivers/media/pci/cx23885/cx23885-cards.c 2013-10-18
> 16:10:04.124085546 -0300
> ***************
> *** 531,536 ****
> --- 541,548 ----
> .name = "Mygica X8502/X8507 ISDB-T",
> .tuner_type = TUNER_XC5000,
> .tuner_addr = 0x61,
> + .radio_type = TUNER_XC5000,
> + .radio_addr = 0x61,
> .tuner_bus = 1,
> .porta = CX23885_ANALOG_VIDEO,
> .portb = CX23885_MPEG_DVB,
> ***************
> *** 559,564 ****
> --- 571,580 ----
> CX25840_VIN7_CH3,
> .amux = CX25840_AUDIO7,
> },
> + {
> + .type = CX23885_RADIO,
> + .amux= CX25840_AUDIO8,
> + },
> },
> },
> [CX23885_BOARD_TERRATEC_CINERGY_T_PCIE_DUAL] = {
> diff -rcNP a/drivers/media/pci/cx23885/cx23885-dvb.c
> b/drivers/media/pci/cx23885/cx23885-dvb.c
> *** a/drivers/media/pci/cx23885/cx23885-dvb.c 2013-10-18
> 17:17:43.281083064 -0300
> --- b/drivers/media/pci/cx23885/cx23885-dvb.c 2013-10-18
> 16:01:10.171036171 -0300
> ***************
> *** 500,505 ****
> --- 505,511 ----
> static struct xc5000_config mygica_x8507_xc5000_config = {
> .i2c_address = 0x61,
> .if_khz = 4000,
> + .radio_input = XC5000_RADIO_FM1,
> };
>
> static struct stv090x_config prof_8000_stv090x_config = {
> diff -rcNP a/drivers/media/pci/cx23885/cx23885-video.c
> b/drivers/media/pci/cx23885/cx23885-video.c
> *** a/drivers/media/pci/cx23885/cx23885-video.c 2013-10-18
> 17:17:43.288083064 -0300
> --- b/drivers/media/pci/cx23885/cx23885-video.c 2013-10-18
> 17:01:53.787051023 -0300
> ***************
> *** 904,909 ****
> --- 904,916 ----
> sizeof(struct cx23885_buffer),
> fh, NULL);
>
> + if(dev->board == CX23885_BOARD_MYGICA_X8507) {
> + if (fh->radio) {
> + dprintk(1,"video_open: setting radio device\n");
> + call_all(dev, tuner, s_radio);
> + }
> + }
>
> dprintk(1, "post videobuf_queue_init()\n");
>
> ***************
> *** 1634,1639 ****
> --- 1641,1746 ----
> }
>
>
> + static int radio_querycap (struct file *file, void *priv,
> + struct v4l2_capability *cap)
> + {
> + struct cx23885_dev *dev = ((struct cx23885_fh *)priv)->dev;
> +
> + strcpy(cap->driver, "cx23885");
> + strlcpy(cap->card, cx23885_boards[dev->board].name, sizeof(cap->card));
> + sprintf(cap->bus_info,"PCIe:%s", pci_name(dev->pci));
> + cap->capabilities = V4L2_CAP_TUNER;
> + return 0;
> + }
> +
> + static int radio_g_tuner (struct file *file, void *priv,
> + struct v4l2_tuner *t)
> + {
> + struct cx23885_dev *dev = ((struct cx23885_fh *)priv)->dev;
> +
> + if (unlikely(t->index > 0))
> + return -EINVAL;
> +
> + strcpy(t->name, "Radio");
> + t->type = V4L2_TUNER_RADIO;
> +
> + call_all(dev, tuner, g_tuner, t);
> + return 0;
> + }
> +
> + static int radio_enum_input (struct file *file, void *priv,
> + struct v4l2_input *i)
> + {
> + if (i->index != 0)
> + return -EINVAL;
> + strcpy(i->name,"Radio");
> + i->type = V4L2_INPUT_TYPE_TUNER;
> +
> + return 0;
> + }
> +
> + static int radio_g_audio (struct file *file, void *priv, struct v4l2_audio *a)
> + {
> + if (unlikely(a->index))
> + return -EINVAL;
> +
> + strcpy(a->name,"Radio");
> + return 0;
> + }
> +
> + /* FIXME: Should add a standard for radio */
> + static int radio_s_tuner (struct file *file, void *priv,
> + struct v4l2_tuner *t)
> + {
> + struct cx23885_dev *dev = ((struct cx23885_fh *)priv)->dev;
> +
> + if (0 != t->index)
> + return -EINVAL;
> +
> + call_all(dev, tuner, s_tuner, t);
> +
> + return 0;
> + }
> +
> + static int radio_s_audio (struct file *file, void *fh,
> + struct v4l2_audio *a)
> + {
> + return 0;
> + }
> +
> + static int radio_s_input (struct file *file, void *fh, unsigned int i)
> + {
> + return 0;
> + }
> +
> + static int radio_queryctrl (struct file *file, void *priv,
> + struct v4l2_queryctrl *c)
> + {
> + int i;
> +
> + if (c->id < V4L2_CID_BASE ||
> + c->id >= V4L2_CID_LASTP1)
> + return -EINVAL;
> + if (c->id == V4L2_CID_AUDIO_MUTE ||
> + c->id == V4L2_CID_AUDIO_VOLUME ||
> + c->id == V4L2_CID_AUDIO_BALANCE) {
> + for (i = 0; i < CX23885_CTLS; i++) {
> + if (cx23885_ctls[i].v.id == c->id)
> + break;
> + }
> + if (i == CX23885_CTLS) {
> + *c = no_ctl;
> + return 0;
> + }
> + *c = cx23885_ctls[i].v;
> + } else
> + *c = no_ctl;
> + return 0;
> + }
> +
> + /* ----------------------------------------------------------- */
>
> static void cx23885_vid_timeout(unsigned long data)
> {
> ***************
> *** 1774,1779 ****
> --- 1881,1906 ----
> .tvnorms = CX23885_NORMS,
> };
>
> + static const struct v4l2_ioctl_ops radio_ioctl_ops = {
> + .vidioc_querycap = radio_querycap,
> + .vidioc_g_tuner = radio_g_tuner,
> + .vidioc_enum_input = radio_enum_input,
> + .vidioc_g_audio = radio_g_audio,
> + .vidioc_s_tuner = radio_s_tuner,
> + .vidioc_s_audio = radio_s_audio,
> + .vidioc_s_input = radio_s_input,
> + .vidioc_queryctrl = radio_queryctrl,
> + .vidioc_g_ctrl = vidioc_g_ctrl,
> + .vidioc_s_ctrl = vidioc_s_ctrl,
> + .vidioc_g_frequency = vidioc_g_frequency,
> + .vidioc_s_frequency = vidioc_s_frequency,
> + #ifdef CONFIG_VIDEO_ADV_DEBUG
> + .vidioc_g_register = cx23885_g_register,
> + .vidioc_s_register = cx23885_s_register,
> + #endif
> + };
> +
> static const struct v4l2_file_operations radio_fops = {
> .owner = THIS_MODULE,
> .open = video_open,
> ***************
> *** 1781,1792 ****
> --- 1908,1932 ----
> .ioctl = video_ioctl2,
> };
>
> + static struct video_device cx23885_radio_template = {
> + .name = "cx23885-radio",
> + .fops = &radio_fops,
> + .ioctl_ops = &radio_ioctl_ops,
> + };
> +
>
> void cx23885_video_unregister(struct cx23885_dev *dev)
> {
> dprintk(1, "%s()\n", __func__);
> cx23885_irq_remove(dev, 0x01);
>
> + if (dev->radio_dev) {
> + if (video_is_registered(dev->radio_dev))
> + video_unregister_device(dev->radio_dev);
> + else
> + video_device_release(dev->radio_dev);
> + dev->radio_dev = NULL;
> + }
> if (dev->vbi_dev) {
> if (video_is_registered(dev->vbi_dev))
> video_unregister_device(dev->vbi_dev);
> ***************
> *** 1858,1864 ****
> struct tuner_setup tun_setup;
>
> memset(&tun_setup, 0, sizeof(tun_setup));
> ! tun_setup.mode_mask = T_ANALOG_TV;
> tun_setup.type = dev->tuner_type;
> tun_setup.addr = v4l2_i2c_subdev_addr(sd);
> tun_setup.tuner_callback = cx23885_tuner_callback;
> --- 1998,2004 ----
> struct tuner_setup tun_setup;
>
> memset(&tun_setup, 0, sizeof(tun_setup));
> ! tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
> tun_setup.type = dev->tuner_type;
> tun_setup.addr = v4l2_i2c_subdev_addr(sd);
> tun_setup.tuner_callback = cx23885_tuner_callback;
> ***************
> *** 1917,1922 ****
> --- 2057,2075 ----
> printk(KERN_INFO "%s: registered device %s\n",
> dev->name, video_device_node_name(dev->vbi_dev));
>
> + dev->radio_dev = cx23885_vdev_init(dev, dev->pci,
> + &cx23885_radio_template, "radio");
> + err = video_register_device(dev->radio_dev, VFL_TYPE_RADIO,
> + radio_nr[dev->nr]);
> + if (err < 0) {
> + printk(KERN_INFO "%s: can't register radio device\n",
> + dev->name);
> + goto fail_unreg;
> + }
> + printk(KERN_INFO "%s: registered device %s\n",
> + dev->name, video_device_node_name(dev->radio_dev));
> +
> +
> /* Register ALSA audio device */
> dev->audio_dev = cx23885_audio_register(dev);
>
>
> Regards,
>
> Nicolas
>
The patch has sent broken spaces, so that it becomes difficult to
understand.
For the lines that I have seen, these lines of code are the same as
Miroslav Slugen wrote in "CX23885: Add basic support analog Radio" and
the answer that I've done (https://linuxtv.org/patch/20329 /).
What are the differences between the patches sent by Miroslav Slugen and
me? Does it solve the problems I have raised for this board in particular?
Regards
Alfredo
next prev parent reply other threads:[~2013-10-20 18:11 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-18 20:47 [PATCH] cx23885: Add radio support for MyGica x8507 Nicolás Sugino
2013-10-20 18:11 ` Alfredo Jesús Delaiti [this message]
2013-10-21 0:49 ` Nicolas Sugino
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52641CC7.2000302@netscape.net \
--to=alfredodelaiti@netscape.net \
--cc=linux-media@vger.kernel.org \
--cc=nsugino@3way.com.ar \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.