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

[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
/* /*
*
* Support for audio capture * Support for audio capture
* PCI function #1 of the cx2388x. * PCI function #1 of the cx2388x.
* *
...@@ -18,10 +17,6 @@ ...@@ -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"
...@@ -118,8 +113,8 @@ MODULE_VERSION(CX88_VERSION); ...@@ -118,8 +113,8 @@ MODULE_VERSION(CX88_VERSION);
MODULE_SUPPORTED_DEVICE("{{Conexant,23881},{{Conexant,23882},{{Conexant,23883}"); MODULE_SUPPORTED_DEVICE("{{Conexant,23881},{{Conexant,23882},{{Conexant,23883}");
static unsigned int debug; static unsigned int debug;
module_param(debug,int,0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug,"enable debug messages"); MODULE_PARM_DESC(debug, "enable debug messages");
/**************************************************************************** /****************************************************************************
Module specific funtions Module specific funtions
...@@ -132,7 +127,7 @@ MODULE_PARM_DESC(debug,"enable debug messages"); ...@@ -132,7 +127,7 @@ MODULE_PARM_DESC(debug,"enable debug messages");
static int _cx88_start_audio_dma(snd_cx88_card_t *chip) static int _cx88_start_audio_dma(snd_cx88_card_t *chip)
{ {
struct cx88_audio_buffer *buf = chip->buf; struct cx88_audio_buffer *buf = chip->buf;
struct cx88_core *core=chip->core; struct cx88_core *core = chip->core;
const struct sram_channel *audio_ch = &cx88_sram_channels[SRAM_CH25]; const struct sram_channel *audio_ch = &cx88_sram_channels[SRAM_CH25];
/* Make sure RISC/FIFO are off before changing FIFO/RISC settings */ /* Make sure RISC/FIFO are off before changing FIFO/RISC settings */
...@@ -177,7 +172,8 @@ static int _cx88_start_audio_dma(snd_cx88_card_t *chip) ...@@ -177,7 +172,8 @@ 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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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;
} }
...@@ -366,7 +362,7 @@ static int dsp_buffer_free(snd_cx88_card_t *chip) ...@@ -366,7 +362,7 @@ static int dsp_buffer_free(snd_cx88_card_t *chip)
BUG_ON(!chip->dma_size); BUG_ON(!chip->dma_size);
dprintk(2,"Freeing buffer\n"); dprintk(2, "Freeing buffer\n");
cx88_alsa_dma_unmap(chip); cx88_alsa_dma_unmap(chip);
cx88_alsa_dma_free(chip->buf); cx88_alsa_dma_free(chip->buf);
if (risc->cpu) if (risc->cpu)
...@@ -431,6 +427,7 @@ static int snd_cx88_pcm_open(struct snd_pcm_substream *substream) ...@@ -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;
...@@ -438,7 +435,7 @@ static int snd_cx88_pcm_open(struct snd_pcm_substream *substream) ...@@ -438,7 +435,7 @@ static int snd_cx88_pcm_open(struct snd_pcm_substream *substream)
return 0; return 0;
_error: _error:
dprintk(1,"Error opening PCM!\n"); dprintk(1, "Error opening PCM!\n");
return err; return err;
} }
...@@ -453,8 +450,8 @@ static int snd_cx88_close(struct snd_pcm_substream *substream) ...@@ -453,8 +450,8 @@ static int snd_cx88_close(struct snd_pcm_substream *substream)
/* /*
* hw_params callback * hw_params callback
*/ */
static int snd_cx88_hw_params(struct snd_pcm_substream * substream, static int snd_cx88_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params * hw_params) struct snd_pcm_hw_params *hw_params)
{ {
snd_cx88_card_t *chip = snd_pcm_substream_chip(substream); snd_cx88_card_t *chip = snd_pcm_substream_chip(substream);
...@@ -474,7 +471,7 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream, ...@@ -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;
...@@ -511,7 +508,7 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream, ...@@ -511,7 +508,7 @@ static int snd_cx88_hw_params(struct snd_pcm_substream * substream,
/* /*
* hw free callback * hw free callback
*/ */
static int snd_cx88_hw_free(struct snd_pcm_substream * substream) static int snd_cx88_hw_free(struct snd_pcm_substream *substream)
{ {
snd_cx88_card_t *chip = snd_pcm_substream_chip(substream); snd_cx88_card_t *chip = snd_pcm_substream_chip(substream);
...@@ -545,13 +542,13 @@ static int snd_cx88_card_trigger(struct snd_pcm_substream *substream, int cmd) ...@@ -545,13 +542,13 @@ static int snd_cx88_card_trigger(struct snd_pcm_substream *substream, int cmd)
switch (cmd) { switch (cmd) {
case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_START:
err=_cx88_start_audio_dma(chip); err = _cx88_start_audio_dma(chip);
break; break;
case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_STOP:
err=_cx88_stop_audio_dma(chip); err = _cx88_stop_audio_dma(chip);
break; break;
default: default:
err=-EINVAL; err = -EINVAL;
break; break;
} }
...@@ -584,6 +581,7 @@ static struct page *snd_cx88_page(struct snd_pcm_substream *substream, ...@@ -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);
} }
...@@ -638,7 +636,7 @@ static int snd_cx88_volume_get(struct snd_kcontrol *kcontrol, ...@@ -638,7 +636,7 @@ static int snd_cx88_volume_get(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *value) struct snd_ctl_elem_value *value)
{ {
snd_cx88_card_t *chip = snd_kcontrol_chip(kcontrol); snd_cx88_card_t *chip = snd_kcontrol_chip(kcontrol);
struct cx88_core *core=chip->core; struct cx88_core *core = chip->core;
int vol = 0x3f - (cx_read(AUD_VOL_CTL) & 0x3f), int vol = 0x3f - (cx_read(AUD_VOL_CTL) & 0x3f),
bal = cx_read(AUD_BAL_CTL); bal = cx_read(AUD_BAL_CTL);
...@@ -675,7 +673,7 @@ static int snd_cx88_volume_put(struct snd_kcontrol *kcontrol, ...@@ -675,7 +673,7 @@ static int snd_cx88_volume_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *value) struct snd_ctl_elem_value *value)
{ {
snd_cx88_card_t *chip = snd_kcontrol_chip(kcontrol); snd_cx88_card_t *chip = snd_kcontrol_chip(kcontrol);
struct cx88_core *core=chip->core; struct cx88_core *core = chip->core;
int left, right, v, b; int left, right, v, b;
int changed = 0; int changed = 0;
u32 old; u32 old;
...@@ -814,8 +812,8 @@ static struct snd_kcontrol_new snd_cx88_alc_switch = { ...@@ -814,8 +812,8 @@ static struct snd_kcontrol_new snd_cx88_alc_switch = {
*/ */
static const struct pci_device_id cx88_audio_pci_tbl[] = { static const struct pci_device_id cx88_audio_pci_tbl[] = {
{0x14f1,0x8801,PCI_ANY_ID,PCI_ANY_ID,0,0,0}, {0x14f1, 0x8801, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{0x14f1,0x8811,PCI_ANY_ID,PCI_ANY_ID,0,0,0}, {0x14f1, 0x8811, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{0, } {0, }
}; };
MODULE_DEVICE_TABLE(pci, cx88_audio_pci_tbl); MODULE_DEVICE_TABLE(pci, cx88_audio_pci_tbl);
...@@ -830,7 +828,7 @@ static int snd_cx88_free(snd_cx88_card_t *chip) ...@@ -830,7 +828,7 @@ static int snd_cx88_free(snd_cx88_card_t *chip)
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, chip); free_irq(chip->irq, chip);
cx88_core_put(chip->core,chip->pci); cx88_core_put(chip->core, chip->pci);
pci_disable_device(chip->pci); pci_disable_device(chip->pci);
return 0; return 0;
...@@ -839,7 +837,7 @@ static int snd_cx88_free(snd_cx88_card_t *chip) ...@@ -839,7 +837,7 @@ static int snd_cx88_free(snd_cx88_card_t *chip)
/* /*
* Component Destructor * Component Destructor
*/ */
static void snd_cx88_dev_free(struct snd_card * card) static void snd_cx88_dev_free(struct snd_card *card)
{ {
snd_cx88_card_t *chip = card->private_data; snd_cx88_card_t *chip = card->private_data;
...@@ -872,14 +870,14 @@ static int snd_cx88_create(struct snd_card *card, struct pci_dev *pci, ...@@ -872,14 +870,14 @@ 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;
} }
err = pci_set_dma_mask(pci,DMA_BIT_MASK(32)); err = pci_set_dma_mask(pci, DMA_BIT_MASK(32));
if (err) { if (err) {
dprintk(0, "%s/1: Oops: no 32bit PCI DMA ???\n",core->name); dprintk(0, "%s/1: Oops: no 32bit PCI DMA ???\n", core->name);
cx88_core_put(core, pci); cx88_core_put(core, pci);
return err; return err;
} }
...@@ -908,7 +906,7 @@ static int snd_cx88_create(struct snd_card *card, struct pci_dev *pci, ...@@ -908,7 +906,7 @@ static int snd_cx88_create(struct snd_card *card, struct pci_dev *pci,
dprintk(1, "ALSA %s/%i: found at %s, rev: %d, irq: %d, latency: %d, mmio: 0x%llx\n", dprintk(1, "ALSA %s/%i: found at %s, rev: %d, irq: %d, latency: %d, mmio: 0x%llx\n",
core->name, devno, core->name, devno,
pci_name(pci), pci->revision, pci->irq, pci_name(pci), pci->revision, pci->irq,
pci_lat, (unsigned long long)pci_resource_start(pci,0)); pci_lat, (unsigned long long)pci_resource_start(pci, 0));
chip->irq = pci->irq; chip->irq = pci->irq;
synchronize_irq(chip->irq); synchronize_irq(chip->irq);
...@@ -964,19 +962,20 @@ static int cx88_audio_initdev(struct pci_dev *pci, ...@@ -964,19 +962,20 @@ static int cx88_audio_initdev(struct pci_dev *pci,
if (core->sd_wm8775) if (core->sd_wm8775)
snd_ctl_add(card, snd_ctl_new1(&snd_cx88_alc_switch, chip)); snd_ctl_add(card, snd_ctl_new1(&snd_cx88_alc_switch, chip));
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,
strcpy (card->mixername, "CX88"); (unsigned long long)pci_resource_start(pci, 0));
strcpy(card->mixername, "CX88");
dprintk (0, "%s/%i: ALSA support for cx2388x boards\n", dprintk(0, "%s/%i: ALSA support for cx2388x boards\n",
card->driver,devno); card->driver, devno);
err = snd_card_register(card); err = snd_card_register(card);
if (err < 0) if (err < 0)
goto error; goto error;
pci_set_drvdata(pci,card); pci_set_drvdata(pci, card);
devno++; devno++;
return 0; return 0;
......
This diff is collapsed.
/* /*
*
* 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 @@ ...@@ -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"
...@@ -38,19 +33,19 @@ module_param_array(tuner, int, NULL, 0444); ...@@ -38,19 +33,19 @@ module_param_array(tuner, int, NULL, 0444);
module_param_array(radio, int, NULL, 0444); module_param_array(radio, int, NULL, 0444);
module_param_array(card, int, NULL, 0444); module_param_array(card, int, NULL, 0444);
MODULE_PARM_DESC(tuner,"tuner type"); MODULE_PARM_DESC(tuner, "tuner type");
MODULE_PARM_DESC(radio,"radio tuner type"); MODULE_PARM_DESC(radio, "radio tuner type");
MODULE_PARM_DESC(card,"card type"); MODULE_PARM_DESC(card, "card type");
static unsigned int latency = UNSET; static unsigned int latency = UNSET;
module_param(latency,int,0444); module_param(latency, int, 0444);
MODULE_PARM_DESC(latency,"pci latency timer"); MODULE_PARM_DESC(latency, "pci latency timer");
static int disable_ir; static int disable_ir;
module_param(disable_ir, int, 0444); module_param(disable_ir, int, 0444);
MODULE_PARM_DESC(disable_ir, "Disable IR support"); MODULE_PARM_DESC(disable_ir, "Disable IR support");
#define dprintk(level,fmt, arg...) do { \ #define dprintk(level, fmt, arg...) do { \
if (cx88_core_debug >= level) \ if (cx88_core_debug >= level) \
printk(KERN_DEBUG pr_fmt("%s: core:" fmt), \ printk(KERN_DEBUG pr_fmt("%s: core:" fmt), \
__func__, ##arg); \ __func__, ##arg); \
...@@ -2911,33 +2906,33 @@ static const struct { ...@@ -2911,33 +2906,33 @@ static const struct {
int fm; int fm;
const char *name; const char *name;
} gdi_tuner[] = { } gdi_tuner[] = {
[ 0x01 ] = { .id = UNSET, [0x01] = { .id = UNSET,
.name = "NTSC_M" }, .name = "NTSC_M" },
[ 0x02 ] = { .id = UNSET, [0x02] = { .id = UNSET,
.name = "PAL_B" }, .name = "PAL_B" },
[ 0x03 ] = { .id = UNSET, [0x03] = { .id = UNSET,
.name = "PAL_I" }, .name = "PAL_I" },
[ 0x04 ] = { .id = UNSET, [0x04] = { .id = UNSET,
.name = "PAL_D" }, .name = "PAL_D" },
[ 0x05 ] = { .id = UNSET, [0x05] = { .id = UNSET,
.name = "SECAM" }, .name = "SECAM" },
[ 0x10 ] = { .id = UNSET, [0x10] = { .id = UNSET,
.fm = 1, .fm = 1,
.name = "TEMIC_4049" }, .name = "TEMIC_4049" },
[ 0x11 ] = { .id = TUNER_TEMIC_4136FY5, [0x11] = { .id = TUNER_TEMIC_4136FY5,
.name = "TEMIC_4136" }, .name = "TEMIC_4136" },
[ 0x12 ] = { .id = UNSET, [0x12] = { .id = UNSET,
.name = "TEMIC_4146" }, .name = "TEMIC_4146" },
[ 0x20 ] = { .id = TUNER_PHILIPS_FQ1216ME, [0x20] = { .id = TUNER_PHILIPS_FQ1216ME,
.fm = 1, .fm = 1,
.name = "PHILIPS_FQ1216_MK3" }, .name = "PHILIPS_FQ1216_MK3" },
[ 0x21 ] = { .id = UNSET, .fm = 1, [0x21] = { .id = UNSET, .fm = 1,
.name = "PHILIPS_FQ1236_MK3" }, .name = "PHILIPS_FQ1236_MK3" },
[ 0x22 ] = { .id = UNSET, [0x22] = { .id = UNSET,
.name = "PHILIPS_FI1236_MK3" }, .name = "PHILIPS_FI1236_MK3" },
[ 0x23 ] = { .id = UNSET, [0x23] = { .id = UNSET,
.name = "PHILIPS_FI1216_MK3" }, .name = "PHILIPS_FI1216_MK3" },
}; };
...@@ -2947,7 +2942,7 @@ static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data) ...@@ -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 ?
...@@ -3167,7 +3162,7 @@ static int cx88_xc4000_tuner_callback(struct cx88_core *core, ...@@ -3167,7 +3162,7 @@ static int cx88_xc4000_tuner_callback(struct cx88_core *core,
} }
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
/* Tuner callback function. Currently only needed for the Pinnacle * /* Tuner callback function. Currently only needed for the Pinnacle *
* PCTV HD 800i with an xc5000 sillicon tuner. This is used for both * * PCTV HD 800i with an xc5000 sillicon tuner. This is used for both *
* analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c) */ * analog tuner attach (tuner-core.c) and dvb tuner attach (cx88-dvb.c) */
...@@ -3401,7 +3396,7 @@ static void cx88_card_setup(struct cx88_core *core) ...@@ -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) ...@@ -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) ...@@ -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,21 +3473,21 @@ static void cx88_card_setup(struct cx88_core *core) ...@@ -3478,21 +3473,21 @@ 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] = {
{0x10,0x12}, {0x10, 0x12},
{0x13,0x04}, {0x13, 0x04},
{0x16,0x00}, {0x16, 0x00},
{0x14,0x04}, {0x14, 0x04},
{0x17,0x00} {0x17, 0x00}
}; };
core->i2c_client.addr = 0x0a; core->i2c_client.addr = 0x0a;
for (i = 0; i < ARRAY_SIZE(buffer); i++) for (i = 0; i < ARRAY_SIZE(buffer); i++)
if (2 != i2c_master_send(&core->i2c_client, if (2 != i2c_master_send(&core->i2c_client,
buffer[i],2)) buffer[i], 2))
pr_warn("Unable to enable tuner(%i).\n", pr_warn("Unable to enable tuner(%i).\n",
i); i);
} }
...@@ -3616,7 +3611,7 @@ static int cx88_pci_quirks(const char *name, struct pci_dev *pci) ...@@ -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) ...@@ -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);
...@@ -3635,8 +3630,8 @@ static int cx88_pci_quirks(const char *name, struct pci_dev *pci) ...@@ -3635,8 +3630,8 @@ static int cx88_pci_quirks(const char *name, struct pci_dev *pci)
int cx88_get_resources(const struct cx88_core *core, struct pci_dev *pci) int cx88_get_resources(const struct cx88_core *core, struct pci_dev *pci)
{ {
if (request_mem_region(pci_resource_start(pci,0), if (request_mem_region(pci_resource_start(pci, 0),
pci_resource_len(pci,0), pci_resource_len(pci, 0),
core->name)) core->name))
return 0; return 0;
pr_err("func %d: Can't get MMIO memory @ 0x%llx, subsystem: %04x:%04x\n", pr_err("func %d: Can't get MMIO memory @ 0x%llx, subsystem: %04x:%04x\n",
...@@ -3692,7 +3687,7 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr) ...@@ -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) ...@@ -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) ...@@ -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. */
......
This diff is collapsed.
/* /*
*
* 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 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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" : "",
......
This diff is collapsed.
/* /*
*
cx88-i2c.c -- all the i2c code is here * cx88-i2c.c -- all the i2c code is here
*
Copyright (C) 1996,97,98 Ralph Metzler (rjkm@thp.uni-koeln.de) * Copyright (C) 1996,97,98 Ralph Metzler (rjkm@thp.uni-koeln.de)
& Marcus Metzler (mocm@thp.uni-koeln.de) * & Marcus Metzler (mocm@thp.uni-koeln.de)
(c) 2002 Yurij Sysoev <yurij@naturesoft.net> * (c) 2002 Yurij Sysoev <yurij@naturesoft.net>
(c) 1999-2003 Gerd Knorr <kraxel@bytesex.org> * (c) 1999-2003 Gerd Knorr <kraxel@bytesex.org>
*
(c) 2005 Mauro Carvalho Chehab <mchehab@infradead.org> * (c) 2005 Mauro Carvalho Chehab <mchehab@infradead.org>
- Multituner support and i2c address binding * - Multituner support and i2c address binding
*
This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or * the Free Software Foundation; either version 2 of the License, or
(at your option) any later version. * (at your option) any later version.
*
This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
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"
...@@ -38,11 +33,11 @@ ...@@ -38,11 +33,11 @@
static unsigned int i2c_debug; static unsigned int i2c_debug;
module_param(i2c_debug, int, 0644); module_param(i2c_debug, int, 0644);
MODULE_PARM_DESC(i2c_debug,"enable debug messages [i2c]"); MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]");
static unsigned int i2c_scan; static unsigned int i2c_scan;
module_param(i2c_scan, int, 0444); module_param(i2c_scan, int, 0444);
MODULE_PARM_DESC(i2c_scan,"scan i2c bus at insmod time"); MODULE_PARM_DESC(i2c_scan, "scan i2c bus at insmod time");
static unsigned int i2c_udelay = 5; static unsigned int i2c_udelay = 5;
module_param(i2c_udelay, int, 0644); module_param(i2c_udelay, int, 0644);
...@@ -112,22 +107,22 @@ static const struct i2c_algo_bit_data cx8800_i2c_algo_template = { ...@@ -112,22 +107,22 @@ static const struct i2c_algo_bit_data cx8800_i2c_algo_template = {
/* ----------------------------------------------------------------------- */ /* ----------------------------------------------------------------------- */
static const char * const i2c_devs[128] = { static const char * const i2c_devs[128] = {
[ 0x1c >> 1 ] = "lgdt330x", [0x1c >> 1] = "lgdt330x",
[ 0x86 >> 1 ] = "tda9887/cx22702", [0x86 >> 1] = "tda9887/cx22702",
[ 0xa0 >> 1 ] = "eeprom", [0xa0 >> 1] = "eeprom",
[ 0xc0 >> 1 ] = "tuner (analog)", [0xc0 >> 1] = "tuner (analog)",
[ 0xc2 >> 1 ] = "tuner (analog/dvb)", [0xc2 >> 1] = "tuner (analog/dvb)",
[ 0xc8 >> 1 ] = "xc5000", [0xc8 >> 1] = "xc5000",
}; };
static void do_i2c_scan(const char *name, struct i2c_client *c) static void do_i2c_scan(const char *name, struct i2c_client *c)
{ {
unsigned char buf; unsigned char buf;
int i,rc; int i, rc;
for (i = 0; i < ARRAY_SIZE(i2c_devs); i++) { for (i = 0; i < ARRAY_SIZE(i2c_devs); i++) {
c->addr = i; c->addr = i;
rc = i2c_master_recv(c,&buf,0); rc = i2c_master_recv(c, &buf, 0);
if (rc < 0) if (rc < 0)
continue; continue;
pr_info("i2c scan: found device @ 0x%x [%s]\n", pr_info("i2c scan: found device @ 0x%x [%s]\n",
...@@ -139,14 +134,14 @@ static void do_i2c_scan(const char *name, struct i2c_client *c) ...@@ -139,14 +134,14 @@ static void do_i2c_scan(const char *name, struct i2c_client *c)
int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci) int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci)
{ {
/* Prevents usage of invalid delay values */ /* Prevents usage of invalid delay values */
if (i2c_udelay<5) if (i2c_udelay < 5)
i2c_udelay=5; i2c_udelay = 5;
core->i2c_algo = cx8800_i2c_algo_template; core->i2c_algo = cx8800_i2c_algo_template;
core->i2c_adap.dev.parent = &pci->dev; core->i2c_adap.dev.parent = &pci->dev;
strlcpy(core->i2c_adap.name,core->name,sizeof(core->i2c_adap.name)); strlcpy(core->i2c_adap.name, core->name, sizeof(core->i2c_adap.name));
core->i2c_adap.owner = THIS_MODULE; core->i2c_adap.owner = THIS_MODULE;
core->i2c_algo.udelay = i2c_udelay; core->i2c_algo.udelay = i2c_udelay;
core->i2c_algo.data = core; core->i2c_algo.data = core;
...@@ -155,18 +150,22 @@ int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci) ...@@ -155,18 +150,22 @@ int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci)
core->i2c_client.adapter = &core->i2c_adap; core->i2c_client.adapter = &core->i2c_adap;
strlcpy(core->i2c_client.name, "cx88xx internal", I2C_NAME_SIZE); strlcpy(core->i2c_client.name, "cx88xx internal", I2C_NAME_SIZE);
cx8800_bit_setscl(core,1); cx8800_bit_setscl(core, 1);
cx8800_bit_setsda(core,1); cx8800_bit_setsda(core, 1);
core->i2c_rc = i2c_bit_add_bus(&core->i2c_adap); core->i2c_rc = i2c_bit_add_bus(&core->i2c_adap);
if (0 == core->i2c_rc) { if (core->i2c_rc == 0) {
static u8 tuner_data[] = static u8 tuner_data[] = {
{ 0x0b, 0xdc, 0x86, 0x52 }; 0x0b, 0xdc, 0x86, 0x52 };
static struct i2c_msg tuner_msg = static struct i2c_msg tuner_msg = {
{ .flags = 0, .addr = 0xc2 >> 1, .buf = tuner_data, .len = 4 }; .flags = 0,
.addr = 0xc2 >> 1,
.buf = tuner_data,
.len = 4
};
dprintk(1, "i2c register ok\n"); dprintk(1, "i2c register ok\n");
switch( core->boardnr ) { switch (core->boardnr) {
case CX88_BOARD_HAUPPAUGE_HVR1300: case CX88_BOARD_HAUPPAUGE_HVR1300:
case CX88_BOARD_HAUPPAUGE_HVR3000: case CX88_BOARD_HAUPPAUGE_HVR3000:
case CX88_BOARD_HAUPPAUGE_HVR4000: case CX88_BOARD_HAUPPAUGE_HVR4000:
...@@ -177,7 +176,7 @@ int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci) ...@@ -177,7 +176,7 @@ int cx88_i2c_init(struct cx88_core *core, struct pci_dev *pci)
break; break;
} }
if (i2c_scan) if (i2c_scan)
do_i2c_scan(core->name,&core->i2c_client); do_i2c_scan(core->name, &core->i2c_client);
} else } else
pr_err("i2c register FAILED\n"); pr_err("i2c register FAILED\n");
......
...@@ -16,10 +16,6 @@ ...@@ -16,10 +16,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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include "cx88.h" #include "cx88.h"
...@@ -58,7 +54,7 @@ struct cx88_IR { ...@@ -58,7 +54,7 @@ struct cx88_IR {
u32 mask_keyup; u32 mask_keyup;
}; };
static unsigned ir_samplerate = 4; static unsigned int ir_samplerate = 4;
module_param(ir_samplerate, uint, 0444); module_param(ir_samplerate, uint, 0444);
MODULE_PARM_DESC(ir_samplerate, "IR samplerate in kHz, 1 - 20, default 4"); MODULE_PARM_DESC(ir_samplerate, "IR samplerate in kHz, 1 - 20, default 4");
...@@ -67,10 +63,10 @@ module_param(ir_debug, int, 0644); /* debug level [IR] */ ...@@ -67,10 +63,10 @@ module_param(ir_debug, int, 0644); /* debug level [IR] */
MODULE_PARM_DESC(ir_debug, "enable debug messages [IR]"); MODULE_PARM_DESC(ir_debug, "enable debug messages [IR]");
#define ir_dprintk(fmt, arg...) if (ir_debug) \ #define ir_dprintk(fmt, arg...) if (ir_debug) \
printk(KERN_DEBUG "%s IR: " fmt , ir->core->name , ##arg) printk(KERN_DEBUG "%s IR: " fmt, ir->core->name, ##arg)
#define dprintk(fmt, arg...) if (ir_debug) \ #define dprintk(fmt, arg...) if (ir_debug) \
printk(KERN_DEBUG "cx88 IR: " fmt , ##arg) printk(KERN_DEBUG "cx88 IR: " fmt, ##arg)
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
...@@ -97,7 +93,7 @@ static void cx88_ir_handle_key(struct cx88_IR *ir) ...@@ -97,7 +93,7 @@ static void cx88_ir_handle_key(struct cx88_IR *ir)
auxgpio = cx_read(MO_GP1_IO); auxgpio = cx_read(MO_GP1_IO);
/* Take out the parity part */ /* Take out the parity part */
gpio=(gpio & 0x7fd) + (auxgpio & 0xef); gpio = (gpio & 0x7fd) + (auxgpio & 0xef);
break; break;
case CX88_BOARD_WINFAST_DTV1000: case CX88_BOARD_WINFAST_DTV1000:
case CX88_BOARD_WINFAST_DTV1800H: case CX88_BOARD_WINFAST_DTV1800H:
...@@ -512,7 +508,7 @@ int cx88_ir_fini(struct cx88_core *core) ...@@ -512,7 +508,7 @@ int cx88_ir_fini(struct cx88_core *core)
struct cx88_IR *ir = core->ir; struct cx88_IR *ir = core->ir;
/* skip detach on non attached boards */ /* skip detach on non attached boards */
if (NULL == ir) if (ir == NULL)
return 0; return 0;
cx88_ir_stop(core); cx88_ir_stop(core);
...@@ -530,7 +526,7 @@ void cx88_ir_irq(struct cx88_core *core) ...@@ -530,7 +526,7 @@ void cx88_ir_irq(struct cx88_core *core)
{ {
struct cx88_IR *ir = core->ir; struct cx88_IR *ir = core->ir;
u32 samples; u32 samples;
unsigned todo, bits; unsigned int todo, bits;
struct ir_raw_event ev; struct ir_raw_event ev;
if (!ir || !ir->sampling) if (!ir || !ir->sampling)
...@@ -602,7 +598,7 @@ void cx88_i2c_init_ir(struct cx88_core *core) ...@@ -602,7 +598,7 @@ void cx88_i2c_init_ir(struct cx88_core *core)
const unsigned short *addr_list = default_addr_list; const unsigned short *addr_list = default_addr_list;
const unsigned short *addrp; const unsigned short *addrp;
/* Instantiate the IR receiver device, if present */ /* Instantiate the IR receiver device, if present */
if (0 != core->i2c_rc) if (core->i2c_rc != 0)
return; return;
memset(&info, 0, sizeof(struct i2c_board_info)); memset(&info, 0, sizeof(struct i2c_board_info));
......
...@@ -42,8 +42,8 @@ MODULE_LICENSE("GPL"); ...@@ -42,8 +42,8 @@ MODULE_LICENSE("GPL");
MODULE_VERSION(CX88_VERSION); MODULE_VERSION(CX88_VERSION);
static unsigned int debug; static unsigned int debug;
module_param(debug,int,0644); module_param(debug, int, 0644);
MODULE_PARM_DESC(debug,"enable debug messages [mpeg]"); MODULE_PARM_DESC(debug, "enable debug messages [mpeg]");
#define dprintk(level, fmt, arg...) do { \ #define dprintk(level, fmt, arg...) do { \
if (debug + 1 > level) \ if (debug + 1 > level) \
...@@ -54,7 +54,7 @@ MODULE_PARM_DESC(debug,"enable debug messages [mpeg]"); ...@@ -54,7 +54,7 @@ MODULE_PARM_DESC(debug,"enable debug messages [mpeg]");
#if defined(CONFIG_MODULES) && defined(MODULE) #if defined(CONFIG_MODULES) && defined(MODULE)
static void request_module_async(struct work_struct *work) static void request_module_async(struct work_struct *work)
{ {
struct cx8802_dev *dev=container_of(work, struct cx8802_dev, request_module_wk); struct cx8802_dev *dev = container_of(work, struct cx8802_dev, request_module_wk);
if (dev->core->board.mpeg & CX88_MPEG_DVB) if (dev->core->board.mpeg & CX88_MPEG_DVB)
request_module("cx88-dvb"); request_module("cx88-dvb");
...@@ -103,8 +103,8 @@ int cx8802_start_dma(struct cx8802_dev *dev, ...@@ -103,8 +103,8 @@ int cx8802_start_dma(struct cx8802_dev *dev,
dprintk(1, "core->active_type_id = 0x%08x\n", core->active_type_id); dprintk(1, "core->active_type_id = 0x%08x\n", core->active_type_id);
if ( (core->active_type_id == CX88_MPEG_DVB) && if ((core->active_type_id == CX88_MPEG_DVB) &&
(core->board.mpeg & CX88_MPEG_DVB) ) { (core->board.mpeg & CX88_MPEG_DVB)) {
dprintk(1, "cx8802_start_dma doing .dvb\n"); dprintk(1, "cx8802_start_dma doing .dvb\n");
/* negedge driven & software reset */ /* negedge driven & software reset */
...@@ -148,8 +148,8 @@ int cx8802_start_dma(struct cx8802_dev *dev, ...@@ -148,8 +148,8 @@ int cx8802_start_dma(struct cx8802_dev *dev,
} }
cx_write(TS_GEN_CNTRL, dev->ts_gen_cntrl); cx_write(TS_GEN_CNTRL, dev->ts_gen_cntrl);
udelay(100); udelay(100);
} else if ( (core->active_type_id == CX88_MPEG_BLACKBIRD) && } else if ((core->active_type_id == CX88_MPEG_BLACKBIRD) &&
(core->board.mpeg & CX88_MPEG_BLACKBIRD) ) { (core->board.mpeg & CX88_MPEG_BLACKBIRD)) {
dprintk(1, "cx8802_start_dma doing .blackbird\n"); dprintk(1, "cx8802_start_dma doing .blackbird\n");
cx_write(MO_PINMUX_IO, 0x88); /* enable MPEG parallel IO */ cx_write(MO_PINMUX_IO, 0x88); /* enable MPEG parallel IO */
...@@ -185,6 +185,7 @@ int cx8802_start_dma(struct cx8802_dev *dev, ...@@ -185,6 +185,7 @@ int cx8802_start_dma(struct cx8802_dev *dev,
static int cx8802_stop_dma(struct cx8802_dev *dev) static int cx8802_stop_dma(struct cx8802_dev *dev)
{ {
struct cx88_core *core = dev->core; struct cx88_core *core = dev->core;
dprintk(1, "\n"); dprintk(1, "\n");
/* stop dma */ /* stop dma */
...@@ -209,7 +210,7 @@ static int cx8802_restart_queue(struct cx8802_dev *dev, ...@@ -209,7 +210,7 @@ static int cx8802_restart_queue(struct cx8802_dev *dev,
return 0; return 0;
buf = list_entry(q->active.next, struct cx88_buffer, list); buf = list_entry(q->active.next, struct cx88_buffer, list);
dprintk(2,"restart_queue [%p/%d]: restart dma\n", dprintk(2, "restart_queue [%p/%d]: restart dma\n",
buf, buf->vb.vb2_buf.index); buf, buf->vb.vb2_buf.index);
cx8802_start_dma(dev, q, buf); cx8802_start_dma(dev, q, buf);
return 0; return 0;
...@@ -254,7 +255,7 @@ void cx8802_buf_queue(struct cx8802_dev *dev, struct cx88_buffer *buf) ...@@ -254,7 +255,7 @@ void cx8802_buf_queue(struct cx8802_dev *dev, struct cx88_buffer *buf)
if (list_empty(&cx88q->active)) { if (list_empty(&cx88q->active)) {
dprintk(1, "queue is empty - first active\n"); dprintk(1, "queue is empty - first active\n");
list_add_tail(&buf->list, &cx88q->active); list_add_tail(&buf->list, &cx88q->active);
dprintk(1,"[%p/%d] %s - first active\n", dprintk(1, "[%p/%d] %s - first active\n",
buf, buf->vb.vb2_buf.index, __func__); buf, buf->vb.vb2_buf.index, __func__);
} else { } else {
...@@ -276,13 +277,13 @@ static void do_cancel_buffers(struct cx8802_dev *dev) ...@@ -276,13 +277,13 @@ static void do_cancel_buffers(struct cx8802_dev *dev)
struct cx88_buffer *buf; struct cx88_buffer *buf;
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&dev->slock,flags); spin_lock_irqsave(&dev->slock, flags);
while (!list_empty(&q->active)) { while (!list_empty(&q->active)) {
buf = list_entry(q->active.next, struct cx88_buffer, list); buf = list_entry(q->active.next, struct cx88_buffer, list);
list_del(&buf->list); list_del(&buf->list);
vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR);
} }
spin_unlock_irqrestore(&dev->slock,flags); spin_unlock_irqrestore(&dev->slock, flags);
} }
void cx8802_cancel_buffers(struct cx8802_dev *dev) void cx8802_cancel_buffers(struct cx8802_dev *dev)
...@@ -292,7 +293,7 @@ void cx8802_cancel_buffers(struct cx8802_dev *dev) ...@@ -292,7 +293,7 @@ void cx8802_cancel_buffers(struct cx8802_dev *dev)
do_cancel_buffers(dev); do_cancel_buffers(dev);
} }
static const char * cx88_mpeg_irqs[32] = { static const char *cx88_mpeg_irqs[32] = {
"ts_risci1", NULL, NULL, NULL, "ts_risci1", NULL, NULL, NULL,
"ts_risci2", NULL, NULL, NULL, "ts_risci2", NULL, NULL, NULL,
"ts_oflow", NULL, NULL, NULL, "ts_oflow", NULL, NULL, NULL,
...@@ -356,7 +357,7 @@ static irqreturn_t cx8802_irq(int irq, void *dev_id) ...@@ -356,7 +357,7 @@ static irqreturn_t cx8802_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_TSINT); (core->pci_irqmask | PCI_INT_TSINT);
if (0 == status) if (status == 0)
goto out; goto out;
dprintk(1, "cx8802_irq\n"); dprintk(1, "cx8802_irq\n");
dprintk(1, " loop: %d/%d\n", loop, MAX_IRQ_LOOP); dprintk(1, " loop: %d/%d\n", loop, MAX_IRQ_LOOP);
...@@ -365,14 +366,14 @@ static irqreturn_t cx8802_irq(int irq, void *dev_id) ...@@ -365,14 +366,14 @@ static irqreturn_t cx8802_irq(int irq, void *dev_id)
cx_write(MO_PCI_INTSTAT, status); cx_write(MO_PCI_INTSTAT, status);
if (status & core->pci_irqmask) if (status & core->pci_irqmask)
cx88_core_irq(core,status); cx88_core_irq(core, status);
if (status & PCI_INT_TSINT) if (status & PCI_INT_TSINT)
cx8802_mpeg_irq(dev); cx8802_mpeg_irq(dev);
} }
if (MAX_IRQ_LOOP == loop) { if (loop == MAX_IRQ_LOOP) {
dprintk(0, "clearing mask\n"); dprintk(0, "clearing mask\n");
pr_warn("irq loop -- clearing mask\n"); pr_warn("irq loop -- clearing mask\n");
cx_write(MO_PCI_INTMSK,0); cx_write(MO_PCI_INTMSK, 0);
} }
out: out:
...@@ -388,7 +389,7 @@ static int cx8802_init_common(struct cx8802_dev *dev) ...@@ -388,7 +389,7 @@ static int cx8802_init_common(struct cx8802_dev *dev)
if (pci_enable_device(dev->pci)) if (pci_enable_device(dev->pci))
return -EIO; return -EIO;
pci_set_master(dev->pci); pci_set_master(dev->pci);
err = pci_set_dma_mask(dev->pci,DMA_BIT_MASK(32)); err = pci_set_dma_mask(dev->pci, DMA_BIT_MASK(32));
if (err) { if (err) {
pr_err("Oops: no 32bit PCI DMA ???\n"); pr_err("Oops: no 32bit PCI DMA ???\n");
return -EIO; return -EIO;
...@@ -417,7 +418,7 @@ static int cx8802_init_common(struct cx8802_dev *dev) ...@@ -417,7 +418,7 @@ static int cx8802_init_common(struct cx8802_dev *dev)
cx_set(MO_PCI_INTMSK, core->pci_irqmask); cx_set(MO_PCI_INTMSK, core->pci_irqmask);
/* everything worked */ /* everything worked */
pci_set_drvdata(dev->pci,dev); pci_set_drvdata(dev->pci, dev);
return 0; return 0;
} }
...@@ -451,7 +452,7 @@ static int cx8802_suspend_common(struct pci_dev *pci_dev, pm_message_t state) ...@@ -451,7 +452,7 @@ static int cx8802_suspend_common(struct pci_dev *pci_dev, pm_message_t state)
cx88_shutdown(dev->core); cx88_shutdown(dev->core);
pci_save_state(pci_dev); pci_save_state(pci_dev);
if (0 != pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state))) { if (pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state)) != 0) {
pci_disable_device(pci_dev); pci_disable_device(pci_dev);
dev->state.disabled = 1; dev->state.disabled = 1;
} }
...@@ -465,14 +466,14 @@ static int cx8802_resume_common(struct pci_dev *pci_dev) ...@@ -465,14 +466,14 @@ static int cx8802_resume_common(struct pci_dev *pci_dev)
int err; int err;
if (dev->state.disabled) { if (dev->state.disabled) {
err=pci_enable_device(pci_dev); err = pci_enable_device(pci_dev);
if (err) { if (err) {
pr_err("can't enable device\n"); pr_err("can't enable device\n");
return err; return err;
} }
dev->state.disabled = 0; dev->state.disabled = 0;
} }
err=pci_set_power_state(pci_dev, PCI_D0); err = pci_set_power_state(pci_dev, PCI_D0);
if (err) { if (err) {
pr_err("can't enable device\n"); pr_err("can't enable device\n");
pci_disable_device(pci_dev); pci_disable_device(pci_dev);
...@@ -489,14 +490,14 @@ static int cx8802_resume_common(struct pci_dev *pci_dev) ...@@ -489,14 +490,14 @@ static int cx8802_resume_common(struct pci_dev *pci_dev)
spin_lock_irqsave(&dev->slock, flags); spin_lock_irqsave(&dev->slock, flags);
if (!list_empty(&dev->mpegq.active)) { if (!list_empty(&dev->mpegq.active)) {
pr_info("resume mpeg\n"); pr_info("resume mpeg\n");
cx8802_restart_queue(dev,&dev->mpegq); cx8802_restart_queue(dev, &dev->mpegq);
} }
spin_unlock_irqrestore(&dev->slock, flags); spin_unlock_irqrestore(&dev->slock, flags);
return 0; return 0;
} }
struct cx8802_driver * cx8802_get_driver(struct cx8802_dev *dev, enum cx88_board_type btype) struct cx8802_driver *cx8802_get_driver(struct cx8802_dev *dev, enum cx88_board_type btype)
{ {
struct cx8802_driver *d; struct cx8802_driver *d;
...@@ -613,7 +614,7 @@ int cx8802_register_driver(struct cx8802_driver *drv) ...@@ -613,7 +614,7 @@ int cx8802_register_driver(struct cx8802_driver *drv)
dev->core->boardnr); dev->core->boardnr);
/* Bring up a new struct for each driver instance */ /* Bring up a new struct for each driver instance */
driver = kzalloc(sizeof(*drv),GFP_KERNEL); driver = kzalloc(sizeof(*drv), GFP_KERNEL);
if (driver == NULL) { if (driver == NULL) {
err = -ENOMEM; err = -ENOMEM;
goto out; goto out;
...@@ -696,7 +697,7 @@ static int cx8802_probe(struct pci_dev *pci_dev, ...@@ -696,7 +697,7 @@ static int cx8802_probe(struct pci_dev *pci_dev,
/* general setup */ /* general setup */
core = cx88_core_get(pci_dev); core = cx88_core_get(pci_dev);
if (NULL == core) if (core == NULL)
return -EINVAL; return -EINVAL;
pr_info("cx2388x 8802 Driver Manager\n"); pr_info("cx2388x 8802 Driver Manager\n");
...@@ -706,8 +707,8 @@ static int cx8802_probe(struct pci_dev *pci_dev, ...@@ -706,8 +707,8 @@ static int cx8802_probe(struct pci_dev *pci_dev,
goto fail_core; goto fail_core;
err = -ENOMEM; err = -ENOMEM;
dev = kzalloc(sizeof(*dev),GFP_KERNEL); dev = kzalloc(sizeof(*dev), GFP_KERNEL);
if (NULL == dev) if (dev == NULL)
goto fail_core; goto fail_core;
dev->pci = pci_dev; dev->pci = pci_dev;
dev->core = core; dev->core = core;
...@@ -721,7 +722,7 @@ static int cx8802_probe(struct pci_dev *pci_dev, ...@@ -721,7 +722,7 @@ static int cx8802_probe(struct pci_dev *pci_dev,
INIT_LIST_HEAD(&dev->drvlist); INIT_LIST_HEAD(&dev->drvlist);
mutex_lock(&cx8802_mutex); mutex_lock(&cx8802_mutex);
list_add_tail(&dev->devlist,&cx8802_devlist); list_add_tail(&dev->devlist, &cx8802_devlist);
mutex_unlock(&cx8802_mutex); mutex_unlock(&cx8802_mutex);
/* now autoload cx88-dvb or cx88-blackbird */ /* now autoload cx88-dvb or cx88-blackbird */
...@@ -732,7 +733,7 @@ static int cx8802_probe(struct pci_dev *pci_dev, ...@@ -732,7 +733,7 @@ static int cx8802_probe(struct pci_dev *pci_dev,
kfree(dev); kfree(dev);
fail_core: fail_core:
core->dvbdev = NULL; core->dvbdev = NULL;
cx88_core_put(core,pci_dev); cx88_core_put(core, pci_dev);
return err; return err;
} }
...@@ -772,7 +773,7 @@ static void cx8802_remove(struct pci_dev *pci_dev) ...@@ -772,7 +773,7 @@ static void cx8802_remove(struct pci_dev *pci_dev)
/* common */ /* common */
cx8802_fini_common(dev); cx8802_fini_common(dev);
cx88_core_put(dev->core,dev->pci); cx88_core_put(dev->core, dev->pci);
kfree(dev); kfree(dev);
} }
...@@ -782,7 +783,7 @@ static const struct pci_device_id cx8802_pci_tbl[] = { ...@@ -782,7 +783,7 @@ static const struct pci_device_id cx8802_pci_tbl[] = {
.device = 0x8802, .device = 0x8802,
.subvendor = PCI_ANY_ID, .subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID, .subdevice = PCI_ANY_ID,
},{ }, {
/* --- end of list --- */ /* --- end of list --- */
} }
}; };
......
...@@ -576,7 +576,7 @@ ...@@ -576,7 +576,7 @@
#define RISC_CNT_INC 0x00010000 #define RISC_CNT_INC 0x00010000
#define RISC_CNT_RSVR 0x00020000 #define RISC_CNT_RSVR 0x00020000
#define RISC_CNT_RESET 0x00030000 #define RISC_CNT_RESET 0x00030000
#define RISC_JMP_SRP 0x01 #define RISC_JMP_SRP 0x01
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
...@@ -822,15 +822,4 @@ ...@@ -822,15 +822,4 @@
#define DEFAULT_SAT_U_NTSC 0x7F #define DEFAULT_SAT_U_NTSC 0x7F
#define DEFAULT_SAT_V_NTSC 0x5A #define DEFAULT_SAT_V_NTSC 0x5A
typedef enum
{
SOURCE_TUNER = 0,
SOURCE_COMPOSITE,
SOURCE_SVIDEO,
SOURCE_OTHER1,
SOURCE_OTHER2,
SOURCE_COMPVIASVIDEO,
SOURCE_CCIR656
} VIDEOSOURCETYPE;
#endif /* _CX88_REG_H_ */ #endif /* _CX88_REG_H_ */
/* /*
* cx88x-audio.c - Conexant CX23880/23881 audio downstream driver driver
cx88x-audio.c - Conexant CX23880/23881 audio downstream driver driver *
* (c) 2001 Michael Eskin, Tom Zakrajsek [Windows version]
(c) 2001 Michael Eskin, Tom Zakrajsek [Windows version] * (c) 2002 Yurij Sysoev <yurij@naturesoft.net>
(c) 2002 Yurij Sysoev <yurij@naturesoft.net> * (c) 2003 Gerd Knorr <kraxel@bytesex.org>
(c) 2003 Gerd Knorr <kraxel@bytesex.org> *
* -----------------------------------------------------------------------
----------------------------------------------------------------------- *
* Lot of voodoo here. Even the data sheet doesn't help to
Lot of voodoo here. Even the data sheet doesn't help to * understand what is going on here, the documentation for the audio
understand what is going on here, the documentation for the audio * part of the cx2388x chip is *very* bad.
part of the cx2388x chip is *very* bad. *
* Some of this comes from party done linux driver sources I got from
Some of this comes from party done linux driver sources I got from * [undocumented].
[undocumented]. *
* Some comes from the dscaler sources, one of the dscaler driver guy works
Some comes from the dscaler sources, one of the dscaler driver guy works * for Conexant ...
for Conexant ... *
* -----------------------------------------------------------------------
----------------------------------------------------------------------- *
* This program is free software; you can redistribute it and/or modify
This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by
it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or
the Free Software Foundation; either version 2 of the License, or * (at your option) any later version.
(at your option) any later version. *
* This program is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful, * 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"
...@@ -57,11 +52,11 @@ module_param(audio_debug, int, 0644); ...@@ -57,11 +52,11 @@ module_param(audio_debug, int, 0644);
MODULE_PARM_DESC(audio_debug, "enable debug messages [audio]"); MODULE_PARM_DESC(audio_debug, "enable debug messages [audio]");
static unsigned int always_analog; static unsigned int always_analog;
module_param(always_analog,int,0644); module_param(always_analog, int, 0644);
MODULE_PARM_DESC(always_analog,"force analog audio out"); MODULE_PARM_DESC(always_analog, "force analog audio out");
static unsigned int radio_deemphasis; static unsigned int radio_deemphasis;
module_param(radio_deemphasis,int,0644); module_param(radio_deemphasis, int, 0644);
MODULE_PARM_DESC(radio_deemphasis, "Radio deemphasis time constant, 0=None, 1=50us (elsewhere), 2=75us (USA)"); MODULE_PARM_DESC(radio_deemphasis, "Radio deemphasis time constant, 0=None, 1=50us (elsewhere), 2=75us (USA)");
#define dprintk(fmt, arg...) do { \ #define dprintk(fmt, arg...) do { \
...@@ -350,7 +345,7 @@ static void set_audio_standard_NICAM(struct cx88_core *core, u32 mode) ...@@ -350,7 +345,7 @@ static void set_audio_standard_NICAM(struct cx88_core *core, u32 mode)
{ /* end of list */ }, { /* end of list */ },
}; };
set_audio_start(core,SEL_NICAM); set_audio_start(core, SEL_NICAM);
switch (core->tvaudio) { switch (core->tvaudio) {
case WW_L: case WW_L:
dprintk("%s SECAM-L NICAM (status: devel)\n", __func__); dprintk("%s SECAM-L NICAM (status: devel)\n", __func__);
...@@ -770,7 +765,7 @@ void cx88_set_tvaudio(struct cx88_core *core) ...@@ -770,7 +765,7 @@ void cx88_set_tvaudio(struct cx88_core *core)
/* set nicam mode - otherwise /* set nicam mode - otherwise
AUD_NICAM_STATUS2 contains wrong values */ AUD_NICAM_STATUS2 contains wrong values */
set_audio_standard_NICAM(core, EN_NICAM_AUTO_STEREO); set_audio_standard_NICAM(core, EN_NICAM_AUTO_STEREO);
if (0 == cx88_detect_nicam(core)) { if (cx88_detect_nicam(core) == 0) {
/* fall back to fm / am mono */ /* fall back to fm / am mono */
set_audio_standard_A2(core, EN_A2_FORCE_MONO1); set_audio_standard_A2(core, EN_A2_FORCE_MONO1);
core->audiomode_current = V4L2_TUNER_MODE_MONO; core->audiomode_current = V4L2_TUNER_MODE_MONO;
...@@ -869,11 +864,11 @@ void cx88_get_stereo(struct cx88_core *core, struct v4l2_tuner *t) ...@@ -869,11 +864,11 @@ void cx88_get_stereo(struct cx88_core *core, struct v4l2_tuner *t)
} }
/* If software stereo detection is not supported... */ /* If software stereo detection is not supported... */
if (UNSET == t->rxsubchans) { if (t->rxsubchans == UNSET) {
t->rxsubchans = V4L2_TUNER_SUB_MONO; t->rxsubchans = V4L2_TUNER_SUB_MONO;
/* If the hardware itself detected stereo, also return /* If the hardware itself detected stereo, also return
stereo as an available subchannel */ stereo as an available subchannel */
if (V4L2_TUNER_MODE_STEREO == t->audmode) if (t->audmode == V4L2_TUNER_MODE_STEREO)
t->rxsubchans |= V4L2_TUNER_SUB_STEREO; t->rxsubchans |= V4L2_TUNER_SUB_STEREO;
} }
return; return;
...@@ -887,7 +882,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual) ...@@ -887,7 +882,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual)
if (manual) { if (manual) {
core->audiomode_manual = mode; core->audiomode_manual = mode;
} else { } else {
if (UNSET != core->audiomode_manual) if (core->audiomode_manual != UNSET)
return; return;
} }
core->audiomode_current = mode; core->audiomode_current = mode;
...@@ -915,7 +910,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual) ...@@ -915,7 +910,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual)
case WW_M: case WW_M:
case WW_I: case WW_I:
case WW_L: case WW_L:
if (1 == core->use_nicam) { if (core->use_nicam == 1) {
switch (mode) { switch (mode) {
case V4L2_TUNER_MODE_MONO: case V4L2_TUNER_MODE_MONO:
case V4L2_TUNER_MODE_LANG1: case V4L2_TUNER_MODE_LANG1:
...@@ -975,7 +970,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual) ...@@ -975,7 +970,7 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual)
break; break;
} }
if (UNSET != ctl) { if (ctl != UNSET) {
dprintk("cx88_set_stereo: mask 0x%x, ctl 0x%x [status=0x%x,ctl=0x%x,vol=0x%x]\n", dprintk("cx88_set_stereo: mask 0x%x, ctl 0x%x [status=0x%x,ctl=0x%x,vol=0x%x]\n",
mask, ctl, cx_read(AUD_STATUS), mask, ctl, cx_read(AUD_STATUS),
cx_read(AUD_CTL), cx_sread(SHADOW_AUD_VOL_CTL)); cx_read(AUD_CTL), cx_sread(SHADOW_AUD_VOL_CTL));
...@@ -1011,7 +1006,7 @@ int cx88_audio_thread(void *data) ...@@ -1011,7 +1006,7 @@ int cx88_audio_thread(void *data)
memset(&t, 0, sizeof(t)); memset(&t, 0, sizeof(t));
cx88_get_stereo(core, &t); cx88_get_stereo(core, &t);
if (UNSET != core->audiomode_manual) if (core->audiomode_manual != UNSET)
/* manually set, don't do anything. */ /* manually set, don't do anything. */
continue; continue;
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
#include <linux/init.h> #include <linux/init.h>
static unsigned int vbi_debug; static unsigned int vbi_debug;
module_param(vbi_debug,int,0644); module_param(vbi_debug, int, 0644);
MODULE_PARM_DESC(vbi_debug,"enable debug messages [vbi]"); MODULE_PARM_DESC(vbi_debug, "enable debug messages [vbi]");
#define dprintk(level, fmt, arg...) do { \ #define dprintk(level, fmt, arg...) do { \
if (vbi_debug >= level) \ if (vbi_debug >= level) \
...@@ -19,7 +19,7 @@ MODULE_PARM_DESC(vbi_debug,"enable debug messages [vbi]"); ...@@ -19,7 +19,7 @@ MODULE_PARM_DESC(vbi_debug,"enable debug messages [vbi]");
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
int cx8800_vbi_fmt (struct file *file, void *priv, int cx8800_vbi_fmt(struct file *file, void *priv,
struct v4l2_format *f) struct v4l2_format *f)
{ {
struct cx8800_dev *dev = video_drvdata(file); struct cx8800_dev *dev = video_drvdata(file);
...@@ -57,9 +57,9 @@ static int cx8800_start_vbi_dma(struct cx8800_dev *dev, ...@@ -57,9 +57,9 @@ static int cx8800_start_vbi_dma(struct cx8800_dev *dev,
cx88_sram_channel_setup(dev->core, &cx88_sram_channels[SRAM_CH24], cx88_sram_channel_setup(dev->core, &cx88_sram_channels[SRAM_CH24],
VBI_LINE_LENGTH, buf->risc.dma); VBI_LINE_LENGTH, buf->risc.dma);
cx_write(MO_VBOS_CONTROL, ( (1 << 18) | // comb filter delay fixup cx_write(MO_VBOS_CONTROL, ((1 << 18) | // comb filter delay fixup
(1 << 15) | // enable vbi capture (1 << 15) | // enable vbi capture
(1 << 11) )); (1 << 11)));
/* reset counter */ /* reset counter */
cx_write(MO_VBI_GPCNTRL, GP_COUNT_CONTROL_RESET); cx_write(MO_VBI_GPCNTRL, GP_COUNT_CONTROL_RESET);
...@@ -70,7 +70,7 @@ static int cx8800_start_vbi_dma(struct cx8800_dev *dev, ...@@ -70,7 +70,7 @@ static int cx8800_start_vbi_dma(struct cx8800_dev *dev,
cx_set(MO_VID_INTMSK, 0x0f0088); cx_set(MO_VID_INTMSK, 0x0f0088);
/* enable capture */ /* enable capture */
cx_set(VID_CAPTURE_CONTROL,0x18); cx_set(VID_CAPTURE_CONTROL, 0x18);
/* start dma */ /* start dma */
cx_set(MO_DEV_CNTRL2, (1<<5)); cx_set(MO_DEV_CNTRL2, (1<<5));
...@@ -87,7 +87,7 @@ void cx8800_stop_vbi_dma(struct cx8800_dev *dev) ...@@ -87,7 +87,7 @@ void cx8800_stop_vbi_dma(struct cx8800_dev *dev)
cx_clear(MO_VID_DMACNTRL, 0x88); cx_clear(MO_VID_DMACNTRL, 0x88);
/* disable capture */ /* disable capture */
cx_clear(VID_CAPTURE_CONTROL,0x18); cx_clear(VID_CAPTURE_CONTROL, 0x18);
/* disable irqs */ /* disable irqs */
cx_clear(MO_PCI_INTMSK, PCI_INT_VIDINT); cx_clear(MO_PCI_INTMSK, PCI_INT_VIDINT);
...@@ -103,7 +103,7 @@ int cx8800_restart_vbi_queue(struct cx8800_dev *dev, ...@@ -103,7 +103,7 @@ int cx8800_restart_vbi_queue(struct cx8800_dev *dev,
return 0; return 0;
buf = list_entry(q->active.next, struct cx88_buffer, list); buf = list_entry(q->active.next, struct cx88_buffer, list);
dprintk(2,"restart_queue [%p/%d]: restart dma\n", dprintk(2, "restart_queue [%p/%d]: restart dma\n",
buf, buf->vb.vb2_buf.index); buf, buf->vb.vb2_buf.index);
cx8800_start_vbi_dma(dev, q, buf); cx8800_start_vbi_dma(dev, q, buf);
return 0; return 0;
...@@ -179,7 +179,7 @@ static void buffer_queue(struct vb2_buffer *vb) ...@@ -179,7 +179,7 @@ static void buffer_queue(struct vb2_buffer *vb)
if (list_empty(&q->active)) { if (list_empty(&q->active)) {
list_add_tail(&buf->list, &q->active); list_add_tail(&buf->list, &q->active);
cx8800_start_vbi_dma(dev, q, buf); cx8800_start_vbi_dma(dev, q, buf);
dprintk(2,"[%p/%d] vbi_queue - first active\n", dprintk(2, "[%p/%d] vbi_queue - first active\n",
buf, buf->vb.vb2_buf.index); buf, buf->vb.vb2_buf.index);
} else { } else {
...@@ -187,7 +187,7 @@ static void buffer_queue(struct vb2_buffer *vb) ...@@ -187,7 +187,7 @@ static void buffer_queue(struct vb2_buffer *vb)
prev = list_entry(q->active.prev, struct cx88_buffer, list); prev = list_entry(q->active.prev, struct cx88_buffer, list);
list_add_tail(&buf->list, &q->active); list_add_tail(&buf->list, &q->active);
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma); prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
dprintk(2,"[%p/%d] buffer_queue - append to active\n", dprintk(2, "[%p/%d] buffer_queue - append to active\n",
buf, buf->vb.vb2_buf.index); buf, buf->vb.vb2_buf.index);
} }
} }
......
This diff is collapsed.
/* /*
* cx88-vp3054-i2c.c -- support for the secondary I2C bus of the
cx88-vp3054-i2c.c -- support for the secondary I2C bus of the * DNTV Live! DVB-T Pro (VP-3054), wired as:
DNTV Live! DVB-T Pro (VP-3054), wired as: * GPIO[0] -> SCL, GPIO[1] -> SDA
GPIO[0] -> SCL, GPIO[1] -> SDA *
* (c) 2005 Chris Pascoe <c.pascoe@itee.uq.edu.au>
(c) 2005 Chris Pascoe <c.pascoe@itee.uq.edu.au> *
* This program is free software; you can redistribute it and/or modify
This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by
it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or
the Free Software Foundation; either version 2 of the License, or * (at your option) any later version.
(at your option) any later version. *
* This program is distributed in the hope that it will be useful,
This program is distributed in the hope that it will be useful, * 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"
#include "cx88-vp3054-i2c.h" #include "cx88-vp3054-i2c.h"
...@@ -128,11 +122,11 @@ int vp3054_i2c_probe(struct cx8802_dev *dev) ...@@ -128,11 +122,11 @@ int vp3054_i2c_probe(struct cx8802_dev *dev)
i2c_set_adapdata(&vp3054_i2c->adap, dev); i2c_set_adapdata(&vp3054_i2c->adap, dev);
vp3054_i2c->adap.algo_data = &vp3054_i2c->algo; vp3054_i2c->adap.algo_data = &vp3054_i2c->algo;
vp3054_bit_setscl(dev,1); vp3054_bit_setscl(dev, 1);
vp3054_bit_setsda(dev,1); vp3054_bit_setsda(dev, 1);
rc = i2c_bit_add_bus(&vp3054_i2c->adap); rc = i2c_bit_add_bus(&vp3054_i2c->adap);
if (0 != rc) { if (rc != 0) {
pr_err("vp3054_i2c register FAILED\n"); pr_err("vp3054_i2c register FAILED\n");
kfree(dev->vp3054); kfree(dev->vp3054);
......
...@@ -13,10 +13,6 @@ ...@@ -13,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.
*/ */
#ifndef CX88_H #ifndef CX88_H
...@@ -58,7 +54,7 @@ ...@@ -58,7 +54,7 @@
/* defines and enums */ /* defines and enums */
/* Currently unsupported by the driver: PAL/H, NTSC/Kr, SECAM/LC */ /* Currently unsupported by the driver: PAL/H, NTSC/Kr, SECAM/LC */
#define CX88_NORMS (V4L2_STD_ALL \ #define CX88_NORMS (V4L2_STD_ALL \
& ~V4L2_STD_PAL_H \ & ~V4L2_STD_PAL_H \
& ~V4L2_STD_NTSC_M_KR \ & ~V4L2_STD_NTSC_M_KR \
& ~V4L2_STD_SECAM_LC) & ~V4L2_STD_SECAM_LC)
...@@ -366,12 +362,12 @@ struct cx88_core { ...@@ -366,12 +362,12 @@ struct cx88_core {
u32 i2c_state, i2c_rc; u32 i2c_state, i2c_rc;
/* config info -- analog */ /* config info -- analog */
struct v4l2_device v4l2_dev; struct v4l2_device v4l2_dev;
struct v4l2_ctrl_handler video_hdl; struct v4l2_ctrl_handler video_hdl;
struct v4l2_ctrl *chroma_agc; struct v4l2_ctrl *chroma_agc;
struct v4l2_ctrl_handler audio_hdl; struct v4l2_ctrl_handler audio_hdl;
struct v4l2_subdev *sd_wm8775; struct v4l2_subdev *sd_wm8775;
struct i2c_client *i2c_rtc; struct i2c_client *i2c_rtc;
unsigned int boardnr; unsigned int boardnr;
struct cx88_board board; struct cx88_board board;
...@@ -388,8 +384,8 @@ struct cx88_core { ...@@ -388,8 +384,8 @@ struct cx88_core {
/* state info */ /* state info */
struct task_struct *kthread; struct task_struct *kthread;
v4l2_std_id tvnorm; v4l2_std_id tvnorm;
unsigned width, height; unsigned int width, height;
unsigned field; unsigned int field;
enum cx88_tvaudio tvaudio; enum cx88_tvaudio tvaudio;
u32 audiomode_manual; u32 audiomode_manual;
u32 audiomode_current; u32 audiomode_current;
...@@ -489,7 +485,7 @@ struct cx8800_dev { ...@@ -489,7 +485,7 @@ struct cx8800_dev {
/* pci i/o */ /* pci i/o */
struct pci_dev *pci; struct pci_dev *pci;
unsigned char pci_rev,pci_lat; unsigned char pci_rev, pci_lat;
const struct cx8800_fmt *fmt; const struct cx8800_fmt *fmt;
...@@ -552,7 +548,7 @@ struct cx8802_dev { ...@@ -552,7 +548,7 @@ struct cx8802_dev {
/* pci i/o */ /* pci i/o */
struct pci_dev *pci; struct pci_dev *pci;
unsigned char pci_rev,pci_lat; unsigned char pci_rev, pci_lat;
/* dma queues */ /* dma queues */
struct cx88_dmaqueue mpegq; struct cx88_dmaqueue mpegq;
...@@ -594,23 +590,23 @@ struct cx8802_dev { ...@@ -594,23 +590,23 @@ struct cx8802_dev {
/* ----------------------------------------------------------- */ /* ----------------------------------------------------------- */
#define cx_read(reg) readl(core->lmmio + ((reg)>>2)) #define cx_read(reg) readl(core->lmmio + ((reg)>>2))
#define cx_write(reg,value) writel((value), core->lmmio + ((reg)>>2)) #define cx_write(reg, value) writel((value), core->lmmio + ((reg)>>2))
#define cx_writeb(reg,value) writeb((value), core->bmmio + (reg)) #define cx_writeb(reg, value) writeb((value), core->bmmio + (reg))
#define cx_andor(reg,mask,value) \ #define cx_andor(reg, mask, value) \
writel((readl(core->lmmio+((reg)>>2)) & ~(mask)) |\ writel((readl(core->lmmio+((reg)>>2)) & ~(mask)) |\
((value) & (mask)), core->lmmio+((reg)>>2)) ((value) & (mask)), core->lmmio+((reg)>>2))
#define cx_set(reg,bit) cx_andor((reg),(bit),(bit)) #define cx_set(reg, bit) cx_andor((reg), (bit), (bit))
#define cx_clear(reg,bit) cx_andor((reg),(bit),0) #define cx_clear(reg, bit) cx_andor((reg), (bit), 0)
#define cx_wait(d) { if (need_resched()) schedule(); else udelay(d); } #define cx_wait(d) { if (need_resched()) schedule(); else udelay(d); }
/* shadow registers */ /* shadow registers */
#define cx_sread(sreg) (core->shadow[sreg]) #define cx_sread(sreg) (core->shadow[sreg])
#define cx_swrite(sreg,reg,value) \ #define cx_swrite(sreg, reg, value) \
(core->shadow[sreg] = value, \ (core->shadow[sreg] = value, \
writel(core->shadow[sreg], core->lmmio + ((reg)>>2))) writel(core->shadow[sreg], core->lmmio + ((reg)>>2)))
#define cx_sandor(sreg,reg,mask,value) \ #define cx_sandor(sreg, reg, mask, value) \
(core->shadow[sreg] = (core->shadow[sreg] & ~(mask)) | ((value) & (mask)), \ (core->shadow[sreg] = (core->shadow[sreg] & ~(mask)) | ((value) & (mask)), \
writel(core->shadow[sreg], core->lmmio + ((reg)>>2))) writel(core->shadow[sreg], core->lmmio + ((reg)>>2)))
...@@ -667,7 +663,7 @@ extern int cx88_stop_audio_dma(struct cx88_core *core); ...@@ -667,7 +663,7 @@ extern int cx88_stop_audio_dma(struct cx88_core *core);
/* cx88-vbi.c */ /* cx88-vbi.c */
/* Can be used as g_vbi_fmt, try_vbi_fmt and s_vbi_fmt */ /* Can be used as g_vbi_fmt, try_vbi_fmt and s_vbi_fmt */
int cx8800_vbi_fmt (struct file *file, void *priv, int cx8800_vbi_fmt(struct file *file, void *priv,
struct v4l2_format *f); struct v4l2_format *f);
/* /*
...@@ -708,7 +704,8 @@ int cx8802_register_driver(struct cx8802_driver *drv); ...@@ -708,7 +704,8 @@ int cx8802_register_driver(struct cx8802_driver *drv);
int cx8802_unregister_driver(struct cx8802_driver *drv); int cx8802_unregister_driver(struct cx8802_driver *drv);
/* Caller must hold core->lock */ /* Caller must hold core->lock */
struct cx8802_driver * cx8802_get_driver(struct cx8802_dev *dev, enum cx88_board_type btype); struct cx8802_driver *cx8802_get_driver(struct cx8802_dev *dev,
enum cx88_board_type btype);
/* ----------------------------------------------------------- */ /* ----------------------------------------------------------- */
/* cx88-dsp.c */ /* cx88-dsp.c */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment