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

Commit 00f76410 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull media fixes from Mauro Carvalho Chehab:

 - a regression fix at the videobuf2 core driver

 - fix error handling at mantis probing code

 - revert the IR encode patches, as the API is not mature enough.
   So, better to postpone the changes to a latter Kernel

 - fix Kconfig breakages on some randconfig scenarios.

* tag 'media/v4.2-3' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
  [media] mantis: Fix error handling in mantis_dma_init()
  Revert "[media] rc: rc-ir-raw: Add scancode encoder callback"
  Revert "[media] rc: rc-ir-raw: Add Manchester encoder (phase encoder) helper"
  Revert "[media] rc: ir-rc5-decoder: Add encode capability"
  Revert "[media] rc: ir-rc6-decoder: Add encode capability"
  Revert "[media] rc: rc-core: Add support for encode_wakeup drivers"
  Revert "[media] rc: rc-loopback: Add loopback of filter scancodes"
  Revert "[media] rc: nuvoton-cir: Add support for writing wakeup samples via sysfs filter callback"
  [media] vb2: Fix compilation breakage when !CONFIG_BUG
  [media] vb2: Only requeue buffers immediately once streaming is started
  [media] media/pci/cobalt: fix Kconfig and build when SND is not enabled
  [media] media/dvb: fix ts2020.c Kconfig and build
parents 7e08117d 02387b5f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -240,7 +240,7 @@ config DVB_SI21XX

config DVB_TS2020
	tristate "Montage Tehnology TS2020 based tuners"
	depends on DVB_CORE
	depends on DVB_CORE && I2C
	select REGMAP_I2C
	default m if !MEDIA_SUBDRV_AUTOSELECT
	help
+1 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ config VIDEO_COBALT
	tristate "Cisco Cobalt support"
	depends on VIDEO_V4L2 && I2C && MEDIA_CONTROLLER
	depends on PCI_MSI && MTD_COMPLEX_MAPPINGS && GPIOLIB
	depends on SND
	select I2C_ALGOBIT
	select VIDEO_ADV7604
	select VIDEO_ADV7511
+1 −1
Original line number Diff line number Diff line
@@ -139,7 +139,7 @@ static void cobalt_dma_stream_queue_handler(struct cobalt_stream *s)
	   also know about dropped frames. */
	cb->vb.v4l2_buf.sequence = s->sequence++;
	vb2_buffer_done(&cb->vb, (skip || s->unstable_frame) ?
			VB2_BUF_STATE_QUEUED : VB2_BUF_STATE_DONE);
			VB2_BUF_STATE_REQUEUEING : VB2_BUF_STATE_DONE);
}

irqreturn_t cobalt_irq_handler(int irq, void *dev_id)
+3 −2
Original line number Diff line number Diff line
@@ -130,10 +130,11 @@ static inline int mantis_alloc_buffers(struct mantis_pci *mantis)

int mantis_dma_init(struct mantis_pci *mantis)
{
	int err = 0;
	int err;

	dprintk(MANTIS_DEBUG, 1, "Mantis DMA init");
	if (mantis_alloc_buffers(mantis) < 0) {
	err = mantis_alloc_buffers(mantis);
	if (err < 0) {
		dprintk(MANTIS_ERROR, 1, "Error allocating DMA buffer");

		/* Stop RISC Engine */
+0 −116
Original line number Diff line number Diff line
@@ -184,125 +184,9 @@ static int ir_rc5_decode(struct rc_dev *dev, struct ir_raw_event ev)
	return -EINVAL;
}

static struct ir_raw_timings_manchester ir_rc5_timings = {
	.leader			= RC5_UNIT,
	.pulse_space_start	= 0,
	.clock			= RC5_UNIT,
	.trailer_space		= RC5_UNIT * 10,
};

static struct ir_raw_timings_manchester ir_rc5x_timings[2] = {
	{
		.leader			= RC5_UNIT,
		.pulse_space_start	= 0,
		.clock			= RC5_UNIT,
		.trailer_space		= RC5X_SPACE,
	},
	{
		.clock			= RC5_UNIT,
		.trailer_space		= RC5_UNIT * 10,
	},
};

static struct ir_raw_timings_manchester ir_rc5_sz_timings = {
	.leader				= RC5_UNIT,
	.pulse_space_start		= 0,
	.clock				= RC5_UNIT,
	.trailer_space			= RC5_UNIT * 10,
};

static int ir_rc5_validate_filter(const struct rc_scancode_filter *scancode,
				  unsigned int important_bits)
{
	/* all important bits of scancode should be set in mask */
	if (~scancode->mask & important_bits)
		return -EINVAL;
	/* extra bits in mask should be zero in data */
	if (scancode->mask & scancode->data & ~important_bits)
		return -EINVAL;
	return 0;
}

/**
 * ir_rc5_encode() - Encode a scancode as a stream of raw events
 *
 * @protocols:	allowed protocols
 * @scancode:	scancode filter describing scancode (helps distinguish between
 *		protocol subtypes when scancode is ambiguous)
 * @events:	array of raw ir events to write into
 * @max:	maximum size of @events
 *
 * Returns:	The number of events written.
 *		-ENOBUFS if there isn't enough space in the array to fit the
 *		encoding. In this case all @max events will have been written.
 *		-EINVAL if the scancode is ambiguous or invalid.
 */
static int ir_rc5_encode(u64 protocols,
			 const struct rc_scancode_filter *scancode,
			 struct ir_raw_event *events, unsigned int max)
{
	int ret;
	struct ir_raw_event *e = events;
	unsigned int data, xdata, command, commandx, system;

	/* Detect protocol and convert scancode to raw data */
	if (protocols & RC_BIT_RC5 &&
	    !ir_rc5_validate_filter(scancode, 0x1f7f)) {
		/* decode scancode */
		command  = (scancode->data & 0x003f) >> 0;
		commandx = (scancode->data & 0x0040) >> 6;
		system   = (scancode->data & 0x1f00) >> 8;
		/* encode data */
		data = !commandx << 12 | system << 6 | command;

		/* Modulate the data */
		ret = ir_raw_gen_manchester(&e, max, &ir_rc5_timings, RC5_NBITS,
					    data);
		if (ret < 0)
			return ret;
	} else if (protocols & RC_BIT_RC5X &&
		   !ir_rc5_validate_filter(scancode, 0x1f7f3f)) {
		/* decode scancode */
		xdata    = (scancode->data & 0x00003f) >> 0;
		command  = (scancode->data & 0x003f00) >> 8;
		commandx = (scancode->data & 0x004000) >> 14;
		system   = (scancode->data & 0x1f0000) >> 16;
		/* commandx and system overlap, bits must match when encoded */
		if (commandx == (system & 0x1))
			return -EINVAL;
		/* encode data */
		data = 1 << 18 | system << 12 | command << 6 | xdata;

		/* Modulate the data */
		ret = ir_raw_gen_manchester(&e, max, &ir_rc5x_timings[0],
					CHECK_RC5X_NBITS,
					data >> (RC5X_NBITS-CHECK_RC5X_NBITS));
		if (ret < 0)
			return ret;
		ret = ir_raw_gen_manchester(&e, max - (e - events),
					&ir_rc5x_timings[1],
					RC5X_NBITS - CHECK_RC5X_NBITS,
					data);
		if (ret < 0)
			return ret;
	} else if (protocols & RC_BIT_RC5_SZ &&
		   !ir_rc5_validate_filter(scancode, 0x2fff)) {
		/* RC5-SZ scancode is raw enough for Manchester as it is */
		ret = ir_raw_gen_manchester(&e, max, &ir_rc5_sz_timings,
					RC5_SZ_NBITS, scancode->data & 0x2fff);
		if (ret < 0)
			return ret;
	} else {
		return -EINVAL;
	}

	return e - events;
}

static struct ir_raw_handler rc5_handler = {
	.protocols	= RC_BIT_RC5 | RC_BIT_RC5X | RC_BIT_RC5_SZ,
	.decode		= ir_rc5_decode,
	.encode		= ir_rc5_encode,
};

static int __init ir_rc5_decode_init(void)
Loading