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

Commit b57e5578 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

Fixes some sync issues between V4L/DVB development and GIT



Some changes didn't went ok to -git, probably due to changes at merging
patches.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 45f87a21
Loading
Loading
Loading
Loading
+7 −198
Original line number Original line Diff line number Diff line
@@ -308,100 +308,6 @@ static int ca_get_slot_info(struct dst_state *state, struct ca_slot_info *p_ca_s
	return 0;
	return 0;
}
}


/*	MMI	*/
static int ca_get_mmi(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *mmi_msg)
{
	static u8 get_mmi[] = { 0x07, 0x40, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0f };

	put_checksum(&get_mmi[0], 7);
	if ((dst_put_ci(state, get_mmi, sizeof (get_mmi), hw_msg->msg, GET_REPLY)) < 0) {
		dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
	memcpy(mmi_msg->msg, hw_msg->msg, hw_msg->msg[4]);

	return 0;
}

/**
 *	Get Menu should be the first MMI function (like open !)
 */
static int ca_get_menu(struct dst_state *state)
{
	static u8 get_menu[] = { 0x07, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0xff };

	put_checksum(&get_menu[0], 7);
	if ((dst_put_ci(state, get_menu, sizeof (get_menu), get_menu, NO_REPLY)) < 0) {
		dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");

	return 0;
}

/**
 *	MMI Enq	(Enquire the application to allow user input)
 */
static int ca_answer_menu(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *menu_answ)
{
	u8 choice = 0;

	static u8 answer_menu[] = { 0x08, 0x40, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x01, 0xff };

	/*	derive answer from menu (This comes from the user)	*/
	answer_menu[7] = choice;
	put_checksum(&answer_menu[0], 7);
	if ((dst_put_ci(state, answer_menu, sizeof (answer_menu), hw_msg->msg, NO_REPLY)) < 0) {
		dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");

	return 0;
}

static int ca_answer_mmi(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *answ_msg)
{
	u8 answer =0, length = 0;

	static u8 answer_mmi[] = { 0x08, 0x40, 0x00, 0x00, 0x08, 0x01, 0x00, 0x01, 0xff };

	/*	derive answer from answ_msg (This comes from the user)	*/
	if (answer == 0)	/*	0x00 == Cancel	*/
		answer_mmi[7] = 0x00;
	else {			/*	0x01 == Answer	*/
		length = strlen(answ_msg->msg);
		memcpy(&answer_mmi[8], answ_msg->msg, length);
		answer_mmi[0] += length;
		answer_mmi[5] += length;
	}
	put_checksum(&answer_mmi[0], (8 + length));
	if ((dst_put_ci(state, answer_mmi, sizeof (answer_mmi), hw_msg->msg, GET_REPLY)) < 0) {
		dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci FAILED !");

		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");

	return 0;
}

static int ca_close_mmi(struct dst_state *state, struct ca_msg *hw_msg)
{
	static u8 close_mmi[] = { 0x07, 0x40, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xff };

	put_checksum(&close_mmi[0], 7);
	if ((dst_put_ci(state, close_mmi, sizeof (close_mmi), hw_msg->msg, NO_REPLY)) < 0) {
		dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");

		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");

	return 0;
}


static int ca_get_message(struct dst_state *state, struct ca_msg *p_ca_message, void __user *arg)
static int ca_get_message(struct dst_state *state, struct ca_msg *p_ca_message, void __user *arg)
{
{
@@ -512,100 +418,6 @@ static int debug_string(u8 *msg, u32 length, u32 offset)
	return 0;
	return 0;
}
}


/*	MMI	*/
static int ca_get_mmi(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *mmi_msg)
{
	static u8 get_mmi[] = { 0x07, 0x40, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x0f };

	put_checksum(&get_mmi[0], 7);
	if ((dst_put_ci(state, get_mmi, sizeof (get_mmi), hw_msg->msg, GET_REPLY)) < 0) {
		dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");
	memcpy(mmi_msg->msg, hw_msg->msg, hw_msg->msg[4]);

	return 0;
}

/**
 *	Get Menu should be the first MMI function (like open !)
 */
static int ca_get_menu(struct dst_state *state)
{
	static u8 get_menu[] = { 0x07, 0x40, 0x00, 0x00, 0x09, 0x00, 0x00, 0xff };

	put_checksum(&get_menu[0], 7);
	if ((dst_put_ci(state, get_menu, sizeof (get_menu), get_menu, NO_REPLY)) < 0) {
		dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");

	return 0;
}

/**
 *	MMI Enq	(Enquire the application to allow user input)
 */
static int ca_answer_menu(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *menu_answ)
{
	u8 choice = 0;

	static u8 answer_menu[] = { 0x08, 0x40, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x01, 0xff };

	/*	derive answer from menu (This comes from the user)	*/
	answer_menu[7] = choice;
	put_checksum(&answer_menu[0], 7);
	if ((dst_put_ci(state, answer_menu, sizeof (answer_menu), hw_msg->msg, NO_REPLY)) < 0) {
		dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");
		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");

	return 0;
}

static int ca_answer_mmi(struct dst_state *state, struct ca_msg *hw_msg, struct ca_msg *answ_msg)
{
	u8 answer =0, length = 0;

	static u8 answer_mmi[] = { 0x08, 0x40, 0x00, 0x00, 0x08, 0x01, 0x00, 0x01, 0xff };

	/*	derive answer from answ_msg (This comes from the user)	*/
	if (answer == 0)	/*	0x00 == Cancel	*/
		answer_mmi[7] = 0x00;
	else {			/*	0x01 == Answer	*/
		length = strlen(answ_msg->msg);
		memcpy(&answer_mmi[8], answ_msg->msg, length);
		answer_mmi[0] += length;
		answer_mmi[5] += length;
	}
	put_checksum(&answer_mmi[0], (8 + length));
	if ((dst_put_ci(state, answer_mmi, sizeof (answer_mmi), hw_msg->msg, GET_REPLY)) < 0) {
		dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci FAILED !");

		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");

	return 0;
}

static int ca_close_mmi(struct dst_state *state, struct ca_msg *hw_msg)
{
	static u8 close_mmi[] = { 0x07, 0x40, 0x00, 0x00, 0x0e, 0x00, 0x00, 0xff };

	put_checksum(&close_mmi[0], 7);
	if ((dst_put_ci(state, close_mmi, sizeof (close_mmi), hw_msg->msg, NO_REPLY)) < 0) {
		dprintk(verbose, DST_CA_ERROR, 1, " -->dst_put_ci FAILED !");

		return -1;
	}
	dprintk(verbose, DST_CA_NOTICE, 1, " -->dst_put_ci SUCCESS !");

	return 0;
}


static int ca_set_pmt(struct dst_state *state, struct ca_msg *p_ca_message, struct ca_msg *hw_buffer, u8 reply, u8 query)
static int ca_set_pmt(struct dst_state *state, struct ca_msg *p_ca_message, struct ca_msg *hw_buffer, u8 reply, u8 query)
{
{
@@ -750,18 +562,15 @@ static int dst_ca_ioctl(struct inode *inode, struct file *file, unsigned int cmd
	void __user *arg = (void __user *)ioctl_arg;
	void __user *arg = (void __user *)ioctl_arg;
	int result = 0;
	int result = 0;


	if ((p_ca_message = (struct ca_msg *) kmalloc(sizeof (struct ca_msg), GFP_KERNEL)) == NULL) {
	p_ca_message = kmalloc(sizeof (struct ca_msg), GFP_KERNEL);
		dprintk(verbose, DST_CA_ERROR, 1, " Memory allocation failure");
	p_ca_slot_info = kmalloc(sizeof (struct ca_slot_info), GFP_KERNEL);
		return -ENOMEM;
	p_ca_caps = kmalloc(sizeof (struct ca_caps), GFP_KERNEL);
	}
	if (!p_ca_message || !p_ca_slot_info || !p_ca_caps) {
	if ((p_ca_slot_info = (struct ca_slot_info *) kmalloc(sizeof (struct ca_slot_info), GFP_KERNEL)) == NULL) {
		dprintk(verbose, DST_CA_ERROR, 1, " Memory allocation failure");
		return -ENOMEM;
	}
	if ((p_ca_caps = (struct ca_caps *) kmalloc(sizeof (struct ca_caps), GFP_KERNEL)) == NULL) {
		dprintk(verbose, DST_CA_ERROR, 1, " Memory allocation failure");
		dprintk(verbose, DST_CA_ERROR, 1, " Memory allocation failure");
		return -ENOMEM;
		result = -ENOMEM;
		goto free_mem_and_exit;
	}
	}

	/*	We have now only the standard ioctl's, the driver is upposed to handle internals.	*/
	/*	We have now only the standard ioctl's, the driver is upposed to handle internals.	*/
	switch (cmd) {
	switch (cmd) {
	case CA_SEND_MSG:
	case CA_SEND_MSG:
+24 −12
Original line number Original line Diff line number Diff line
@@ -261,45 +261,57 @@ static int saa6752hs_chip_command(struct i2c_client* client,




static int saa6752hs_set_bitrate(struct i2c_client* client,
static int saa6752hs_set_bitrate(struct i2c_client* client,
				 struct v4l2_mpeg_compression* params)
				 struct saa6752hs_mpeg_params* params)
{
{
	u8 buf[3];
	u8 buf[3];
	int tot_bitrate;


	/* set the bitrate mode */
	/* set the bitrate mode */
	buf[0] = 0x71;
	buf[0] = 0x71;
	buf[1] = (params->vi_bitrate.mode == V4L2_BITRATE_VBR) ? 0 : 1;
	buf[1] = (params->vi_bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) ? 0 : 1;
	i2c_master_send(client, buf, 2);
	i2c_master_send(client, buf, 2);


	/* set the video bitrate */
	/* set the video bitrate */
	if (params->vi_bitrate.mode == V4L2_BITRATE_VBR) {
	if (params->vi_bitrate_mode == V4L2_MPEG_VIDEO_BITRATE_MODE_VBR) {
		/* set the target bitrate */
		/* set the target bitrate */
		buf[0] = 0x80;
		buf[0] = 0x80;
		buf[1] = params->vi_bitrate.target >> 8;
		buf[1] = params->vi_bitrate >> 8;
		buf[2] = params->vi_bitrate.target & 0xff;
		buf[2] = params->vi_bitrate & 0xff;
		i2c_master_send(client, buf, 3);
		i2c_master_send(client, buf, 3);


		/* set the max bitrate */
		/* set the max bitrate */
		buf[0] = 0x81;
		buf[0] = 0x81;
		buf[1] = params->vi_bitrate.max >> 8;
		buf[1] = params->vi_bitrate_peak >> 8;
		buf[2] = params->vi_bitrate.max & 0xff;
		buf[2] = params->vi_bitrate_peak & 0xff;
		i2c_master_send(client, buf, 3);
		i2c_master_send(client, buf, 3);
		tot_bitrate = params->vi_bitrate_peak;
	} else {
	} else {
		/* set the target bitrate (no max bitrate for CBR) */
		/* set the target bitrate (no max bitrate for CBR) */
		buf[0] = 0x81;
		buf[0] = 0x81;
		buf[1] = params->vi_bitrate.target >> 8;
		buf[1] = params->vi_bitrate >> 8;
		buf[2] = params->vi_bitrate.target & 0xff;
		buf[2] = params->vi_bitrate & 0xff;
		i2c_master_send(client, buf, 3);
		i2c_master_send(client, buf, 3);
		tot_bitrate = params->vi_bitrate;
	}
	}


	/* set the audio bitrate */
	/* set the audio bitrate */
	buf[0] = 0x94;
	buf[0] = 0x94;
	buf[1] = (256 == params->au_bitrate.target) ? 0 : 1;
	buf[1] = (V4L2_MPEG_AUDIO_L2_BITRATE_256K == params->au_l2_bitrate) ? 0 : 1;
	i2c_master_send(client, buf, 2);
	i2c_master_send(client, buf, 2);
	tot_bitrate += (V4L2_MPEG_AUDIO_L2_BITRATE_256K == params->au_l2_bitrate) ? 256 : 384;

	/* Note: the total max bitrate is determined by adding the video and audio
	   bitrates together and also adding an extra 768kbit/s to stay on the
	   safe side. If more control should be required, then an extra MPEG control
	   should be added. */
	tot_bitrate += 768;
	if (tot_bitrate > MPEG_TOTAL_TARGET_BITRATE_MAX)
		tot_bitrate = MPEG_TOTAL_TARGET_BITRATE_MAX;


	/* set the total bitrate */
	/* set the total bitrate */
	buf[0] = 0xb1;
	buf[0] = 0xb1;
	buf[1] = params->st_bitrate.target >> 8;
	buf[1] = tot_bitrate >> 8;
	buf[2] = params->st_bitrate.target & 0xff;
	buf[2] = tot_bitrate & 0xff;
	i2c_master_send(client, buf, 3);
	i2c_master_send(client, buf, 3);


	return 0;
	return 0;