Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9bb13a6d authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

V4L/DVB (3233): Fixed API to set I2S speed control




- Created a new ioctl to control I2S speed. Old calls to an
inadequate V4L2 API replaced.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@brturbo.com.br>
parent e1bc80ad
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include <media/tuner.h>
#include <media/audiochip.h>
#include <media/tveeprom.h>
#include <media/v4l2-common.h>
#include "msp3400.h"

#include "em28xx.h"
@@ -261,7 +262,6 @@ void em28xx_card_setup(struct em28xx *dev)
	/* request some modules */
	if (dev->model == EM2820_BOARD_HAUPPAUGE_WINTV_USB_2) {
		struct tveeprom tv;
		struct v4l2_audioout ao;
#ifdef CONFIG_MODULES
		request_module("tveeprom");
		request_module("ir-kbd-i2c");
@@ -274,12 +274,8 @@ void em28xx_card_setup(struct em28xx *dev)

		dev->tuner_type= tv.tuner_type;
		if (tv.audio_processor == AUDIO_CHIP_MSP34XX) {
			dev->i2s_speed=2048000;
			dev->has_msp34xx=1;
			memset (&ao,0,sizeof(ao));

			ao.index=2;
			ao.mode=V4L2_AUDMODE_32BITS;
			em28xx_i2c_call_clients(dev, VIDIOC_S_AUDOUT, &ao);
		} else
			dev->has_msp34xx=0;
	}
+2 −0
Original line number Diff line number Diff line
@@ -287,6 +287,8 @@ static void video_mux(struct em28xx *dev, int index)
	em28xx_videodbg("Setting input index=%d, vmux=%d, amux=%d\n",index,input,dev->ctl_ainput);

	if (dev->has_msp34xx) {
		if (dev->i2s_speed)
			em28xx_i2c_call_clients(dev, VIDIOC_INT_I2S_CLOCK_FREQ, &dev->i2s_speed);
		em28xx_i2c_call_clients(dev, VIDIOC_S_AUDIO, &dev->ctl_ainput);
		ainput = EM28XX_AUDIO_SRC_TUNER;
		em28xx_audio_source(dev, ainput);
+2 −0
Original line number Diff line number Diff line
@@ -216,6 +216,8 @@ struct em28xx {
	unsigned int has_msp34xx:1;
	unsigned int has_tda9887:1;

	u32 i2s_speed;		/* I2S speed for audio digital stream */

	enum em28xx_decoder decoder;

	int tuner_type;		/* type of the tuner */
+22 −8
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@

#include <linux/videodev.h>
#include <media/audiochip.h>
#include <media/v4l2-common.h>
#include "msp3400.h"

/* ---------------------------------------------------------------------- */
@@ -2104,23 +2105,36 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
		if (a->index<0||a->index>2)
			return -EINVAL;

		if (a->index==2) {
			if (a->mode == V4L2_AUDMODE_32BITS)
				msp->i2s_mode=1;
			else
				msp->i2s_mode=0;
		}
		msp3400_dbg("Setting audio out on msp34xx to input %i, mode %i\n",a->index,msp->i2s_mode);
		msp3400_dbg("Setting audio out on msp34xx to input %i\n",a->index);
		msp3400c_set_scart(client,msp->in_scart,a->index+1);

		break;
	}
	case VIDIOC_INT_I2S_CLOCK_FREQ:
	{
		u32 *a=(u32 *)arg;

		msp3400_dbg("Setting I2S speed to %d\n",*a);

		switch (*a) {
			case 1024000:
				msp->i2s_mode=0;
				break;
			case 2048000:
				msp->i2s_mode=1;
				break;
			default:
				return -EINVAL;
		}
		break;
	}

	case VIDIOC_QUERYCTRL:
	{
		struct v4l2_queryctrl *qc = arg;
		int i;

		msp3400_dbg("VIDIOC_QUERYCTRL");
		msp3400_dbg("VIDIOC_QUERYCTRL\n");

		for (i = 0; i < ARRAY_SIZE(msp34xx_qctrl); i++)
			if (qc->id && qc->id ==  msp34xx_qctrl[i].id) {
+0 −1
Original line number Diff line number Diff line
@@ -895,7 +895,6 @@ struct v4l2_audio

/*  Flags for the 'mode' field */
#define V4L2_AUDMODE_AVL		0x00001
#define V4L2_AUDMODE_32BITS		0x00002

struct v4l2_audioout
{
Loading