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

Commit 7b61ba8f authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] cx88: make checkpatch happier



This driver is old, and have lots of checkpatch violations.
As we're touching a lot on this driver due to the printk
conversions, let's run checkpatch --fix on it, in order to
solve some of those issues.

Also, do a few manual adjustments:
- remove the FSF address and use the usual coding style
  for the initial comments;
- use WARN_ON() instead of BUG_ON();
- remove an unused typedef;
- break a few long lines.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 65bc2fe8
Loading
Loading
Loading
Loading
+39 −40
Original line number Original line Diff line number Diff line
/*
/*
 *
 *  Support for audio capture
 *  Support for audio capture
 *  PCI function #1 of the cx2388x.
 *  PCI function #1 of the cx2388x.
 *
 *
@@ -18,10 +17,6 @@
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 */


#include "cx88.h"
#include "cx88.h"
@@ -178,6 +173,7 @@ static int _cx88_start_audio_dma(snd_cx88_card_t *chip)
static int _cx88_stop_audio_dma(snd_cx88_card_t *chip)
static int _cx88_stop_audio_dma(snd_cx88_card_t *chip)
{
{
	struct cx88_core *core = chip->core;
	struct cx88_core *core = chip->core;

	dprintk(1, "Stopping audio DMA\n");
	dprintk(1, "Stopping audio DMA\n");


	/* stop dma */
	/* stop dma */
@@ -261,7 +257,7 @@ static irqreturn_t cx8801_irq(int irq, void *dev_id)
	for (loop = 0; loop < MAX_IRQ_LOOP; loop++) {
	for (loop = 0; loop < MAX_IRQ_LOOP; loop++) {
		status = cx_read(MO_PCI_INTSTAT) &
		status = cx_read(MO_PCI_INTSTAT) &
			(core->pci_irqmask | PCI_INT_AUDINT);
			(core->pci_irqmask | PCI_INT_AUDINT);
		if (0 == status)
		if (status == 0)
			goto out;
			goto out;
		dprintk(3, "cx8801_irq loop %d/%d, status %x\n",
		dprintk(3, "cx8801_irq loop %d/%d, status %x\n",
			loop, MAX_IRQ_LOOP, status);
			loop, MAX_IRQ_LOOP, status);
@@ -274,7 +270,7 @@ static irqreturn_t cx8801_irq(int irq, void *dev_id)
			cx8801_aud_irq(chip);
			cx8801_aud_irq(chip);
	}
	}


	if (MAX_IRQ_LOOP == loop) {
	if (loop == MAX_IRQ_LOOP) {
		pr_err("IRQ loop detected, disabling interrupts\n");
		pr_err("IRQ loop detected, disabling interrupts\n");
		cx_clear(MO_PCI_INTMSK, PCI_INT_AUDINT);
		cx_clear(MO_PCI_INTMSK, PCI_INT_AUDINT);
	}
	}
@@ -290,7 +286,7 @@ static int cx88_alsa_dma_init(struct cx88_audio_dev *chip, int nr_pages)
	int i;
	int i;


	buf->vaddr = vmalloc_32(nr_pages << PAGE_SHIFT);
	buf->vaddr = vmalloc_32(nr_pages << PAGE_SHIFT);
	if (NULL == buf->vaddr) {
	if (buf->vaddr == NULL) {
		dprintk(1, "vmalloc_32(%d pages) failed\n", nr_pages);
		dprintk(1, "vmalloc_32(%d pages) failed\n", nr_pages);
		return -ENOMEM;
		return -ENOMEM;
	}
	}
@@ -303,13 +299,13 @@ static int cx88_alsa_dma_init(struct cx88_audio_dev *chip, int nr_pages)
	buf->nr_pages = nr_pages;
	buf->nr_pages = nr_pages;


	buf->sglist = vzalloc(buf->nr_pages * sizeof(*buf->sglist));
	buf->sglist = vzalloc(buf->nr_pages * sizeof(*buf->sglist));
	if (NULL == buf->sglist)
	if (buf->sglist == NULL)
		goto vzalloc_err;
		goto vzalloc_err;


	sg_init_table(buf->sglist, buf->nr_pages);
	sg_init_table(buf->sglist, buf->nr_pages);
	for (i = 0; i < buf->nr_pages; i++) {
	for (i = 0; i < buf->nr_pages; i++) {
		pg = vmalloc_to_page(buf->vaddr + i * PAGE_SIZE);
		pg = vmalloc_to_page(buf->vaddr + i * PAGE_SIZE);
		if (NULL == pg)
		if (pg == NULL)
			goto vmalloc_to_page_err;
			goto vmalloc_to_page_err;
		sg_set_page(&buf->sglist[i], pg, PAGE_SIZE, 0);
		sg_set_page(&buf->sglist[i], pg, PAGE_SIZE, 0);
	}
	}
@@ -331,7 +327,7 @@ static int cx88_alsa_dma_map(struct cx88_audio_dev *dev)
	buf->sglen = dma_map_sg(&dev->pci->dev, buf->sglist,
	buf->sglen = dma_map_sg(&dev->pci->dev, buf->sglist,
			buf->nr_pages, PCI_DMA_FROMDEVICE);
			buf->nr_pages, PCI_DMA_FROMDEVICE);


	if (0 == buf->sglen) {
	if (buf->sglen == 0) {
		pr_warn("%s: cx88_alsa_map_sg failed\n", __func__);
		pr_warn("%s: cx88_alsa_map_sg failed\n", __func__);
		return -ENOMEM;
		return -ENOMEM;
	}
	}
@@ -431,6 +427,7 @@ static int snd_cx88_pcm_open(struct snd_pcm_substream *substream)


	if (cx88_sram_channels[SRAM_CH25].fifo_size != DEFAULT_FIFO_SIZE) {
	if (cx88_sram_channels[SRAM_CH25].fifo_size != DEFAULT_FIFO_SIZE) {
		unsigned int bpl = cx88_sram_channels[SRAM_CH25].fifo_size / 4;
		unsigned int bpl = cx88_sram_channels[SRAM_CH25].fifo_size / 4;

		bpl &= ~7; /* must be multiple of 8 */
		bpl &= ~7; /* must be multiple of 8 */
		runtime->hw.period_bytes_min = bpl;
		runtime->hw.period_bytes_min = bpl;
		runtime->hw.period_bytes_max = bpl;
		runtime->hw.period_bytes_max = bpl;
@@ -474,7 +471,7 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream,
	BUG_ON(chip->num_periods & (chip->num_periods-1));
	BUG_ON(chip->num_periods & (chip->num_periods-1));


	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
	buf = kzalloc(sizeof(*buf), GFP_KERNEL);
	if (NULL == buf)
	if (buf == NULL)
		return -ENOMEM;
		return -ENOMEM;


	chip->buf = buf;
	chip->buf = buf;
@@ -584,6 +581,7 @@ static struct page *snd_cx88_page(struct snd_pcm_substream *substream,
				unsigned long offset)
				unsigned long offset)
{
{
	void *pageptr = substream->runtime->dma_area + offset;
	void *pageptr = substream->runtime->dma_area + offset;

	return vmalloc_to_page(pageptr);
	return vmalloc_to_page(pageptr);
}
}


@@ -872,7 +870,7 @@ static int snd_cx88_create(struct snd_card *card, struct pci_dev *pci,
	chip = card->private_data;
	chip = card->private_data;


	core = cx88_core_get(pci);
	core = cx88_core_get(pci);
	if (NULL == core) {
	if (core == NULL) {
		err = -EINVAL;
		err = -EINVAL;
		return err;
		return err;
	}
	}
@@ -967,7 +965,8 @@ static int cx88_audio_initdev(struct pci_dev *pci,
	strcpy(card->driver, "CX88x");
	strcpy(card->driver, "CX88x");
	sprintf(card->shortname, "Conexant CX%x", pci->device);
	sprintf(card->shortname, "Conexant CX%x", pci->device);
	sprintf(card->longname, "%s at %#llx",
	sprintf(card->longname, "%s at %#llx",
		card->shortname,(unsigned long long)pci_resource_start(pci, 0));
		card->shortname,
		(unsigned long long)pci_resource_start(pci, 0));
	strcpy(card->mixername, "CX88");
	strcpy(card->mixername, "CX88");


	dprintk(0, "%s/%i: ALSA support for cx2388x boards\n",
	dprintk(0, "%s/%i: ALSA support for cx2388x boards\n",
+45 −49
Original line number Original line Diff line number Diff line
/*
/*
 *
 *  Support for a cx23416 mpeg encoder via cx2388x host port.
 *  Support for a cx23416 mpeg encoder via cx2388x host port.
 *  "blackbird" reference design.
 *  "blackbird" reference design.
 *
 *
@@ -20,10 +19,6 @@
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 */


#include "cx88.h"
#include "cx88.h"
@@ -411,7 +406,7 @@ static int blackbird_find_mailbox(struct cx8802_dev *dev)
			signaturecnt++;
			signaturecnt++;
		else
		else
			signaturecnt = 0;
			signaturecnt = 0;
		if (4 == signaturecnt) {
		if (signaturecnt == 4) {
			dprintk(1, "Mailbox signature found\n");
			dprintk(1, "Mailbox signature found\n");
			return i+1;
			return i+1;
		}
		}
@@ -459,7 +454,7 @@ static int blackbird_load_firmware(struct cx8802_dev *dev)
		return -EINVAL;
		return -EINVAL;
	}
	}


	if (0 != memcmp(firmware->data, magic, 8)) {
	if (memcmp(firmware->data, magic, 8) != 0) {
		pr_err("Firmware magic mismatch, wrong file?\n");
		pr_err("Firmware magic mismatch, wrong file?\n");
		release_firmware(firmware);
		release_firmware(firmware);
		return -EINVAL;
		return -EINVAL;
@@ -815,7 +810,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
{
{
	struct cx8802_dev *dev = video_drvdata(file);
	struct cx8802_dev *dev = video_drvdata(file);
	struct cx88_core *core = dev->core;
	struct cx88_core *core = dev->core;
	unsigned maxw, maxh;
	unsigned int maxw, maxh;
	enum v4l2_field field;
	enum v4l2_field field;


	f->fmt.pix.pixelformat  = V4L2_PIX_FMT_MPEG;
	f->fmt.pix.pixelformat  = V4L2_PIX_FMT_MPEG;
@@ -878,7 +873,7 @@ static int vidioc_s_frequency (struct file *file, void *priv,
	struct cx88_core *core = dev->core;
	struct cx88_core *core = dev->core;
	bool streaming;
	bool streaming;


	if (unlikely(UNSET == core->board.tuner_type))
	if (unlikely(core->board.tuner_type == UNSET))
		return -EINVAL;
		return -EINVAL;
	if (unlikely(f->tuner != 0))
	if (unlikely(f->tuner != 0))
		return -EINVAL;
		return -EINVAL;
@@ -912,6 +907,7 @@ static int vidioc_enum_input (struct file *file, void *priv,
{
{
	struct cx8802_dev *dev = video_drvdata(file);
	struct cx8802_dev *dev = video_drvdata(file);
	struct cx88_core *core = dev->core;
	struct cx88_core *core = dev->core;

	return cx88_enum_input(core, i);
	return cx88_enum_input(core, i);
}
}


@@ -921,7 +917,7 @@ static int vidioc_g_frequency (struct file *file, void *priv,
	struct cx8802_dev *dev = video_drvdata(file);
	struct cx8802_dev *dev = video_drvdata(file);
	struct cx88_core *core = dev->core;
	struct cx88_core *core = dev->core;


	if (unlikely(UNSET == core->board.tuner_type))
	if (unlikely(core->board.tuner_type == UNSET))
		return -EINVAL;
		return -EINVAL;
	if (unlikely(f->tuner != 0))
	if (unlikely(f->tuner != 0))
		return -EINVAL;
		return -EINVAL;
@@ -963,9 +959,9 @@ static int vidioc_g_tuner (struct file *file, void *priv,
	struct cx88_core *core = dev->core;
	struct cx88_core *core = dev->core;
	u32 reg;
	u32 reg;


	if (unlikely(UNSET == core->board.tuner_type))
	if (unlikely(core->board.tuner_type == UNSET))
		return -EINVAL;
		return -EINVAL;
	if (0 != t->index)
	if (t->index != 0)
		return -EINVAL;
		return -EINVAL;


	strcpy(t->name, "Television");
	strcpy(t->name, "Television");
@@ -985,9 +981,9 @@ static int vidioc_s_tuner (struct file *file, void *priv,
	struct cx8802_dev *dev = video_drvdata(file);
	struct cx8802_dev *dev = video_drvdata(file);
	struct cx88_core *core = dev->core;
	struct cx88_core *core = dev->core;


	if (UNSET == core->board.tuner_type)
	if (core->board.tuner_type == UNSET)
		return -EINVAL;
		return -EINVAL;
	if (0 != t->index)
	if (t->index != 0)
		return -EINVAL;
		return -EINVAL;


	cx88_set_stereo(core, t->audmode, 1);
	cx88_set_stereo(core, t->audmode, 1);
@@ -1011,8 +1007,8 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id id)
	return cx88_set_tvnorm(core, id);
	return cx88_set_tvnorm(core, id);
}
}


static const struct v4l2_file_operations mpeg_fops =
static const struct v4l2_file_operations mpeg_fops = {
{

	.owner	       = THIS_MODULE,
	.owner	       = THIS_MODULE,
	.open	       = v4l2_fh_open,
	.open	       = v4l2_fh_open,
	.release       = vb2_fop_release,
	.release       = vb2_fop_release,
+40 −45
Original line number Original line Diff line number Diff line
/*
/*
 *
 * device driver for Conexant 2388x based TV cards
 * device driver for Conexant 2388x based TV cards
 * card-specific stuff.
 * card-specific stuff.
 *
 *
@@ -14,10 +13,6 @@
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 */


#include "cx88.h"
#include "cx88.h"
@@ -2947,7 +2942,7 @@ static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data)
		? gdi_tuner[eeprom_data[0x0d]].name : NULL;
		? gdi_tuner[eeprom_data[0x0d]].name : NULL;


	pr_info("GDI: tuner=%s\n", name ? name : "unknown");
	pr_info("GDI: tuner=%s\n", name ? name : "unknown");
	if (NULL == name)
	if (name == NULL)
		return;
		return;
	core->board.tuner_type = gdi_tuner[eeprom_data[0x0d]].id;
	core->board.tuner_type = gdi_tuner[eeprom_data[0x0d]].id;
	core->board.radio.type = gdi_tuner[eeprom_data[0x0d]].fm ?
	core->board.radio.type = gdi_tuner[eeprom_data[0x0d]].fm ?
@@ -3401,7 +3396,7 @@ static void cx88_card_setup(struct cx88_core *core)


	memset(&tun_setup, 0, sizeof(tun_setup));
	memset(&tun_setup, 0, sizeof(tun_setup));


	if (0 == core->i2c_rc) {
	if (core->i2c_rc == 0) {
		core->i2c_client.addr = 0xa0 >> 1;
		core->i2c_client.addr = 0xa0 >> 1;
		tveeprom_read(&core->i2c_client, eeprom, sizeof(eeprom));
		tveeprom_read(&core->i2c_client, eeprom, sizeof(eeprom));
	}
	}
@@ -3409,17 +3404,17 @@ static void cx88_card_setup(struct cx88_core *core)
	switch (core->boardnr) {
	switch (core->boardnr) {
	case CX88_BOARD_HAUPPAUGE:
	case CX88_BOARD_HAUPPAUGE:
	case CX88_BOARD_HAUPPAUGE_ROSLYN:
	case CX88_BOARD_HAUPPAUGE_ROSLYN:
		if (0 == core->i2c_rc)
		if (core->i2c_rc == 0)
			hauppauge_eeprom(core, eeprom+8);
			hauppauge_eeprom(core, eeprom+8);
		break;
		break;
	case CX88_BOARD_GDI:
	case CX88_BOARD_GDI:
		if (0 == core->i2c_rc)
		if (core->i2c_rc == 0)
			gdi_eeprom(core, eeprom);
			gdi_eeprom(core, eeprom);
		break;
		break;
	case CX88_BOARD_LEADTEK_PVR2000:
	case CX88_BOARD_LEADTEK_PVR2000:
	case CX88_BOARD_WINFAST_DV2000:
	case CX88_BOARD_WINFAST_DV2000:
	case CX88_BOARD_WINFAST2000XP_EXPERT:
	case CX88_BOARD_WINFAST2000XP_EXPERT:
		if (0 == core->i2c_rc)
		if (core->i2c_rc == 0)
			leadtek_eeprom(core, eeprom);
			leadtek_eeprom(core, eeprom);
		break;
		break;
	case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1:
	case CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1:
@@ -3432,7 +3427,7 @@ static void cx88_card_setup(struct cx88_core *core)
	case CX88_BOARD_HAUPPAUGE_HVR4000:
	case CX88_BOARD_HAUPPAUGE_HVR4000:
	case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
	case CX88_BOARD_HAUPPAUGE_HVR4000LITE:
	case CX88_BOARD_HAUPPAUGE_IRONLY:
	case CX88_BOARD_HAUPPAUGE_IRONLY:
		if (0 == core->i2c_rc)
		if (core->i2c_rc == 0)
			hauppauge_eeprom(core, eeprom);
			hauppauge_eeprom(core, eeprom);
		break;
		break;
	case CX88_BOARD_KWORLD_DVBS_100:
	case CX88_BOARD_KWORLD_DVBS_100:
@@ -3478,7 +3473,7 @@ static void cx88_card_setup(struct cx88_core *core)
		cx_write(MO_GP0_IO, 0x00080808);
		cx_write(MO_GP0_IO, 0x00080808);
		break;
		break;
	case CX88_BOARD_ATI_HDTVWONDER:
	case CX88_BOARD_ATI_HDTVWONDER:
		if (0 == core->i2c_rc) {
		if (core->i2c_rc == 0) {
			/* enable tuner */
			/* enable tuner */
			int i;
			int i;
			static const u8 buffer[][2] = {
			static const u8 buffer[][2] = {
@@ -3616,7 +3611,7 @@ static int cx88_pci_quirks(const char *name, struct pci_dev *pci)
#endif
#endif


	/* check insmod options */
	/* check insmod options */
	if (UNSET != latency)
	if (latency != UNSET)
		lat = latency;
		lat = latency;


	/* apply stuff */
	/* apply stuff */
@@ -3625,7 +3620,7 @@ static int cx88_pci_quirks(const char *name, struct pci_dev *pci)
		value |= ctrl;
		value |= ctrl;
		pci_write_config_byte(pci, CX88X_DEVCTRL, value);
		pci_write_config_byte(pci, CX88X_DEVCTRL, value);
	}
	}
	if (UNSET != lat) {
	if (lat != UNSET) {
		pr_info("setting pci latency timer to %d\n",
		pr_info("setting pci latency timer to %d\n",
			latency);
			latency);
		pci_write_config_byte(pci, PCI_LATENCY_TIMER, latency);
		pci_write_config_byte(pci, PCI_LATENCY_TIMER, latency);
@@ -3692,7 +3687,7 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
		return NULL;
		return NULL;
	}
	}


	if (0 != cx88_get_resources(core, pci)) {
	if (cx88_get_resources(core, pci) != 0) {
		v4l2_ctrl_handler_free(&core->video_hdl);
		v4l2_ctrl_handler_free(&core->video_hdl);
		v4l2_ctrl_handler_free(&core->audio_hdl);
		v4l2_ctrl_handler_free(&core->audio_hdl);
		v4l2_device_unregister(&core->v4l2_dev);
		v4l2_device_unregister(&core->v4l2_dev);
@@ -3724,7 +3719,7 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
		if (pci->subsystem_vendor == cx88_subids[i].subvendor &&
		if (pci->subsystem_vendor == cx88_subids[i].subvendor &&
		    pci->subsystem_device == cx88_subids[i].subdevice)
		    pci->subsystem_device == cx88_subids[i].subdevice)
			core->boardnr = cx88_subids[i].card;
			core->boardnr = cx88_subids[i].card;
	if (UNSET == core->boardnr) {
	if (core->boardnr == UNSET) {
		core->boardnr = CX88_BOARD_UNKNOWN;
		core->boardnr = CX88_BOARD_UNKNOWN;
		cx88_card_list(core, pci);
		cx88_card_list(core, pci);
	}
	}
@@ -3754,7 +3749,7 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
	cx88_i2c_init(core, pci);
	cx88_i2c_init(core, pci);


	/* load tuner module, if needed */
	/* load tuner module, if needed */
	if (UNSET != core->board.tuner_type) {
	if (core->board.tuner_type != UNSET) {
		/* Ignore 0x6b and 0x6f on cx88 boards.
		/* Ignore 0x6b and 0x6f on cx88 boards.
		 * FusionHDTV5 RT Gold has an ir receiver at 0x6b
		 * FusionHDTV5 RT Gold has an ir receiver at 0x6b
		 * and an RTC at 0x6f which can get corrupted if probed. */
		 * and an RTC at 0x6f which can get corrupted if probed. */
+58 −63
Original line number Original line Diff line number Diff line
/*
/*
 *
 * device driver for Conexant 2388x based TV cards
 * device driver for Conexant 2388x based TV cards
 * driver core
 * driver core
 *
 *
@@ -19,10 +18,6 @@
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 */


#include "cx88.h"
#include "cx88.h"
@@ -147,9 +142,9 @@ int cx88_risc_buffer(struct pci_dev *pci, struct cx88_riscmem *risc,
	__le32 *rp;
	__le32 *rp;


	fields = 0;
	fields = 0;
	if (UNSET != top_offset)
	if (top_offset != UNSET)
		fields++;
		fields++;
	if (UNSET != bottom_offset)
	if (bottom_offset != UNSET)
		fields++;
		fields++;


	/* estimate risc mem: worst case is one write per page border +
	/* estimate risc mem: worst case is one write per page border +
@@ -161,21 +156,21 @@ int cx88_risc_buffer(struct pci_dev *pci, struct cx88_riscmem *risc,
	risc->size = instructions * 8;
	risc->size = instructions * 8;
	risc->dma = 0;
	risc->dma = 0;
	risc->cpu = pci_zalloc_consistent(pci, risc->size, &risc->dma);
	risc->cpu = pci_zalloc_consistent(pci, risc->size, &risc->dma);
	if (NULL == risc->cpu)
	if (risc->cpu == NULL)
		return -ENOMEM;
		return -ENOMEM;


	/* write risc instructions */
	/* write risc instructions */
	rp = risc->cpu;
	rp = risc->cpu;
	if (UNSET != top_offset)
	if (top_offset != UNSET)
		rp = cx88_risc_field(rp, sglist, top_offset, 0,
		rp = cx88_risc_field(rp, sglist, top_offset, 0,
				     bpl, padding, lines, 0, true);
				     bpl, padding, lines, 0, true);
	if (UNSET != bottom_offset)
	if (bottom_offset != UNSET)
		rp = cx88_risc_field(rp, sglist, bottom_offset, 0x200,
		rp = cx88_risc_field(rp, sglist, bottom_offset, 0x200,
				     bpl, padding, lines, 0, top_offset == UNSET);
				     bpl, padding, lines, 0, top_offset == UNSET);


	/* save pointer to jmp instruction address */
	/* save pointer to jmp instruction address */
	risc->jmp = rp;
	risc->jmp = rp;
	BUG_ON((risc->jmp - risc->cpu + 2) * sizeof (*risc->cpu) > risc->size);
	WARN_ON((risc->jmp - risc->cpu + 2) * sizeof(*risc->cpu) > risc->size);
	return 0;
	return 0;
}
}


@@ -195,7 +190,7 @@ int cx88_risc_databuffer(struct pci_dev *pci, struct cx88_riscmem *risc,
	risc->size = instructions * 8;
	risc->size = instructions * 8;
	risc->dma = 0;
	risc->dma = 0;
	risc->cpu = pci_zalloc_consistent(pci, risc->size, &risc->dma);
	risc->cpu = pci_zalloc_consistent(pci, risc->size, &risc->dma);
	if (NULL == risc->cpu)
	if (risc->cpu == NULL)
		return -ENOMEM;
		return -ENOMEM;


	/* write risc instructions */
	/* write risc instructions */
@@ -204,7 +199,7 @@ int cx88_risc_databuffer(struct pci_dev *pci, struct cx88_riscmem *risc,


	/* save pointer to jmp instruction address */
	/* save pointer to jmp instruction address */
	risc->jmp = rp;
	risc->jmp = rp;
	BUG_ON((risc->jmp - risc->cpu + 2) * sizeof (*risc->cpu) > risc->size);
	WARN_ON((risc->jmp - risc->cpu + 2) * sizeof(*risc->cpu) > risc->size);
	return 0;
	return 0;
}
}


@@ -348,7 +343,7 @@ int cx88_sram_channel_setup(struct cx88_core *core,
	lines = ch->fifo_size / bpl;
	lines = ch->fifo_size / bpl;
	if (lines > 6)
	if (lines > 6)
		lines = 6;
		lines = 6;
	BUG_ON(lines < 2);
	WARN_ON(lines < 2);


	/* write CDT */
	/* write CDT */
	for (i = 0; i < lines; i++)
	for (i = 0; i < lines; i++)
@@ -711,7 +706,7 @@ int cx88_set_scale(struct cx88_core *core, unsigned int width, unsigned int heig
	}
	}
	if (INPUT(core->input).type == CX88_VMUX_SVIDEO)
	if (INPUT(core->input).type == CX88_VMUX_SVIDEO)
		value |= (1 << 13) | (1 << 5);
		value |= (1 << 13) | (1 << 5);
	if (V4L2_FIELD_INTERLACED == field)
	if (field == V4L2_FIELD_INTERLACED)
		value |= (1 << 3); // VINT (interlaced vertical scaling)
		value |= (1 << 3); // VINT (interlaced vertical scaling)
	if (width < 385)
	if (width < 385)
		value |= (1 << 0); // 3-tap interpolation
		value |= (1 << 0); // 3-tap interpolation
@@ -1024,7 +1019,7 @@ struct cx88_core* cx88_core_get(struct pci_dev *pci)
		if (PCI_SLOT(pci->devfn) != core->pci_slot)
		if (PCI_SLOT(pci->devfn) != core->pci_slot)
			continue;
			continue;


		if (0 != cx88_get_resources(core, pci)) {
		if (cx88_get_resources(core, pci) != 0) {
			mutex_unlock(&devlist);
			mutex_unlock(&devlist);
			return NULL;
			return NULL;
		}
		}
@@ -1034,7 +1029,7 @@ struct cx88_core* cx88_core_get(struct pci_dev *pci)
	}
	}


	core = cx88_core_create(pci, cx88_devcount);
	core = cx88_core_create(pci, cx88_devcount);
	if (NULL != core) {
	if (core != NULL) {
		cx88_devcount++;
		cx88_devcount++;
		list_add_tail(&core->devlist, &cx88_devlist);
		list_add_tail(&core->devlist, &cx88_devlist);
	}
	}
@@ -1053,7 +1048,7 @@ void cx88_core_put(struct cx88_core *core, struct pci_dev *pci)


	mutex_lock(&devlist);
	mutex_lock(&devlist);
	cx88_ir_fini(core);
	cx88_ir_fini(core);
	if (0 == core->i2c_rc) {
	if (core->i2c_rc == 0) {
		if (core->i2c_rtc)
		if (core->i2c_rtc)
			i2c_unregister_device(core->i2c_rtc);
			i2c_unregister_device(core->i2c_rtc);
		i2c_del_adapter(&core->i2c_adap);
		i2c_del_adapter(&core->i2c_adap);
+5 −6
Original line number Original line Diff line number Diff line
/*
/*
 *
 *  Stereo and SAP detection for cx88
 *  Stereo and SAP detection for cx88
 *
 *
 *  Copyright (c) 2009 Marton Balint <cus@fazekas.hu>
 *  Copyright (c) 2009 Marton Balint <cus@fazekas.hu>
@@ -13,10 +12,6 @@
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
 */


#include "cx88.h"
#include "cx88.h"
@@ -82,6 +77,7 @@ static s32 int_cos(u32 x)
	u32 t2, t4, t6, t8;
	u32 t2, t4, t6, t8;
	s32 ret;
	s32 ret;
	u16 period = x / INT_PI;
	u16 period = x / INT_PI;

	if (period % 2)
	if (period % 2)
		return -int_cos(x - INT_PI);
		return -int_cos(x - INT_PI);
	x = x % INT_PI;
	x = x % INT_PI;
@@ -111,6 +107,7 @@ static u32 int_goertzel(s16 x[], u32 N, u32 freq)


	for (i = 0; i < N; i++) {
	for (i = 0; i < N; i++) {
		s32 s = x[i] + ((s64)coeff * s_prev / 32768) - s_prev2;
		s32 s = x[i] + ((s64)coeff * s_prev / 32768) - s_prev2;

		s_prev2 = s_prev;
		s_prev2 = s_prev;
		s_prev = s;
		s_prev = s;
	}
	}
@@ -129,6 +126,7 @@ static u32 int_goertzel(s16 x[], u32 N, u32 freq)
static u32 freq_magnitude(s16 x[], u32 N, u32 freq)
static u32 freq_magnitude(s16 x[], u32 N, u32 freq)
{
{
	u32 sum = int_goertzel(x, N, freq);
	u32 sum = int_goertzel(x, N, freq);

	return (u32)int_sqrt(sum);
	return (u32)int_sqrt(sum);
}
}


@@ -225,6 +223,7 @@ static s32 detect_btsc(struct cx88_core *core, s16 x[], u32 N)
	s32 sap = freq_magnitude(x, N, FREQ_BTSC_SAP);
	s32 sap = freq_magnitude(x, N, FREQ_BTSC_SAP);
	s32 dual_ref = freq_magnitude(x, N, FREQ_BTSC_DUAL_REF);
	s32 dual_ref = freq_magnitude(x, N, FREQ_BTSC_DUAL_REF);
	s32 dual = freq_magnitude(x, N, FREQ_BTSC_DUAL);
	s32 dual = freq_magnitude(x, N, FREQ_BTSC_DUAL);

	dprintk(1, "detect btsc: dual_ref=%d, dual=%d, sap_ref=%d, sap=%d\n",
	dprintk(1, "detect btsc: dual_ref=%d, dual=%d, sap_ref=%d, sap=%d\n",
		dual_ref, dual, sap_ref, sap);
		dual_ref, dual, sap_ref, sap);
	/* FIXME: Currently not supported */
	/* FIXME: Currently not supported */
@@ -307,7 +306,7 @@ s32 cx88_dsp_detect_stereo_sap(struct cx88_core *core)


	kfree(samples);
	kfree(samples);


	if (UNSET != ret)
	if (ret != UNSET)
		dprintk(1, "stereo/sap detection result:%s%s%s\n",
		dprintk(1, "stereo/sap detection result:%s%s%s\n",
			   (ret & V4L2_TUNER_SUB_MONO) ? " mono" : "",
			   (ret & V4L2_TUNER_SUB_MONO) ? " mono" : "",
			   (ret & V4L2_TUNER_SUB_STEREO) ? " stereo" : "",
			   (ret & V4L2_TUNER_SUB_STEREO) ? " stereo" : "",
Loading