diff options
85 files changed, 4897 insertions, 5325 deletions
diff --git a/Documentation/dvb/faq.txt b/Documentation/dvb/faq.txt index 79c2ce4ca04a..3bf51e45c972 100644 --- a/Documentation/dvb/faq.txt +++ b/Documentation/dvb/faq.txt @@ -35,7 +35,7 @@ Some very frequently asked questions about linuxtv-dvb Note: Only very recent versions of Mplayer and xine can decode. MPEG2 transport streams (TS) directly. Then, run '[sct]zap channelname -r' in one xterm, and keep it running, - and start 'mplayer - < /dev/dvb/adapter0/dvr0' or + and start 'mplayer - < /dev/dvb/adapter0/dvr0' or 'xine stdin://mpeg2 < /dev/dvb/adapter0/dvr0' in a second xterm. That's all far from perfect, but it seems no one has written a nice DVB application which includes a builtin software MPEG diff --git a/drivers/media/common/saa7146_core.c b/drivers/media/common/saa7146_core.c index 5df06f2f8a50..9acb1bf40ba9 100644 --- a/drivers/media/common/saa7146_core.c +++ b/drivers/media/common/saa7146_core.c @@ -59,7 +59,7 @@ void saa7146_set_gpio(struct saa7146_dev *dev, u8 pin, u8 data) /* read old register contents */ value = saa7146_read(dev, GPIO_CTRL ); - + value &= ~(0xff << (8*pin)); value |= (data << (8*pin)); @@ -105,7 +105,7 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop) * general helper functions ****************************************************************************/ -/* this is videobuf_vmalloc_to_sg() from video-buf.c +/* this is videobuf_vmalloc_to_sg() from video-buf.c make sure virt has been allocated with vmalloc_32(), otherwise the BUG() may be triggered on highmem machines */ static struct scatterlist* vmalloc_to_sg(unsigned char *virt, int nr_pages) @@ -128,7 +128,7 @@ static struct scatterlist* vmalloc_to_sg(unsigned char *virt, int nr_pages) sglist[i].length = PAGE_SIZE; } return sglist; - + err: kfree(sglist); return NULL; @@ -158,7 +158,7 @@ char *saa7146_vmalloc_build_pgtable(struct pci_dev *pci, long length, struct saa vfree(mem); return NULL; } - + slen = pci_map_sg(pci,pt->slist,pages,PCI_DMA_FROMDEVICE); if (0 != saa7146_pgtable_build_single(pci, pt, pt->slist, slen)) { return NULL; @@ -198,13 +198,13 @@ int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt) int saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt, struct scatterlist *list, int sglen ) { - u32 *ptr, fill; + u32 *ptr, fill; int nr_pages = 0; - int i,p; + int i,p; - BUG_ON( 0 == sglen); + BUG_ON(0 == sglen); BUG_ON(list->offset > PAGE_SIZE); - + /* if we have a user buffer, the first page may not be aligned to a page boundary. */ pt->offset = list->offset; @@ -322,10 +322,10 @@ static irqreturn_t interrupt_hw(int irq, void *dev_id, struct pt_regs *regs) static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent) { struct saa7146_pci_extension_data *pci_ext = (struct saa7146_pci_extension_data *)ent->driver_data; - struct saa7146_extension* ext = pci_ext->ext; + struct saa7146_extension *ext = pci_ext->ext; struct saa7146_dev *dev; int err = -ENOMEM; - + dev = kmalloc(sizeof(struct saa7146_dev), GFP_KERNEL); if (!dev) { ERR(("out of memory.\n")); @@ -394,7 +394,7 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent goto err_unmap; } - err = -ENOMEM; + err = -ENOMEM; /* get memory for various stuff */ dev->d_rps0.cpu_addr = pci_alloc_consistent(pci, SAA7146_RPS_MEM, @@ -423,7 +423,7 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent INFO(("found saa7146 @ mem %p (revision %d, irq %d) (0x%04x,0x%04x).\n", dev->mem, dev->revision, pci->irq, pci->subsystem_vendor, pci->subsystem_device)); dev->ext = ext; - pci_set_drvdata(pci,dev); + pci_set_drvdata(pci, dev); init_MUTEX(&dev->lock); spin_lock_init(&dev->int_slock); @@ -435,11 +435,11 @@ static int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent init_waitqueue_head(&dev->i2c_wq); /* set some sane pci arbitrition values */ - saa7146_write(dev, PCI_BT_V1, 0x1c00101f); + saa7146_write(dev, PCI_BT_V1, 0x1c00101f); /* TODO: use the status code of the callback */ - err = -ENODEV; + err = -ENODEV; if (ext->probe && ext->probe(dev)) { DEB_D(("ext->probe() failed for %p. skipping device.\n",dev)); @@ -460,7 +460,7 @@ out: return err; err_unprobe: - pci_set_drvdata(pci,NULL); + pci_set_drvdata(pci, NULL); err_free_i2c: pci_free_consistent(pci, SAA7146_RPS_MEM, dev->d_i2c.cpu_addr, dev->d_i2c.dma_handle); diff --git a/drivers/media/common/saa7146_fops.c b/drivers/media/common/saa7146_fops.c index 817c4a6a66b6..cb826c9adfe7 100644 --- a/drivers/media/common/saa7146_fops.c +++ b/drivers/media/common/saa7146_fops.c @@ -444,7 +444,7 @@ int saa7146_vv_init(struct saa7146_dev* dev, struct saa7146_ext_vv *ext_vv) memset(vv, 0x0, sizeof(*vv)); DEB_EE(("dev:%p\n",dev)); - + /* set default values for video parts of the saa7146 */ saa7146_write(dev, BCS_CTRL, 0x80400040); @@ -497,7 +497,7 @@ int saa7146_register_device(struct video_device **vid, struct saa7146_dev* dev, struct video_device *vfd; DEB_EE(("dev:%p, name:'%s', type:%d\n",dev,name,type)); - + // released by vfd->release vfd = video_device_alloc(); if (vfd == NULL) diff --git a/drivers/media/common/saa7146_hlp.c b/drivers/media/common/saa7146_hlp.c index 7bf6316b3480..ec52dff8cb69 100644 --- a/drivers/media/common/saa7146_hlp.c +++ b/drivers/media/common/saa7146_hlp.c @@ -4,7 +4,7 @@ static void calculate_output_format_register(struct saa7146_dev* saa, u32 palette, u32* clip_format) { /* clear out the necessary bits */ - *clip_format &= 0x0000ffff; + *clip_format &= 0x0000ffff; /* set these bits new */ *clip_format |= (( ((palette&0xf00)>>8) << 30) | ((palette&0x00f) << 24) | (((palette&0x0f0)>>4) << 16)); } @@ -21,7 +21,7 @@ static void calculate_hxo_and_hyo(struct saa7146_vv *vv, u32* hps_h_scale, u32* hyo = vv->standard->v_offset; hxo = vv->standard->h_offset; - + *hps_h_scale &= ~(MASK_B0 | 0xf00); *hps_h_scale |= (hxo << 0); @@ -40,7 +40,7 @@ static void calculate_hxo_and_hyo(struct saa7146_vv *vv, u32* hps_h_scale, u32* static struct { u16 hps_coeff; u16 weight_sum; -} hps_h_coeff_tab [] = { +} hps_h_coeff_tab [] = { {0x00, 2}, {0x02, 4}, {0x00, 4}, {0x06, 8}, {0x02, 8}, {0x08, 8}, {0x00, 8}, {0x1E, 16}, {0x0E, 8}, {0x26, 8}, {0x06, 8}, {0x42, 8}, {0x02, 8}, {0x80, 8}, {0x00, 8}, @@ -65,11 +65,11 @@ static int calculate_h_scale_registers(struct saa7146_dev *dev, u32* hps_ctrl, u32* hps_v_gain, u32* hps_h_prescale, u32* hps_h_scale) { /* horizontal prescaler */ - u32 dcgx = 0, xpsc = 0, xacm = 0, cxy = 0, cxuv = 0; + u32 dcgx = 0, xpsc = 0, xacm = 0, cxy = 0, cxuv = 0; /* horizontal scaler */ - u32 xim = 0, xp = 0, xsci =0; + u32 xim = 0, xp = 0, xsci =0; /* vertical scale & gain */ - u32 pfuv = 0; + u32 pfuv = 0; /* helper variables */ u32 h_atten = 0, i = 0; @@ -77,29 +77,29 @@ static int calculate_h_scale_registers(struct saa7146_dev *dev, if ( 0 == out_x ) { return -EINVAL; } - + /* mask out vanity-bit */ *hps_ctrl &= ~MASK_29; - + /* calculate prescale-(xspc)-value: [n .. 1/2) : 1 - [1/2 .. 1/3) : 2 - [1/3 .. 1/4) : 3 - ... */ + [1/2 .. 1/3) : 2 + [1/3 .. 1/4) : 3 + ... */ if (in_x > out_x) { xpsc = in_x / out_x; } else { /* zooming */ - xpsc = 1; + xpsc = 1; } - + /* if flip_lr-bit is set, number of pixels after horizontal prescaling must be < 384 */ if ( 0 != flip_lr ) { - + /* set vanity bit */ *hps_ctrl |= MASK_29; - + while (in_x / xpsc >= 384 ) xpsc++; } @@ -109,35 +109,35 @@ static int calculate_h_scale_registers(struct saa7146_dev *dev, while ( in_x / xpsc >= 768 ) xpsc++; } - + /* maximum prescale is 64 (p.69) */ if ( xpsc > 64 ) xpsc = 64; /* keep xacm clear*/ xacm = 0; - + /* set horizontal filter parameters (CXY = CXUV) */ cxy = hps_h_coeff_tab[( (xpsc - 1) < 63 ? (xpsc - 1) : 63 )].hps_coeff; cxuv = cxy; - + /* calculate and set horizontal fine scale (xsci) */ - + /* bypass the horizontal scaler ? */ if ( (in_x == out_x) && ( 1 == xpsc ) ) xsci = 0x400; - else + else xsci = ( (1024 * in_x) / (out_x * xpsc) ) + xpsc; - /* set start phase for horizontal fine scale (xp) to 0 */ + /* set start phase for horizontal fine scale (xp) to 0 */ xp = 0; - + /* set xim, if we bypass the horizontal scaler */ if ( 0x400 == xsci ) xim = 1; else xim = 0; - + /* if the prescaler is bypassed, enable horizontal accumulation mode (xacm) and clear dcgx */ if( 1 == xpsc ) { @@ -148,12 +148,12 @@ static int calculate_h_scale_registers(struct saa7146_dev *dev, /* get best match in the table of attenuations for horizontal scaling */ h_atten = hps_h_coeff_tab[( (xpsc - 1) < 63 ? (xpsc - 1) : 63 )].weight_sum; - + for (i = 0; h_attenuation[i] != 0; i++) { if (h_attenuation[i] >= h_atten) break; } - + dcgx = i; } @@ -171,11 +171,11 @@ static int calculate_h_scale_registers(struct saa7146_dev *dev, else pfuv = 0x33; - + *hps_v_gain &= MASK_W0|MASK_B2; - *hps_v_gain |= (pfuv << 24); + *hps_v_gain |= (pfuv << 24); - *hps_h_scale &= ~(MASK_W1 | 0xf000); + *hps_h_scale &= ~(MASK_W1 | 0xf000); *hps_h_scale |= (xim << 31) | (xp << 24) | (xsci << 12); *hps_h_prescale |= (dcgx << 27) | ((xpsc-1) << 18) | (xacm << 17) | (cxy << 8) | (cxuv << 0); @@ -186,7 +186,7 @@ static int calculate_h_scale_registers(struct saa7146_dev *dev, static struct { u16 hps_coeff; u16 weight_sum; -} hps_v_coeff_tab [] = { +} hps_v_coeff_tab [] = { {0x0100, 2}, {0x0102, 4}, {0x0300, 4}, {0x0106, 8}, {0x0502, 8}, {0x0708, 8}, {0x0F00, 8}, {0x011E, 16}, {0x110E, 16}, {0x1926, 16}, {0x3906, 16}, {0x3D42, 16}, {0x7D02, 16}, {0x7F80, 16}, {0xFF00, 16}, @@ -210,14 +210,14 @@ static int calculate_v_scale_registers(struct saa7146_dev *dev, enum v4l2_field int in_y, int out_y, u32* hps_v_scale, u32* hps_v_gain) { int lpi = 0; - + /* vertical scaling */ u32 yacm = 0, ysci = 0, yacl = 0, ypo = 0, ype = 0; /* vertical scale & gain */ u32 dcgy = 0, cya_cyb = 0; - + /* helper variables */ - u32 v_atten = 0, i = 0; + u32 v_atten = 0, i = 0; /* error, if vertical zooming */ if ( in_y < out_y ) { @@ -245,7 +245,7 @@ static int calculate_v_scale_registers(struct saa7146_dev *dev, enum v4l2_field yacm = 0; yacl = 0; cya_cyb = 0x00ff; - + /* calculate scaling increment */ if ( in_y > out_y ) ysci = ((1024 * in_y) / (out_y + 1)) - 1024; @@ -257,9 +257,9 @@ static int calculate_v_scale_registers(struct saa7146_dev *dev, enum v4l2_field /* calculate ype and ypo */ ype = ysci / 16; ypo = ype + (ysci / 64); - + } else { - yacm = 1; + yacm = 1; /* calculate scaling increment */ ysci = (((10 * 1024 * (in_y - out_y - 1)) / in_y) + 9) / 10; @@ -269,7 +269,7 @@ static int calculate_v_scale_registers(struct saa7146_dev *dev, enum v4l2_field /* the sequence length interval (yacl) has to be set according to the prescale value, e.g. [n .. 1/2) : 0 - [1/2 .. 1/3) : 1 + [1/2 .. 1/3) : 1 [1/3 .. 1/4) : 2 ... */ if ( ysci < 512) { @@ -278,7 +278,7 @@ static int calculate_v_scale_registers(struct saa7146_dev *dev, enum v4l2_field yacl = ( ysci / (1024 - ysci) ); } - /* get filter coefficients for cya, cyb from table hps_v_coeff_tab */ + /* get filter coefficients for cya, cyb from table hps_v_coeff_tab */ cya_cyb = hps_v_coeff_tab[ (yacl < 63 ? yacl : 63 ) ].hps_coeff; /* get best match in the table of attenuations for vertical scaling */ @@ -288,7 +288,7 @@ static int calculate_v_scale_registers(struct saa7146_dev *dev, enum v4l2_field if (v_attenuation[i] >= v_atten) break; } - + dcgy = i; } @@ -306,12 +306,12 @@ static int sort_and_eliminate(u32* values, int* count) { int low = 0, high = 0, top = 0, temp = 0; int cur = 0, next = 0; - + /* sanity checks */ if( (0 > *count) || (NULL == values) ) { return -EINVAL; } - + /* bubble sort the first ´count´ items of the array ´values´ */ for( top = *count; top > 0; top--) { for( low = 0, high = 1; high < top; low++, high++) { @@ -328,9 +328,9 @@ static int sort_and_eliminate(u32* values, int* count) if( values[cur] != values[next]) values[++cur] = values[next]; } - + *count = cur + 1; - + return 0; } @@ -343,8 +343,8 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa int width = fh->ov.win.w.width; int height = fh->ov.win.w.height; int clipcount = fh->ov.nclips; - - u32 line_list[32]; + + u32 line_list[32]; u32 pixel_list[32]; int numdwords = 0; @@ -361,12 +361,12 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa /* fill the line and pixel-lists */ for(i = 0; i < clipcount; i++) { int l = 0, r = 0, t = 0, b = 0; - + x[i] = fh->ov.clips[i].c.left; y[i] = fh->ov.clips[i].c.top; w[i] = fh->ov.clips[i].c.width; h[i] = fh->ov.clips[i].c.height; - + if( w[i] < 0) { x[i] += w[i]; w[i] = -w[i]; } @@ -378,7 +378,7 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa } if( y[i] < 0) { h[i] += y[i]; y[i] = 0; - } + } if( 0 != vv->vflip ) { y[i] = height - y[i] - h[i]; } @@ -387,7 +387,7 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa r = x[i]+w[i]; t = y[i]; b = y[i]+h[i]; - + /* insert left/right coordinates */ pixel_list[ 2*i ] = min_t(int, l, width); pixel_list[(2*i)+1] = min_t(int, r, width); @@ -423,7 +423,7 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa x[j] = 0; if( pixel_list[i] < (x[j] + w[j])) { - + if ( pixel_list[i] >= x[j] ) { clipping[2*i] |= cpu_to_le32(1 << j); } @@ -445,8 +445,8 @@ static void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct sa /* adjust arbitration control register */ *arbtr_ctrl &= 0xffff00ff; - *arbtr_ctrl |= 0x00001c00; - + *arbtr_ctrl |= 0x00001c00; + vdma2->base_even = vv->d_clipping.dma_handle; vdma2->base_odd = vv->d_clipping.dma_handle; vdma2->prot_addr = vv->d_clipping.dma_handle+((sizeof(u32))*(numdwords)); @@ -473,9 +473,9 @@ static void saa7146_disable_clipping(struct saa7146_dev *dev) /* upload clipping-registers*/ saa7146_write(dev, CLIP_FORMAT_CTRL,clip_format); - saa7146_write(dev, MC2, (MASK_05 | MASK_21)); - - /* disable video dma2 */ + saa7146_write(dev, MC2, (MASK_05 | MASK_21)); + + /* disable video dma2 */ saa7146_write(dev, MC1, MASK_21); } @@ -509,10 +509,10 @@ static void saa7146_set_clipping_rect(struct saa7146_fh *fh) saa7146_write(dev, BASE_PAGE2, vdma2.base_page); saa7146_write(dev, PITCH2, vdma2.pitch); saa7146_write(dev, NUM_LINE_BYTE2, vdma2.num_line_byte); - + /* prepare the rest */ saa7146_write(dev, CLIP_FORMAT_CTRL,clip_format); - saa7146_write(dev, PCI_BT_V1, arbtr_ctrl); + saa7146_write(dev, PCI_BT_V1, arbtr_ctrl); /* upload clip_control-register, clipping-registers, enable video dma2 */ saa7146_write(dev, MC2, (MASK_05 | MASK_21 | MASK_03 | MASK_19)); @@ -530,11 +530,11 @@ static void saa7146_set_window(struct saa7146_dev *dev, int width, int height, e /* set vertical scale */ hps_v_scale = 0; /* all bits get set by the function-call */ - hps_v_gain = 0; /* fixme: saa7146_read(dev, HPS_V_GAIN);*/ + hps_v_gain = 0; /* fixme: saa7146_read(dev, HPS_V_GAIN);*/ calculate_v_scale_registers(dev, field, vv->standard->v_field*2, height, &hps_v_scale, &hps_v_gain); /* set horizontal scale */ - hps_ctrl = 0; + hps_ctrl = 0; hps_h_prescale = 0; /* all bits get set in the function */ hps_h_scale = 0; calculate_h_scale_registers(dev, vv->standard->h_pixels, width, vv->hflip, &hps_ctrl, &hps_v_gain, &hps_h_prescale, &hps_h_scale); @@ -542,43 +542,43 @@ static void saa7146_set_window(struct saa7146_dev *dev, int width, int height, e /* set hyo and hxo */ calculate_hxo_and_hyo(vv, &hps_h_scale, &hps_ctrl); calculate_hps_source_and_sync(dev, source, sync, &hps_ctrl); - + /* write out new register contents */ saa7146_write(dev, HPS_V_SCALE, hps_v_scale); saa7146_write(dev, HPS_V_GAIN, hps_v_gain); saa7146_write(dev, HPS_CTRL, hps_ctrl); saa7146_write(dev, HPS_H_PRESCALE,hps_h_prescale); saa7146_write(dev, HPS_H_SCALE, hps_h_scale); - + /* upload shadow-ram registers */ - saa7146_write(dev, MC2, (MASK_05 | MASK_06 | MASK_21 | MASK_22) ); + saa7146_write(dev, MC2, (MASK_05 | MASK_06 | MASK_21 | MASK_22) ); } /* calculate the new memory offsets for a desired position */ static void saa7146_set_position(struct saa7146_dev *dev, int w_x, int w_y, int w_height, enum v4l2_field field, u32 pixelformat) -{ +{ struct saa7146_vv *vv = dev->vv_data; struct saa7146_format *sfmt = format_by_fourcc(dev, pixelformat); int b_depth = vv->ov_fmt->depth; int b_bpl = vv->ov_fb.fmt.bytesperline; u32 base = (u32)vv->ov_fb.base; - + struct saa7146_video_dma vdma1; /* calculate memory offsets for picture, look if we shall top-down-flip */ vdma1.pitch = 2*b_bpl; if ( 0 == vv->vflip ) { - vdma1.base_even = (u32)base + (w_y * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); + vdma1.base_even = (u32)base + (w_y * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); vdma1.base_odd = vdma1.base_even + (vdma1.pitch / 2); vdma1.prot_addr = vdma1.base_even + (w_height * (vdma1.pitch / 2)); } else { - vdma1.base_even = (u32)base + ((w_y+w_height) * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); + vdma1.base_even = (u32)base + ((w_y+w_height) * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); vdma1.base_odd = vdma1.base_even - (vdma1.pitch / 2); vdma1.prot_addr = vdma1.base_odd - (w_height * (vdma1.pitch / 2)); } - + if (V4L2_FIELD_HAS_BOTH(field)) { } else if (field == V4L2_FIELD_ALTERNATE) { /* fixme */ @@ -596,7 +596,7 @@ static void saa7146_set_position(struct saa7146_dev *dev, int w_x, int w_y, int if ( 0 != vv->vflip ) { vdma1.pitch *= -1; } - + vdma1.base_page = sfmt->swap; vdma1.num_line_byte = (vv->standard->v_field<<16)+vv->standard->h_pixels; @@ -606,13 +606,13 @@ static void saa7146_set_position(struct saa7146_dev *dev, int w_x, int w_y, int static void saa7146_set_output_format(struct saa7146_dev *dev, unsigned long palette) { u32 clip_format = saa7146_read(dev, CLIP_FORMAT_CTRL); - + /* call helper function */ calculate_output_format_register(dev,palette,&clip_format); /* update the hps registers */ saa7146_write(dev, CLIP_FORMAT_CTRL, clip_format); - saa7146_write(dev, MC2, (MASK_05 | MASK_21)); + saa7146_write(dev, MC2, (MASK_05 | MASK_21)); } /* select input-source */ @@ -630,10 +630,10 @@ void saa7146_set_hps_source_and_sync(struct saa7146_dev *dev, int source, int sy /* write back & upload register */ saa7146_write(dev, HPS_CTRL, hps_ctrl); saa7146_write(dev, MC2, (MASK_05 | MASK_21)); - + vv->current_hps_source = source; vv->current_hps_sync = sync; -} +} int saa7146_enable_overlay(struct saa7146_fh *fh) { @@ -655,31 +655,31 @@ void saa7146_disable_overlay(struct saa7146_fh *fh) struct saa7146_dev *dev = fh->dev; /* disable clipping + video dma1 */ - saa7146_disable_clipping(dev); + saa7146_disable_clipping(dev); saa7146_write(dev, MC1, MASK_22); -} +} -void saa7146_write_out_dma(struct saa7146_dev* dev, int which, struct saa7146_video_dma* vdma) +void saa7146_write_out_dma(struct saa7146_dev* dev, int which, struct saa7146_video_dma* vdma) { int where = 0; - + if( which < 1 || which > 3) { return; } - + /* calculate starting address */ where = (which-1)*0x18; - saa7146_write(dev, where, vdma->base_odd); - saa7146_write(dev, where+0x04, vdma->base_even); - saa7146_write(dev, where+0x08, vdma->prot_addr); - saa7146_write(dev, where+0x0c, vdma->pitch); - saa7146_write(dev, where+0x10, vdma->base_page); + saa7146_write(dev, where, vdma->base_odd); + saa7146_write(dev, where+0x04, vdma->base_even); + saa7146_write(dev, where+0x08, vdma->prot_addr); + saa7146_write(dev, where+0x0c, vdma->pitch); + saa7146_write(dev, where+0x10, vdma->base_page); saa7146_write(dev, where+0x14, vdma->num_line_byte); - + /* upload */ - saa7146_write(dev, MC2, (MASK_02<<(which-1))|(MASK_18<<(which-1))); -/* + saa7146_write(dev, MC2, (MASK_02<<(which-1))|(MASK_18<<(which-1))); +/* printk("vdma%d.base_even: 0x%08x\n", which,vdma->base_even); printk("vdma%d.base_odd: 0x%08x\n", which,vdma->base_odd); printk("vdma%d.prot_addr: 0x%08x\n", which,vdma->prot_addr); @@ -688,6 +688,7 @@ void saa7146_write_out_dma(struct saa7146_dev* dev, int which, struct saa7146_vi printk("vdma%d.num_line_byte: 0x%08x\n", which,vdma->num_line_byte); */ } + static int calculate_video_dma_grab_packed(struct saa7146_dev* dev, struct saa7146_buf *buf) { struct saa7146_vv *vv = dev->vv_data; @@ -708,11 +709,11 @@ static int calculate_video_dma_grab_packed(struct saa7146_dev* dev, struct saa71 if( bytesperline != 0) { vdma1.pitch = bytesperline*2; } else { - vdma1.pitch = (width*depth*2)/8; + vdma1.pitch = (width*depth*2)/8; } vdma1.num_line_byte = ((vv->standard->v_field<<16) + vv->standard->h_pixels); vdma1.base_page = buf->pt[0].dma | ME1 | sfmt->swap; - + if( 0 != vv->vflip ) { vdma1.prot_addr = buf->pt[0].offset; vdma1.base_even = buf->pt[0].offset+(vdma1.pitch/2)*height; @@ -745,7 +746,7 @@ static int calculate_video_dma_grab_packed(struct saa7146_dev* dev, struct saa71 if( 0 != vv->vflip ) { vdma1.pitch *= -1; - } + } saa7146_write_out_dma(dev, 1, &vdma1); return 0; @@ -769,12 +770,11 @@ static int calc_planar_422(struct saa7146_vv *vv, struct saa7146_buf *buf, struc vdma3->prot_addr = buf->pt[2].offset; vdma3->base_even = ((vdma3->pitch/2)*height)+buf->pt[2].offset; vdma3->base_odd = vdma3->base_even - (vdma3->pitch/2); - } else { vdma3->base_even = buf->pt[2].offset; vdma3->base_odd = vdma3->base_even + (vdma3->pitch/2); vdma3->prot_addr = (vdma3->pitch/2)*height+buf->pt[2].offset; - + vdma2->base_even = buf->pt[1].offset; vdma2->base_odd = vdma2->base_even + (vdma2->pitch/2); vdma2->prot_addr = (vdma2->pitch/2)*height+buf->pt[1].offset; @@ -812,7 +812,6 @@ static int calc_planar_420(struct saa7146_vv *vv, struct saa7146_buf *buf, struc return 0; } - static int calculate_video_dma_grab_planar(struct saa7146_dev* dev, struct saa7146_buf *buf) { struct saa7146_vv *vv = dev->vv_data; @@ -905,7 +904,7 @@ static int calculate_video_dma_grab_planar(struct saa7146_dev* dev, struct saa71 vdma1.pitch *= -1; vdma2.pitch *= -1; vdma3.pitch *= -1; - } + } saa7146_write_out_dma(dev, 1, &vdma1); if( (sfmt->flags & FORMAT_BYTE_SWAP) != 0 ) { @@ -931,32 +930,32 @@ static void program_capture_engine(struct saa7146_dev *dev, int planar) WRITE_RPS0(CMD_PAUSE | CMD_OAN | CMD_SIG0 | e_wait); /* set rps register 0 */ - WRITE_RPS0(CMD_WR_REG | (1 << 8) | (MC2/4)); + WRITE_RPS0(CMD_WR_REG | (1 << 8) | (MC2/4)); WRITE_RPS0(MASK_27 | MASK_11); - + /* turn on video-dma1 */ - WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); - WRITE_RPS0(MASK_06 | MASK_22); /* => mask */ + WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); + WRITE_RPS0(MASK_06 | MASK_22); /* => mask */ WRITE_RPS0(MASK_06 | MASK_22); /* => values */ if( 0 != planar ) { /* turn on video-dma2 */ - WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); - WRITE_RPS0(MASK_05 | MASK_21); /* => mask */ + WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); + WRITE_RPS0(MASK_05 | MASK_21); /* => mask */ WRITE_RPS0(MASK_05 | MASK_21); /* => values */ /* turn on video-dma3 */ - WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); - WRITE_RPS0(MASK_04 | MASK_20); /* => mask */ + WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); + WRITE_RPS0(MASK_04 | MASK_20); /* => mask */ WRITE_RPS0(MASK_04 | MASK_20); /* => values */ } - + /* wait for o_fid_a/b / e_fid_a/b toggle */ if ( vv->last_field == V4L2_FIELD_INTERLACED ) { WRITE_RPS0(CMD_PAUSE | o_wait); - WRITE_RPS0(CMD_PAUSE | e_wait); + WRITE_RPS0(CMD_PAUSE | e_wait); } else if ( vv->last_field == V4L2_FIELD_TOP ) { WRITE_RPS0(CMD_PAUSE | (vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? MASK_10 : MASK_09)); - WRITE_RPS0(CMD_PAUSE | o_wait); + WRITE_RPS0(CMD_PAUSE | o_wait); } else if ( vv->last_field == V4L2_FIELD_BOTTOM ) { WRITE_RPS0(CMD_PAUSE | (vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? MASK_10 : MASK_09)); WRITE_RPS0(CMD_PAUSE | e_wait); @@ -964,25 +963,25 @@ static void program_capture_engine(struct saa7146_dev *dev, int planar) /* turn off video-dma1 */ WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); - WRITE_RPS0(MASK_22 | MASK_06); /* => mask */ - WRITE_RPS0(MASK_22); /* => values */ + WRITE_RPS0(MASK_22 | MASK_06); /* => mask */ + WRITE_RPS0(MASK_22); /* => values */ if( 0 != planar ) { /* turn off video-dma2 */ - WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); - WRITE_RPS0(MASK_05 | MASK_21); /* => mask */ - WRITE_RPS0(MASK_21); /* => values */ + WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); + WRITE_RPS0(MASK_05 | MASK_21); /* => mask */ + WRITE_RPS0(MASK_21); /* => values */ /* turn off video-dma3 */ - WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); - WRITE_RPS0(MASK_04 | MASK_20); /* => mask */ - WRITE_RPS0(MASK_20); /* => values */ + WRITE_RPS0(CMD_WR_REG_MASK | (MC1/4)); + WRITE_RPS0(MASK_04 | MASK_20); /* => mask */ + WRITE_RPS0(MASK_20); /* => values */ } /* generate interrupt */ - WRITE_RPS0(CMD_INTERRUPT); + WRITE_RPS0(CMD_INTERRUPT); /* stop */ - WRITE_RPS0(CMD_STOP); + WRITE_RPS0(CMD_STOP); } void saa7146_set_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next) @@ -1033,6 +1032,5 @@ void saa7146_set_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struc saa7146_write(dev, RPS_ADDR0, dev->d_rps0.dma_handle); /* turn on rps */ - saa7146_write(dev, MC1, (MASK_12 | MASK_28)); + saa7146_write(dev, MC1, (MASK_12 | MASK_28)); } - diff --git a/drivers/media/common/saa7146_i2c.c b/drivers/media/common/saa7146_i2c.c index c59cde0157bd..781f23f0cbcc 100644 --- a/drivers/media/common/saa7146_i2c.c +++ b/drivers/media/common/saa7146_i2c.c @@ -12,7 +12,7 @@ static u32 saa7146_i2c_func(struct i2c_adapter *adapter) } /* this function returns the status-register of our i2c-device */ -static inline u32 saa7146_i2c_status(struct saa7146_dev *dev) +static inline u32 saa7146_i2c_status(struct saa7146_dev *dev) { u32 iicsta = saa7146_read(dev, I2C_STATUS); /* @@ -22,7 +22,7 @@ static inline u32 saa7146_i2c_status(struct saa7146_dev *dev) } /* this function runs through the i2c-messages and prepares the data to be - sent through the saa7146. have a look at the specifications p. 122 ff + sent through the saa7146. have a look at the specifications p. 122 ff to understand this. it returns the number of u32s to send, or -1 in case of an error. */ static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) @@ -56,7 +56,7 @@ static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) /* insert the address of the i2c-slave. note: we get 7 bit i2c-addresses, so we have to perform a translation */ - addr = (m[i].addr*2) + ( (0 != (m[i].flags & I2C_M_RD)) ? 1 : 0); + addr = (m[i].addr*2) + ( (0 != (m[i].flags & I2C_M_RD)) ? 1 : 0); h1 = op_count/3; h2 = op_count%3; op[h1] |= ( (u8)addr << ((3-h2)*8)); op[h1] |= (SAA7146_I2C_START << ((3-h2)*2)); @@ -70,8 +70,8 @@ static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) op[h1] |= ( SAA7146_I2C_CONT << ((3-h2)*2)); op_count++; } - - } + + } /* have a look at the last byte inserted: if it was: ...CONT change it to ...STOP */ @@ -81,7 +81,7 @@ static int saa7146_i2c_msg_prepare(const struct i2c_msg *m, int num, u32 *op) op[h1] |= (SAA7146_I2C_STOP << ((3-h2)*2)); } - /* return the number of u32s to send */ + /* return the number of u32s to send */ return mem; } @@ -106,16 +106,16 @@ static int saa7146_i2c_msg_cleanup(const struct i2c_msg *m, int num, u32 *op) op_count++; } } - + return 0; } /* this functions resets the i2c-device and returns 0 if everything was fine, otherwise -1 */ -static int saa7146_i2c_reset(struct saa7146_dev *dev) +static int saa7146_i2c_reset(struct saa7146_dev *dev) { /* get current status */ u32 status = saa7146_i2c_status(dev); - + /* clear registers for sure */ saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); saa7146_write(dev, I2C_TRANSFER, 0); @@ -135,7 +135,7 @@ static int saa7146_i2c_reset(struct saa7146_dev *dev) saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); saa7146_write(dev, MC2, (MASK_00 | MASK_16)); msleep(SAA7146_I2C_DELAY); - } + } /* check if any error is (still) present. (this can be necessary because p.123, note 1) */ status = saa7146_i2c_status(dev); @@ -160,7 +160,7 @@ static int saa7146_i2c_reset(struct saa7146_dev *dev) saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); saa7146_write(dev, MC2, (MASK_00 | MASK_16)); msleep(SAA7146_I2C_DELAY); - } + } /* if any error is still present, a fatal error has occured ... */ status = saa7146_i2c_status(dev); @@ -279,14 +279,14 @@ int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *msgs, in int err = 0; int address_err = 0; int short_delay = 0; - + if (down_interruptible (&dev->i2c_lock)) return -ERESTARTSYS; for(i=0;i<num;i++) { DEB_I2C(("msg:%d/%d\n",i+1,num)); } - + /* prepare the message(s), get number of u32s to transfer */ count = saa7146_i2c_msg_prepare(msgs, num, buffer); if ( 0 > count ) { @@ -296,14 +296,14 @@ int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *msgs, in if ( count > 3 || 0 != (SAA7146_I2C_SHORT_DELAY & dev->ext->flags) ) short_delay = 1; - + do { /* reset the i2c-device if necessary */ err = saa7146_i2c_reset(dev); if ( 0 > err ) { DEB_I2C(("could not reset i2c-device.\n")); goto out; - } + } /* write out the u32s one after another */ for(i = 0; i < count; i++) { @@ -314,10 +314,10 @@ int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *msgs, in thinks that an address error occured. in that case, the transaction should be retrying, even if an address error occured. analog saa7146 based cards extensively rely on - i2c address probing, however, and address errors indicate that a + i2c address probing, however, and address errors indicate that a device is really *not* there. retrying in that case increases the time the device needs to probe greatly, so - it should be avoided. because of the fact, that only + it should be avoided. because of the fact, that only analog based cards use irq based i2c transactions (for dvb cards, this screwes up other interrupt sources), we bail out completely for analog cards after an address error and trust @@ -336,17 +336,17 @@ int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *msgs, in err = num; break; } - + /* delay a bit before retrying */ msleep(10); - + } while (err != num && retries--); /* if every retry had an address error, exit right away */ if (address_err == retries) { goto out; } - + /* if any things had to be read, get the results */ if ( 0 != saa7146_i2c_msg_cleanup(msgs, num, buffer)) { DEB_I2C(("could not cleanup i2c-message.\n")); @@ -358,7 +358,7 @@ int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg *msgs, in DEB_I2C(("transmission successful. (msg:%d).\n",err)); out: /* another bug in revision 0: the i2c-registers get uploaded randomly by other - uploads, so we better clear them out before continueing */ + uploads, so we better clear them out before continueing */ if( 0 == dev->revision ) { u32 zero = 0; saa7146_i2c_reset(dev); @@ -368,14 +368,14 @@ out: } up(&dev->i2c_lock); - return err; + return err; } /* utility functions */ static int saa7146_i2c_xfer(struct i2c_adapter* adapter, struct i2c_msg *msg, int num) { struct saa7146_dev* dev = i2c_get_adapdata(adapter); - + /* use helper function to transfer data */ return saa7146_i2c_transfer(dev, msg, num, adapter->retries); } @@ -396,7 +396,7 @@ static struct i2c_algorithm saa7146_algo = { int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate) { DEB_EE(("bitrate: 0x%08x\n",bitrate)); - + /* enable i2c-port pins */ saa7146_write(dev, MC1, (MASK_08 | MASK_24)); @@ -412,10 +412,10 @@ int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c #endif i2c_adapter->algo = &saa7146_algo; i2c_adapter->algo_data = NULL; - i2c_adapter->id = I2C_ALGO_SAA7146; + i2c_adapter->id = I2C_ALGO_SAA7146; i2c_adapter->timeout = SAA7146_I2C_TIMEOUT; i2c_adapter->retries = SAA7146_I2C_RETRIES; } - + return 0; } diff --git a/drivers/media/common/saa7146_vbi.c b/drivers/media/common/saa7146_vbi.c index 55884d935156..cb86a97fda1f 100644 --- a/drivers/media/common/saa7146_vbi.c +++ b/drivers/media/common/saa7146_vbi.c @@ -8,14 +8,14 @@ static int vbi_workaround(struct saa7146_dev *dev) u32 *cpu; dma_addr_t dma_addr; - + int count = 0; int i; DECLARE_WAITQUEUE(wait, current); - + DEB_VBI(("dev:%p\n",dev)); - + /* once again, a bug in the saa7146: the brs acquisition is buggy and especially the BXO-counter does not work as specified. there is this workaround, but please @@ -29,15 +29,15 @@ static int vbi_workaround(struct saa7146_dev *dev) saa7146_write(dev, BASE_EVEN3, dma_addr); saa7146_write(dev, BASE_ODD3, dma_addr+vbi_pixel_to_capture); saa7146_write(dev, PROT_ADDR3, dma_addr+4096); - saa7146_write(dev, PITCH3, vbi_pixel_to_capture); + saa7146_write(dev, PITCH3, vbi_pixel_to_capture); saa7146_write(dev, BASE_PAGE3, 0x0); saa7146_write(dev, NUM_LINE_BYTE3, (2<<16)|((vbi_pixel_to_capture)<<0)); saa7146_write(dev, MC2, MASK_04|MASK_20); - /* load brs-control register */ - WRITE_RPS1(CMD_WR_REG | (1 << 8) | (BRS_CTRL/4)); - /* BXO = 1h, BRS to outbound */ - WRITE_RPS1(0xc000008c); + /* load brs-control register */ + WRITE_RPS1(CMD_WR_REG | (1 << 8) | (BRS_CTRL/4)); + /* BXO = 1h, BRS to outbound */ + WRITE_RPS1(0xc000008c); /* wait for vbi_a or vbi_b*/ if ( 0 != (SAA7146_USE_PORT_B_FOR_VBI & dev->ext_vv_data->flags)) { DEB_D(("...using port b\n")); @@ -50,36 +50,36 @@ static int vbi_workaround(struct saa7146_dev *dev) DEB_D(("...using port a\n")); WRITE_RPS1(CMD_PAUSE | MASK_10); } - /* upload brs */ - WRITE_RPS1(CMD_UPLOAD | MASK_08); - /* load brs-control register */ - WRITE_RPS1(CMD_WR_REG | (1 << 8) | (BRS_CTRL/4)); - /* BYO = 1, BXO = NQBIL (=1728 for PAL, for NTSC this is 858*2) - NumByte3 (=1440) = 288 */ - WRITE_RPS1(((1728-(vbi_pixel_to_capture)) << 7) | MASK_19); - /* wait for brs_done */ - WRITE_RPS1(CMD_PAUSE | MASK_08); - /* upload brs */ - WRITE_RPS1(CMD_UPLOAD | MASK_08); - /* load video-dma3 NumLines3 and NumBytes3 */ - WRITE_RPS1(CMD_WR_REG | (1 << 8) | (NUM_LINE_BYTE3/4)); - /* dev->vbi_count*2 lines, 720 pixel (= 1440 Bytes) */ - WRITE_RPS1((2 << 16) | (vbi_pixel_to_capture)); - /* load brs-control register */ - WRITE_RPS1(CMD_WR_REG | (1 << 8) | (BRS_CTRL/4)); - /* Set BRS right: note: this is an experimental value for BXO (=> PAL!) */ - WRITE_RPS1((540 << 7) | (5 << 19)); // 5 == vbi_start - /* wait for brs_done */ - WRITE_RPS1(CMD_PAUSE | MASK_08); - /* upload brs and video-dma3*/ - WRITE_RPS1(CMD_UPLOAD | MASK_08 | MASK_04); - /* load mc2 register: enable dma3 */ - WRITE_RPS1(CMD_WR_REG | (1 << 8) | (MC1/4)); - WRITE_RPS1(MASK_20 | MASK_04); - /* generate interrupt */ - WRITE_RPS1(CMD_INTERRUPT); - /* stop rps1 */ - WRITE_RPS1(CMD_STOP); - + /* upload brs */ + WRITE_RPS1(CMD_UPLOAD | MASK_08); + /* load brs-control register */ + WRITE_RPS1(CMD_WR_REG | (1 << 8) | (BRS_CTRL/4)); + /* BYO = 1, BXO = NQBIL (=1728 for PAL, for NTSC this is 858*2) - NumByte3 (=1440) = 288 */ + WRITE_RPS1(((1728-(vbi_pixel_to_capture)) << 7) | MASK_19); + /* wait for brs_done */ + WRITE_RPS1(CMD_PAUSE | MASK_08); + /* upload brs */ + WRITE_RPS1(CMD_UPLOAD | MASK_08); + /* load video-dma3 NumLines3 and NumBytes3 */ + WRITE_RPS1(CMD_WR_REG | (1 << 8) | (NUM_LINE_BYTE3/4)); + /* dev->vbi_count*2 lines, 720 pixel (= 1440 Bytes) */ + WRITE_RPS1((2 << 16) | (vbi_pixel_to_capture)); + /* load brs-control register */ + WRITE_RPS1(CMD_WR_REG | (1 << 8) | (BRS_CTRL/4)); + /* Set BRS right: note: this is an experimental value for BXO (=> PAL!) */ + WRITE_RPS1((540 << 7) | (5 << 19)); // 5 == vbi_start + /* wait for brs_done */ + WRITE_RPS1(CMD_PAUSE | MASK_08); + /* upload brs and video-dma3*/ + WRITE_RPS1(CMD_UPLOAD | MASK_08 | MASK_04); + /* load mc2 register: enable dma3 */ + WRITE_RPS1(CMD_WR_REG | (1 << 8) | (MC1/4)); + WRITE_RPS1(MASK_20 | MASK_04); + /* generate interrupt */ + WRITE_RPS1(CMD_INTERRUPT); + /* stop rps1 */ + WRITE_RPS1(CMD_STOP); + /* we have to do the workaround twice to be sure that everything is ok */ for(i = 0; i < 2; i++) { @@ -89,7 +89,7 @@ static int vbi_workaround(struct saa7146_dev *dev) saa7146_write(dev, NUM_LINE_BYTE3, (1<<16)|(2<<0)); saa7146_write(dev, MC2, MASK_04|MASK_20); - + /* enable rps1 irqs */ SAA7146_IER_ENABLE(dev,MASK_28); @@ -99,12 +99,12 @@ static int vbi_workaround(struct saa7146_dev *dev) /* start rps1 to enable workaround */ saa7146_write(dev, RPS_ADDR1, dev->d_rps1.dma_handle); - saa7146_write(dev, MC1, (MASK_13 | MASK_29)); - + saa7146_write(dev, MC1, (MASK_13 | MASK_29)); + schedule(); DEB_VBI(("brs bug workaround %d/1.\n",i)); - + remove_wait_queue(&vv->vbi_wq, &wait); current->state = TASK_RUNNING; @@ -115,7 +115,7 @@ static int vbi_workaround(struct saa7146_dev *dev) saa7146_write(dev, MC1, MASK_20); if(signal_pending(current)) { - + DEB_VBI(("aborted (rps:0x%08x).\n",saa7146_read(dev,RPS_ADDR1))); /* stop rps1 for sure */ @@ -154,6 +154,7 @@ static void saa7146_set_vbi_capture(struct saa7146_dev *dev, struct saa7146_buf vdma3.pitch = vbi_pixel_to_capture; vdma3.base_page = buf->pt[2].dma | ME1; vdma3.num_line_byte = (16 << 16) | vbi_pixel_to_capture; + saa7146_write_out_dma(dev, 3, &vdma3); /* write beginning of rps-program */ @@ -165,29 +166,29 @@ static void saa7146_set_vbi_capture(struct saa7146_dev *dev, struct saa7146_buf capture and might cause that the first buffer is only half filled (with only one field). but since this is some sort of streaming data, this is not that negative. but by doing this, we can use the whole engine from video-buf.c... */ - + /* WRITE_RPS1(CMD_PAUSE | CMD_OAN | CMD_SIG1 | e_wait); WRITE_RPS1(CMD_PAUSE | CMD_OAN | CMD_SIG1 | o_wait); */ /* set bit 1 */ - WRITE_RPS1(CMD_WR_REG | (1 << 8) | (MC2/4)); + WRITE_RPS1(CMD_WR_REG | (1 << 8) | (MC2/4)); WRITE_RPS1(MASK_28 | MASK_12); - + /* turn on video-dma3 */ - WRITE_RPS1(CMD_WR_REG_MASK | (MC1/4)); - WRITE_RPS1(MASK_04 | MASK_20); /* => mask */ + WRITE_RPS1(CMD_WR_REG_MASK | (MC1/4)); + WRITE_RPS1(MASK_04 | MASK_20); /* => mask */ WRITE_RPS1(MASK_04 | MASK_20); /* => values */ - + /* wait for o_fid_a/b / e_fid_a/b toggle */ WRITE_RPS1(CMD_PAUSE | o_wait); WRITE_RPS1(CMD_PAUSE | e_wait); /* generate interrupt */ - WRITE_RPS1(CMD_INTERRUPT); + WRITE_RPS1(CMD_INTERRUPT); /* stop */ - WRITE_RPS1(CMD_STOP); + WRITE_RPS1(CMD_STOP); /* enable rps1 irqs */ SAA7146_IER_ENABLE(dev, MASK_28); @@ -196,7 +197,7 @@ static void saa7146_set_vbi_capture(struct saa7146_dev *dev, struct saa7146_buf saa7146_write(dev, RPS_ADDR1, dev->d_rps1.dma_handle); /* turn on rps */ - saa7146_write(dev, MC1, (MASK_13 | MASK_29)); + saa7146_write(dev, MC1, (MASK_13 | MASK_29)); } static int buffer_activate(struct saa7146_dev *dev, @@ -228,12 +229,12 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e size = lines * llength; DEB_VBI(("vb:%p\n",vb)); - + if (0 != buf->vb.baddr && buf->vb.bsize < size) { DEB_VBI(("size mismatch.\n")); return -EINVAL; } - + if (buf->vb.size != size) saa7146_dma_free(dev,buf); @@ -246,7 +247,7 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e saa7146_pgtable_free(dev->pci, &buf->pt[2]); saa7146_pgtable_alloc(dev->pci, &buf->pt[2]); - err = videobuf_iolock(dev->pci,&buf->vb,NULL); + err = videobuf_iolock(dev->pci,&buf->vb, NULL); if (err) goto oops; err = saa7146_pgtable_build_single(dev->pci, &buf->pt[2], buf->vb.dma.sglist, buf->vb.dma.sglen); @@ -268,7 +269,7 @@ static int buffer_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb,e static int buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned int *size) { int llength,lines; - + lines = 16 * 2 ; /* 2 fields */ llength = vbi_pixel_to_capture; @@ -287,7 +288,7 @@ static void buffer_queue(struct videobuf_queue *q, struct videobuf_buffer *vb) struct saa7146_dev *dev = fh->dev; struct saa7146_vv *vv = dev->vv_data; struct saa7146_buf *buf = (struct saa7146_buf *)vb; - + DEB_VBI(("vb:%p\n",vb)); saa7146_buffer_queue(dev,&vv->vbi_q,buf); } @@ -298,7 +299,7 @@ static void buffer_release(struct videobuf_queue *q, struct videobuf_buffer *vb) struct saa7146_fh *fh = file->private_data; struct saa7146_dev *dev = fh->dev; struct saa7146_buf *buf = (struct saa7146_buf *)vb; - + DEB_VBI(("vb:%p\n",vb)); saa7146_dma_free(dev,buf); } @@ -318,7 +319,7 @@ static void vbi_stop(struct saa7146_fh *fh, struct file *file) struct saa7146_vv *vv = dev->vv_data; unsigned long flags; DEB_VBI(("dev:%p, fh:%p\n",dev, fh)); - + spin_lock_irqsave(&dev->slock,flags); /* disable rps1 */ @@ -349,7 +350,7 @@ static void vbi_read_timeout(unsigned long data) struct file *file = (struct file*)data; struct saa7146_fh *fh = file->private_data; struct saa7146_dev *dev = fh->dev; - + DEB_VBI(("dev:%p, fh:%p\n",dev, fh)); vbi_stop(fh, file); @@ -372,10 +373,10 @@ static void vbi_init(struct saa7146_dev *dev, struct saa7146_vv *vv) static int vbi_open(struct saa7146_dev *dev, struct file *file) { struct saa7146_fh *fh = (struct saa7146_fh *)file->private_data; - + u32 arbtr_ctrl = saa7146_read(dev, PCI_BT_V1); int ret = 0; - + DEB_VBI(("dev:%p, fh:%p\n",dev,fh)); ret = saa7146_res_get(fh, RESOURCE_DMA3_BRS); @@ -388,12 +389,12 @@ static int vbi_open(struct saa7146_dev *dev, struct file *file) arbtr_ctrl &= ~0x1f0000; arbtr_ctrl |= 0x1d0000; saa7146_write(dev, PCI_BT_V1, arbtr_ctrl); - saa7146_write(dev, MC2, (MASK_04|MASK_20)); - + saa7146_write(dev, MC2, (MASK_04|MASK_20)); + memset(&fh->vbi_fmt,0,sizeof(fh->vbi_fmt)); fh->vbi_fmt.sampling_rate = 27000000; - fh->vbi_fmt.offset = 248; /* todo */ + fh->vbi_fmt.offset = 248; /* todo */ fh->vbi_fmt.samples_per_line = vbi_pixel_to_capture; fh->vbi_fmt.sample_format = V4L2_PIX_FMT_GREY; @@ -428,7 +429,7 @@ static int vbi_open(struct saa7146_dev *dev, struct file *file) } /* upload brs register */ - saa7146_write(dev, MC2, (MASK_08|MASK_24)); + saa7146_write(dev, MC2, (MASK_08|MASK_24)); return 0; } @@ -471,7 +472,7 @@ static ssize_t vbi_read(struct file *file, char __user *data, size_t count, loff ssize_t ret = 0; DEB_VBI(("dev:%p, fh:%p\n",dev,fh)); - + if( NULL == vv->vbi_streaming ) { // fixme: check if dma3 is available // fixme: activate vbi engine here if necessary. (really?) diff --git a/drivers/media/common/saa7146_video.c b/drivers/media/common/saa7146_video.c index 58ae258a2828..8dd4d15ca36d 100644 --- a/drivers/media/common/saa7146_video.c +++ b/drivers/media/common/saa7146_video.c @@ -14,64 +14,64 @@ MODULE_PARM_DESC(max_memory, "maximum memory usage for capture buffers (default: /* format descriptions for capture and preview */ static struct saa7146_format formats[] = { { - .name = "RGB-8 (3-3-2)", + .name = "RGB-8 (3-3-2)", .pixelformat = V4L2_PIX_FMT_RGB332, - .trans = RGB08_COMPOSED, + .trans = RGB08_COMPOSED, .depth = 8, .flags = 0, }, { - .name = "RGB-16 (5/B-6/G-5/R)", + .name = "RGB-16 (5/B-6/G-5/R)", .pixelformat = V4L2_PIX_FMT_RGB565, - .trans = RGB16_COMPOSED, + .trans = RGB16_COMPOSED, .depth = 16, .flags = 0, }, { - .name = "RGB-24 (B-G-R)", + .name = "RGB-24 (B-G-R)", .pixelformat = V4L2_PIX_FMT_BGR24, - .trans = RGB24_COMPOSED, + .trans = RGB24_COMPOSED, .depth = 24, .flags = 0, }, { - .name = "RGB-32 (B-G-R)", + .name = "RGB-32 (B-G-R)", .pixelformat = V4L2_PIX_FMT_BGR32, - .trans = RGB32_COMPOSED, + .trans = RGB32_COMPOSED, .depth = 32, .flags = 0, }, { - .name = "RGB-32 (R-G-B)", + .name = "RGB-32 (R-G-B)", .pixelformat = V4L2_PIX_FMT_RGB32, - .trans = RGB32_COMPOSED, + .trans = RGB32_COMPOSED, .depth = 32, .flags = 0, .swap = 0x2, }, { - .name = "Greyscale-8", + .name = "Greyscale-8", .pixelformat = V4L2_PIX_FMT_GREY, - .trans = Y8, + .trans = Y8, .depth = 8, .flags = 0, }, { - .name = "YUV 4:2:2 planar (Y-Cb-Cr)", + .name = "YUV 4:2:2 planar (Y-Cb-Cr)", .pixelformat = V4L2_PIX_FMT_YUV422P, - .trans = YUV422_DECOMPOSED, + .trans = YUV422_DECOMPOSED, .depth = 16, .flags = FORMAT_BYTE_SWAP|FORMAT_IS_PLANAR, }, { - .name = "YVU 4:2:0 planar (Y-Cb-Cr)", + .name = "YVU 4:2:0 planar (Y-Cb-Cr)", .pixelformat = V4L2_PIX_FMT_YVU420, - .trans = YUV420_DECOMPOSED, + .trans = YUV420_DECOMPOSED, .depth = 12, .flags = FORMAT_BYTE_SWAP|FORMAT_IS_PLANAR, }, { - .name = "YUV 4:2:0 planar (Y-Cb-Cr)", + .name = "YUV 4:2:0 planar (Y-Cb-Cr)", .pixelformat = V4L2_PIX_FMT_YUV420, - .trans = YUV420_DECOMPOSED, + .trans = YUV420_DECOMPOSED, .depth = 12, .flags = FORMAT_IS_PLANAR, }, { - .name = "YUV 4:2:2 (U-Y-V-Y)", + .name = "YUV 4:2:2 (U-Y-V-Y)", .pixelformat = V4L2_PIX_FMT_UYVY, - .trans = YUV422_COMPOSED, + .trans = YUV422_COMPOSED, .depth = 16, .flags = 0, } @@ -80,19 +80,19 @@ static struct saa7146_format formats[] = { /* unfortunately, the saa7146 contains a bug which prevents it from doing on-the-fly byte swaps. due to this, it's impossible to provide additional *packed* formats, which are simply byte swapped (like V4L2_PIX_FMT_YUYV) ... 8-( */ - + static int NUM_FORMATS = sizeof(formats)/sizeof(struct saa7146_format); struct saa7146_format* format_by_fourcc(struct saa7146_dev *dev, int fourcc) { int i, j = NUM_FORMATS; - + for (i = 0; i < j; i++) { if (formats[i].pixelformat == fourcc) { return formats+i; } } - + DEB_D(("unknown pixelformat:'%4.4s'\n",(char *)&fourcc)); return NULL; } @@ -182,7 +182,7 @@ static int try_fmt(struct saa7146_fh *fh, struct v4l2_format *f) struct saa7146_dev *dev = fh->dev; struct saa7146_vv *vv = dev->vv_data; int err; - + switch (f->type) { case V4L2_BUF_TYPE_VIDEO_CAPTURE: { @@ -201,7 +201,7 @@ static int try_fmt(struct saa7146_fh *fh, struct v4l2_format *f) field = f->fmt.pix.field; maxw = vv->standard->h_max_out; maxh = vv->standard->v_max_out; - + if (V4L2_FIELD_ANY == field) { field = (f->fmt.pix.height > maxh/2) ? V4L2_FIELD_INTERLACED @@ -237,10 +237,10 @@ static int try_fmt(struct saa7146_fh *fh, struct v4l2_format *f) if (f->fmt.pix.bytesperline < calc_bpl) f->fmt.pix.bytesperline = calc_bpl; - + if (f->fmt.pix.bytesperline > (2*PAGE_SIZE * fmt->depth)/8) /* arbitrary constraint */ f->fmt.pix.bytesperline = calc_bpl; - + f->fmt.pix.sizeimage = f->fmt.pix.bytesperline * f->fmt.pix.height; DEB_D(("w:%d, h:%d, bytesperline:%d, sizeimage:%d\n",f->fmt.pix.width,f->fmt.pix.height,f->fmt.pix.bytesperline,f->fmt.pix.sizeimage)); @@ -277,36 +277,36 @@ int saa7146_start_preview(struct saa7146_fh *fh) if (IS_CAPTURE_ACTIVE(fh) != 0) { DEB_D(("streaming capture is active.\n")); return -EBUSY; - } + } /* check if overlay is running */ - if (IS_OVERLAY_ACTIVE(fh) != 0) { + if (IS_OVERLAY_ACTIVE(fh) != 0) { if (vv->video_fh == fh) { - DEB_D(("overlay is already active.\n")); - return 0; - } + DEB_D(("overlay is already active.\n")); + return 0; + } DEB_D(("overlay is already active in another open.\n")); return -EBUSY; } - + if (0 == saa7146_res_get(fh, RESOURCE_DMA1_HPS|RESOURCE_DMA2_CLP)) { DEB_D(("cannot get necessary overlay resources\n")); return -EBUSY; - } - + } + err = try_win(dev,&fh->ov.win); if (0 != err) { saa7146_res_free(vv->video_fh, RESOURCE_DMA1_HPS|RESOURCE_DMA2_CLP); return -EBUSY; } - + vv->ov_data = &fh->ov; DEB_D(("%dx%d+%d+%d %s field=%s\n", fh->ov.win.w.width,fh->ov.win.w.height, fh->ov.win.w.left,fh->ov.win.w.top, vv->ov_fmt->name,v4l2_field_names[fh->ov.win.field])); - + if (0 != (ret = saa7146_enable_overlay(fh))) { DEB_D(("enabling overlay failed: %d\n",ret)); saa7146_res_free(vv->video_fh, RESOURCE_DMA1_HPS|RESOURCE_DMA2_CLP); @@ -333,7 +333,7 @@ int saa7146_stop_preview(struct saa7146_fh *fh) } /* check if overlay is running at all */ - if ((vv->video_status & STATUS_OVERLAY) == 0) { + if ((vv->video_status & STATUS_OVERLAY) == 0) { DEB_D(("no active overlay.\n")); return 0; } @@ -347,7 +347,7 @@ int saa7146_stop_preview(struct saa7146_fh *fh) vv->video_fh = NULL; saa7146_disable_overlay(fh); - + saa7146_res_free(fh, RESOURCE_DMA1_HPS|RESOURCE_DMA2_CLP); return 0; @@ -359,7 +359,7 @@ static int s_fmt(struct saa7146_fh *fh, struct v4l2_format *f) struct saa7146_vv *vv = dev->vv_data; int err; - + switch (f->type) { case V4L2_BUF_TYPE_VIDEO_CAPTURE: DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: dev:%p, fh:%p\n",dev,fh)); @@ -387,7 +387,7 @@ static int s_fmt(struct saa7146_fh *fh, struct v4l2_format *f) up(&dev->lock); return -EFAULT; } - + /* fh->ov.fh is used to indicate that we have valid overlay informations, too */ fh->ov.fh = fh; @@ -395,8 +395,8 @@ static int s_fmt(struct saa7146_fh *fh, struct v4l2_format *f) /* check if our current overlay is active */ if (IS_OVERLAY_ACTIVE(fh) != 0) { - saa7146_stop_preview(fh); - saa7146_start_preview(fh); + saa7146_stop_preview(fh); + saa7146_start_preview(fh); } return 0; default: @@ -454,7 +454,7 @@ static int NUM_CONTROLS = sizeof(controls)/sizeof(struct v4l2_queryctrl); static struct v4l2_queryctrl* ctrl_by_id(int id) { int i; - + for (i = 0; i < NUM_CONTROLS; i++) if (controls[i].id == id) return controls+i; @@ -515,7 +515,7 @@ static int set_control(struct saa7146_fh *fh, struct v4l2_control *c) DEB_D(("unknown control %d\n",c->id)); return -EINVAL; } - + down(&dev->lock); switch (ctrl->type) { @@ -578,10 +578,10 @@ static int set_control(struct saa7146_fh *fh, struct v4l2_control *c) } } up(&dev->lock); - + if (IS_OVERLAY_ACTIVE(fh) != 0) { - saa7146_stop_preview(fh); - saa7146_start_preview(fh); + saa7146_stop_preview(fh); + saa7146_start_preview(fh); } return 0; } @@ -633,7 +633,7 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu return -1; } } - + ptr1 = pt1->cpu; ptr2 = pt2->cpu; ptr3 = pt3->cpu; @@ -649,14 +649,14 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu for(j=0;j<40;j++) { printk("ptr1 %d: 0x%08x\n",j,ptr1[j]); } -*/ +*/ /* if we have a user buffer, the first page may not be aligned to a page boundary. */ pt1->offset = buf->vb.dma.sglist->offset; pt2->offset = pt1->offset+o1; pt3->offset = pt1->offset+o2; - + /* create video-dma2 page table */ ptr1 = pt1->cpu; for(i = m1; i <= m2 ; i++, ptr2++) { @@ -675,7 +675,7 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu for(;i<1024;i++,ptr3++) { *ptr3 = fill; } - /* finally: finish up video-dma1 page table */ + /* finally: finish up video-dma1 page table */ ptr1 = pt1->cpu+m1; fill = pt1->cpu[m1]; for(i=m1;i<1024;i++,ptr1++) { @@ -694,7 +694,7 @@ static int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *bu for(j=0;j<40;j++) { printk("ptr3 %d: 0x%08x\n",j,ptr3[j]); } -*/ +*/ } else { struct saa7146_pgtable *pt = &buf->pt[0]; return saa7146_pgtable_build_single(pci, pt, list, length); @@ -719,9 +719,9 @@ static int video_begin(struct saa7146_fh *fh) if ((vv->video_status & STATUS_CAPTURE) != 0) { if (vv->video_fh == fh) { - DEB_S(("already capturing.\n")); + DEB_S(("already capturing.\n")); return 0; - } + } DEB_S(("already capturing in another open.\n")); return -EBUSY; } @@ -735,7 +735,7 @@ static int video_begin(struct saa7146_fh *fh) return err; } } - + fmt = format_by_fourcc(dev,fh->video_fmt.pixelformat); /* we need to have a valid format set here */ BUG_ON(NULL == fmt); @@ -811,7 +811,7 @@ static int video_end(struct saa7146_fh *fh, struct file *file) saa7146_write(dev, MC1, dmas); spin_unlock_irqrestore(&dev->slock, flags); - + vv->video_fh = NULL; vv->video_status = 0; @@ -820,7 +820,7 @@ static int video_end(struct saa7146_fh *fh, struct file *file) if (vv->ov_suspend != NULL) { saa7146_start_preview(vv->ov_suspend); vv->ov_suspend = NULL; -} + } return 0; } @@ -847,7 +847,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int if( cmd == dev->ext_vv_data->ioctls[ee].cmd ) break; } - + if( 0 != (dev->ext_vv_data->ioctls[ee].flags & SAA7146_EXCLUSIVE) ) { DEB_D(("extension handles ioctl exclusive.\n")); result = dev->ext_vv_data->ioctl(fh, cmd, arg); @@ -860,7 +860,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int return result; } } - + /* fixme: add handle "after" case (is it still needed?) */ switch (fh->type) { @@ -880,13 +880,13 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int } switch (cmd) { - case VIDIOC_QUERYCAP: + case VIDIOC_QUERYCAP: { struct v4l2_capability *cap = arg; memset(cap,0,sizeof(*cap)); DEB_EE(("VIDIOC_QUERYCAP\n")); - + strcpy(cap->driver, "saa7146 v4l2"); strlcpy(cap->card, dev->ext->name, sizeof(cap->card)); sprintf(cap->bus_info,"PCI:%s", pci_name(dev->pci)); @@ -894,7 +894,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OVERLAY | - V4L2_CAP_READWRITE | + V4L2_CAP_READWRITE | V4L2_CAP_STREAMING; cap->capabilities |= dev->ext_vv_data->capabilities; return 0; @@ -925,18 +925,18 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int if (NULL == fmt) { return -EINVAL; } - + /* planar formats are not allowed for overlay video, clipping and video dma would clash */ if (0 != (fmt->flags & FORMAT_IS_PLANAR)) { DEB_S(("planar pixelformat '%4.4s' not allowed for overlay\n",(char *)&fmt->pixelformat)); } /* check if overlay is running */ - if (IS_OVERLAY_ACTIVE(fh) != 0) { + if (IS_OVERLAY_ACTIVE(fh) != 0) { if (vv->video_fh != fh) { DEB_D(("refusing to change framebuffer informations while overlay is active in another open.\n")); return -EBUSY; - } + } } down(&dev->lock); @@ -971,7 +971,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int break; } default: - return -EINVAL; + return -EINVAL; } DEB_EE(("VIDIOC_ENUM_FMT: type:%d, index:%d\n",f->type,f->index)); @@ -987,12 +987,12 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int (c->id < V4L2_CID_PRIVATE_BASE || c->id >= V4L2_CID_PRIVATE_LASTP1)) return -EINVAL; - + ctrl = ctrl_by_id(c->id); if( NULL == ctrl ) { return -EINVAL; /* - c->flags = V4L2_CTRL_FLAG_DISABLED; + c->flags = V4L2_CTRL_FLAG_DISABLED; return 0; */ } @@ -1006,10 +1006,6 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int return get_control(fh,arg); } case VIDIOC_S_CTRL: - - - - { DEB_EE(("VIDIOC_S_CTRL\n")); err = set_control(fh,arg); @@ -1073,7 +1069,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int v4l2_std_id *id = arg; int found = 0; int i, err; - + DEB_EE(("VIDIOC_S_STD\n")); if ((vv->video_status & STATUS_CAPTURE) == STATUS_CAPTURE) { @@ -1091,7 +1087,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int } down(&dev->lock); - + for(i = 0; i < dev->ext_vv_data->num_stds; i++) if (*id & dev->ext_vv_data->stds[i].id) break; @@ -1164,8 +1160,8 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int err = video_begin(fh); if( 0 != err) { - return err; - } + return err; + } err = videobuf_streamon(q); return err; } @@ -1190,7 +1186,7 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int err = videobuf_streamoff(q); if (0 != err) { DEB_D(("warning: videobuf_streamoff() failed.\n")); - video_end(fh, file); + video_end(fh, file); } else { err = video_end(fh, file); } @@ -1203,9 +1199,9 @@ int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int int i; /* fixme: number of capture buffers and sizes for v4l apps */ - int gbuffers = 2; + int gbuffers = 2; int gbufsize = 768*576*4; - + DEB_D(("VIDIOCGMBUF \n")); q = &fh->video_q; @@ -1242,7 +1238,7 @@ static int buffer_activate (struct saa7146_dev *dev, buf->vb.state = STATE_ACTIVE; saa7146_set_capture(dev,buf,next); - + mod_timer(&vv->video_q.timeout, jiffies+BUFFER_TIMEOUT); return 0; } @@ -1273,7 +1269,7 @@ static int buffer_prepare(struct videobuf_queue *q, DEB_D(("size mismatch.\n")); return -EINVAL; } - + DEB_CAP(("buffer_prepare [size=%dx%d,bytes=%d,fields=%s]\n", fh->video_fmt.width,fh->video_fmt.height,size,v4l2_field_names[fh->video_fmt.field])); if (buf->vb.width != fh->video_fmt.width || @@ -1288,7 +1284,7 @@ static int buffer_prepare(struct videobuf_queue *q, if (STATE_NEEDS_INIT == buf->vb.state) { struct saa7146_format *sfmt; - + buf->vb.bytesperline = fh->video_fmt.bytesperline; buf->vb.width = fh->video_fmt.width; buf->vb.height = fh->video_fmt.height; @@ -1296,9 +1292,9 @@ static int buffer_prepare(struct videobuf_queue *q, buf->vb.field = field; buf->fmt = &fh->video_fmt; buf->vb.field = fh->video_fmt.field; - + sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); - + if( 0 != IS_PLANAR(sfmt->trans)) { saa7146_pgtable_free(dev->pci, &buf->pt[0]); saa7146_pgtable_free(dev->pci, &buf->pt[1]); @@ -1311,7 +1307,7 @@ static int buffer_prepare(struct videobuf_queue *q, saa7146_pgtable_free(dev->pci, &buf->pt[0]); saa7146_pgtable_alloc(dev->pci, &buf->pt[0]); } - + err = videobuf_iolock(dev->pci,&buf->vb, &vv->ov_fb); if (err) goto oops; @@ -1345,7 +1341,7 @@ static int buffer_setup(struct videobuf_queue *q, unsigned int *count, unsigned if( (*count * *size) > (max_memory*1048576) ) { *count = (max_memory*1048576) / *size; } - + DEB_CAP(("%d buffers, %d bytes each.\n",*count,*size)); return 0; @@ -1358,7 +1354,7 @@ static void buffer_queue(struct videobuf_queue *q, struct videobuf_buffer *vb) struct saa7146_dev *dev = fh->dev; struct saa7146_vv *vv = dev->vv_data; struct saa7146_buf *buf = (struct saa7146_buf *)vb; - + DEB_CAP(("vbuf:%p\n",vb)); saa7146_buffer_queue(fh->dev,&vv->video_q,buf); } @@ -1370,7 +1366,7 @@ static void buffer_release(struct videobuf_queue *q, struct videobuf_buffer *vb) struct saa7146_fh *fh = file->private_data; struct saa7146_dev *dev = fh->dev; struct saa7146_buf *buf = (struct saa7146_buf *)vb; - + DEB_CAP(("vbuf:%p\n",vb)); saa7146_dma_free(dev,buf); } @@ -1434,13 +1430,13 @@ static void video_close(struct saa7146_dev *dev, struct file *file) struct saa7146_fh *fh = (struct saa7146_fh *)file->private_data; struct saa7146_vv *vv = dev->vv_data; int err; - + if (IS_CAPTURE_ACTIVE(fh) != 0) { - err = video_end(fh, file); + err = video_end(fh, file); } else if (IS_OVERLAY_ACTIVE(fh) != 0) { err = saa7146_stop_preview(fh); } - + /* hmm, why is this function declared void? */ /* return err */ } @@ -1450,7 +1446,7 @@ static void video_irq_done(struct saa7146_dev *dev, unsigned long st) { struct saa7146_vv *vv = dev->vv_data; struct saa7146_dmaqueue *q = &vv->video_q; - + spin_lock(&dev->slock); DEB_CAP(("called.\n")); @@ -1473,11 +1469,11 @@ static ssize_t video_read(struct file *file, char __user *data, size_t count, lo DEB_EE(("called.\n")); if ((vv->video_status & STATUS_CAPTURE) != 0) { - /* fixme: should we allow read() captures while streaming capture? */ + /* fixme: should we allow read() captures while streaming capture? */ if (vv->video_fh == fh) { - DEB_S(("already capturing.\n")); - return -EBUSY; - } + DEB_S(("already capturing.\n")); + return -EBUSY; + } DEB_S(("already capturing in another open.\n")); return -EBUSY; } @@ -1487,10 +1483,10 @@ static ssize_t video_read(struct file *file, char __user *data, size_t count, lo goto out; } - ret = videobuf_read_one(&fh->video_q, data, count, ppos, + ret = videobuf_read_one(&fh->video_q , data, count, ppos, file->f_flags & O_NONBLOCK); if (ret != 0) { - video_end(fh, file); + video_end(fh, file); } else { ret = video_end(fh, file); } @@ -1500,7 +1496,7 @@ out: saa7146_start_preview(vv->ov_suspend); vv->ov_suspend = NULL; } - + return ret; } diff --git a/drivers/media/dvb/Kconfig b/drivers/media/dvb/Kconfig index c9a5138e4215..883ec08490f4 100644 --- a/drivers/media/dvb/Kconfig +++ b/drivers/media/dvb/Kconfig @@ -8,13 +8,13 @@ config DVB bool "DVB For Linux" depends on NET && INET ---help--- - Support Digital Video Broadcasting hardware. Enable this if you - own a DVB adapter and want to use it or if you compile Linux for + Support Digital Video Broadcasting hardware. Enable this if you + own a DVB adapter and want to use it or if you compile Linux for a digital SetTopBox. API specs and user tools are available from <http://www.linuxtv.org/>. - Please report problems regarding this driver to the LinuxDVB + Please report problems regarding this driver to the LinuxDVB mailing list. If unsure say N. diff --git a/drivers/media/dvb/bt8xx/dst.c b/drivers/media/dvb/bt8xx/dst.c index 62830d177aae..859946703d4b 100644 --- a/drivers/media/dvb/bt8xx/dst.c +++ b/drivers/media/dvb/bt8xx/dst.c @@ -141,7 +141,7 @@ static int dst_gpio_inb(struct dst_state *state, u8 * result) } #define DST_I2C_ENABLE 1 -#define DST_8820 2 +#define DST_8820 2 static int dst_reset8820(struct dst_state *state) { @@ -1036,7 +1036,7 @@ static struct dvb_frontend_ops dst_dvbs_ops = { .frequency_tolerance = 29500, .symbol_rate_min = 1000000, .symbol_rate_max = 45000000, - /* . symbol_rate_tolerance = ???,*/ + /* . symbol_rate_tolerance = ???,*/ .caps = FE_CAN_FEC_AUTO | FE_CAN_QPSK }, @@ -1066,7 +1066,7 @@ static struct dvb_frontend_ops dst_dvbc_ops = { .frequency_max = 858000000, .symbol_rate_min = 1000000, .symbol_rate_max = 45000000, - /* . symbol_rate_tolerance = ???,*/ + /* . symbol_rate_tolerance = ???,*/ .caps = FE_CAN_FEC_AUTO | FE_CAN_QAM_AUTO }, diff --git a/drivers/media/dvb/bt8xx/dvb-bt8xx.c b/drivers/media/dvb/bt8xx/dvb-bt8xx.c index 80e1f52dea49..0f8614cebd53 100644 --- a/drivers/media/dvb/bt8xx/dvb-bt8xx.c +++ b/drivers/media/dvb/bt8xx/dvb-bt8xx.c @@ -1,5 +1,5 @@ /* - * Bt8xx based DVB adapter driver + * Bt8xx based DVB adapter driver * * Copyright (C) 2002,2003 Florian Schirmer <jolt@tuxbox.org> * @@ -71,7 +71,7 @@ static int dvb_bt8xx_start_feed(struct dvb_demux_feed *dvbdmxfeed) int rc; dprintk("dvb_bt8xx: start_feed\n"); - + if (!dvbdmx->dmx.frontend) return -EINVAL; @@ -91,10 +91,10 @@ static int dvb_bt8xx_stop_feed(struct dvb_demux_feed *dvbdmxfeed) struct dvb_bt8xx_card *card = dvbdmx->priv; dprintk("dvb_bt8xx: stop_feed\n"); - + if (!dvbdmx->dmx.frontend) return -EINVAL; - + down(&card->lock); card->nfeeds--; if (card->nfeeds == 0) @@ -117,7 +117,7 @@ static int is_pci_slot_eq(struct pci_dev* adev, struct pci_dev* bdev) static struct bt878 __init *dvb_bt8xx_878_match(unsigned int bttv_nr, struct pci_dev* bttv_pci_dev) { unsigned int card_nr; - + /* Hmm, n squared. Hope n is small */ for (card_nr = 0; card_nr < bt878_num; card_nr++) { if (is_pci_slot_eq(bt878[card_nr].dev, bttv_pci_dev)) @@ -167,9 +167,9 @@ static int thomson_dtt7579_pll_set(struct dvb_frontend* fe, struct dvb_frontend_ pllbuf[0] = 0xc0; // Note: non-linux standard PLL i2c address pllbuf[1] = div >> 8; - pllbuf[2] = div & 0xff; - pllbuf[3] = cp; - pllbuf[4] = bs; + pllbuf[2] = div & 0xff; + pllbuf[3] = cp; + pllbuf[4] = bs; return 0; } @@ -184,25 +184,25 @@ static struct mt352_config thomson_dtt7579_config = { static int cx24108_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params) { u32 freq = params->frequency; - - int i, a, n, pump; + + int i, a, n, pump; u32 band, pll; - - + + u32 osci[]={950000,1019000,1075000,1178000,1296000,1432000, 1576000,1718000,1856000,2036000,2150000}; u32 bandsel[]={0,0x00020000,0x00040000,0x00100800,0x00101000, 0x00102000,0x00104000,0x00108000,0x00110000, 0x00120000,0x00140000}; - + #define XTAL 1011100 /* Hz, really 1.0111 MHz and a /10 prescaler */ printk("cx24108 debug: entering SetTunerFreq, freq=%d\n",freq); - + /* This is really the bit driving the tuner chip cx24108 */ - + if(freq<950000) freq=950000; /* kHz */ if(freq>2150000) freq=2150000; /* satellite IF is 950..2150MHz */ - + /* decide which VCO to use for the input frequency */ for(i=1;(i<sizeof(osci)/sizeof(osci[0]))&&(osci[i]<freq);i++); printk("cx24108 debug: select vco #%d (f=%d)\n",i,freq); @@ -210,7 +210,7 @@ static int cx24108_pll_set(struct dvb_frontend* fe, struct dvb_frontend_paramete /* the gain values must be set by SetSymbolrate */ /* compute the pll divider needed, from Conexant data sheet, resolved for (n*32+a), remember f(vco) is f(receive) *2 or *4, - depending on the divider bit. It is set to /4 on the 2 lowest + depending on the divider bit. It is set to /4 on the 2 lowest bands */ n=((i<=2?2:1)*freq*10L)/(XTAL/100); a=n%32; n/=32; if(a==0) n--; @@ -348,9 +348,9 @@ static int advbt771_samsung_tdtc9251dh0_pll_set(struct dvb_frontend* fe, struct pllbuf[0] = 0xc2; // Note: non-linux standard PLL i2c address pllbuf[1] = div >> 8; - pllbuf[2] = div & 0xff; - pllbuf[3] = cp; - pllbuf[4] = bs; + pllbuf[2] = div & 0xff; + pllbuf[3] = cp; + pllbuf[4] = bs; return 0; } @@ -451,7 +451,7 @@ static void frontend_init(struct dvb_bt8xx_card *card, u32 type) break; } break; - + case BTTV_PINNACLESAT: card->fe = cx24110_attach(&pctvsat_config, card->i2c_adapter); if (card->fe != NULL) { @@ -484,7 +484,7 @@ static int __init dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type) THIS_MODULE)) < 0) { printk("dvb_bt8xx: dvb_register_adapter failed (errno = %d)\n", result); return result; - + } card->dvb_adapter->priv = card; @@ -500,7 +500,7 @@ static int __init dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type) card->demux.start_feed = dvb_bt8xx_start_feed; card->demux.stop_feed = dvb_bt8xx_stop_feed; card->demux.write_to_decoder = NULL; - + if ((result = dvb_dmx_init(&card->demux)) < 0) { printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); @@ -511,7 +511,7 @@ static int __init dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type) card->dmxdev.filternum = 256; card->dmxdev.demux = &card->demux.dmx; card->dmxdev.capabilities = 0; - + if ((result = dvb_dmxdev_init(&card->dmxdev, card->dvb_adapter)) < 0) { printk("dvb_bt8xx: dvb_dmxdev_init failed (errno = %d)\n", result); @@ -530,7 +530,7 @@ static int __init dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type) dvb_unregister_adapter(card->dvb_adapter); return result; } - + card->fe_mem.source = DMX_MEMORY_FE; if ((result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_mem)) < 0) { @@ -557,7 +557,7 @@ static int __init dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type) dvb_net_init(card->dvb_adapter, &card->dvbnet, &card->demux.dmx); tasklet_init(&card->bt->tasklet, dvb_bt8xx_task, (unsigned long) card); - + frontend_init(card, type); return 0; @@ -588,17 +588,17 @@ static int dvb_bt8xx_probe(struct device *dev) card->op_sync_orin = 0; card->irq_err_ignore = 0; break; - + #ifdef BTTV_DVICO_DVBT_LITE case BTTV_DVICO_DVBT_LITE: #endif card->gpio_mode = 0x0400C060; card->op_sync_orin = 0; card->irq_err_ignore = 0; - /* 26, 15, 14, 6, 5 + /* 26, 15, 14, 6, 5 * A_PWRDN DA_DPM DA_SBR DA_IOM_DA - * DA_APP(parallel) */ - break; + * DA_APP(parallel) */ + break; #ifdef BTTV_TWINHAN_VP3021 case BTTV_TWINHAN_VP3021: @@ -609,40 +609,40 @@ static int dvb_bt8xx_probe(struct device *dev) card->gpio_mode = (1 << 26) | (1 << 14) | (1 << 5); card->op_sync_orin = 0; card->irq_err_ignore = 0; - /* A_PWRDN DA_SBR DA_APP (high speed serial) */ - break; + /* A_PWRDN DA_SBR DA_APP (high speed serial) */ + break; case BTTV_AVDVBT_771: //case 0x07711461: card->gpio_mode = 0x0400402B; card->op_sync_orin = BT878_RISC_SYNC_MASK; card->irq_err_ignore = 0; /* A_PWRDN DA_SBR DA_APP[0] PKTP=10 RISC_ENABLE FIFO_ENABLE*/ - break; + break; case BTTV_TWINHAN_DST: card->gpio_mode = 0x2204f2c; card->op_sync_orin = BT878_RISC_SYNC_MASK; card->irq_err_ignore = BT878_APABORT | BT878_ARIPERR | BT878_APPERR | BT878_AFBUS; - /* 25,21,14,11,10,9,8,3,2 then - * 0x33 = 5,4,1,0 - * A_SEL=SML, DA_MLB, DA_SBR, - * DA_SDR=f, fifo trigger = 32 DWORDS - * IOM = 0 == audio A/D - * DPM = 0 == digital audio mode - * == async data parallel port - * then 0x33 (13 is set by start_capture) - * DA_APP = async data parallel port, - * ACAP_EN = 1, - * RISC+FIFO ENABLE */ - break; - - default: + /* 25,21,14,11,10,9,8,3,2 then + * 0x33 = 5,4,1,0 + * A_SEL=SML, DA_MLB, DA_SBR, + * DA_SDR=f, fifo trigger = 32 DWORDS + * IOM = 0 == audio A/D + * DPM = 0 == digital audio mode + * == async data parallel port + * then 0x33 (13 is set by start_capture) + * DA_APP = async data parallel port, + * ACAP_EN = 1, + * RISC+FIFO ENABLE */ + break; + + default: printk(KERN_WARNING "dvb_bt8xx: Unknown bttv card type: %d.\n", sub->core->type); kfree(card); return -ENODEV; - } + } dprintk("dvb_bt8xx: identified card%d as %s\n", card->bttv_nr, card->card_name); @@ -661,7 +661,7 @@ static int dvb_bt8xx_probe(struct device *dev) kfree(card); return -EFAULT; -} + } init_MUTEX(&card->bt->gpio_lock); card->bt->bttv_nr = sub->core->nr; @@ -678,23 +678,23 @@ static int dvb_bt8xx_probe(struct device *dev) static int dvb_bt8xx_remove(struct device *dev) { struct dvb_bt8xx_card *card = dev_get_drvdata(dev); - - dprintk("dvb_bt8xx: unloading card%d\n", card->bttv_nr); - bt878_stop(card->bt); - tasklet_kill(&card->bt->tasklet); - dvb_net_release(&card->dvbnet); - card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_mem); - card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw); - dvb_dmxdev_release(&card->dmxdev); - dvb_dmx_release(&card->demux); + dprintk("dvb_bt8xx: unloading card%d\n", card->bttv_nr); + + bt878_stop(card->bt); + tasklet_kill(&card->bt->tasklet); + dvb_net_release(&card->dvbnet); + card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_mem); + card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw); + dvb_dmxdev_release(&card->dmxdev); + dvb_dmx_release(&card->demux); if (card->fe) dvb_unregister_frontend(card->fe); - dvb_unregister_adapter(card->dvb_adapter); - - kfree(card); + dvb_unregister_adapter(card->dvb_adapter); + + kfree(card); return 0; - } +} static struct bttv_sub_driver driver = { .drv = { @@ -721,7 +721,7 @@ static void __exit dvb_bt8xx_exit(void) module_init(dvb_bt8xx_init); module_exit(dvb_bt8xx_exit); + MODULE_DESCRIPTION("Bt8xx based DVB adapter driver"); MODULE_AUTHOR("Florian Schirmer <jolt@tuxbox.org>"); MODULE_LICENSE("GPL"); - diff --git a/drivers/media/dvb/bt8xx/dvb-bt8xx.h b/drivers/media/dvb/bt8xx/dvb-bt8xx.h index 5fb87df65739..f9bf4e2e4f30 100644 --- a/drivers/media/dvb/bt8xx/dvb-bt8xx.h +++ b/drivers/media/dvb/bt8xx/dvb-bt8xx.h @@ -1,5 +1,5 @@ /* - * Bt8xx based DVB adapter driver + * Bt8xx based DVB adapter driver * * Copyright (C) 2002,2003 Florian Schirmer <jolt@tuxbox.org> * Copyright (C) 2002 Peter Hettkamp <peter.hettkamp@t-online.de> @@ -51,7 +51,7 @@ struct dvb_bt8xx_card { u32 irq_err_ignore; struct i2c_adapter *i2c_adapter; struct dvb_net dvbnet; - + struct dvb_frontend* fe; }; diff --git a/drivers/media/dvb/cinergyT2/cinergyT2.c b/drivers/media/dvb/cinergyT2/cinergyT2.c index 2a5be36253fe..f1f539761371 100644 --- a/drivers/media/dvb/cinergyT2/cinergyT2.c +++ b/drivers/media/dvb/cinergyT2/cinergyT2.c @@ -37,13 +37,6 @@ #include "dvb_net.h" - - - - - - - #ifdef CONFIG_DVB_CINERGYT2_TUNING #define STREAM_URB_COUNT (CONFIG_DVB_CINERGYT2_STREAM_URB_COUNT) #define STREAM_BUF_SIZE (CONFIG_DVB_CINERGYT2_STREAM_BUF_SIZE) @@ -66,7 +59,7 @@ static int debug; module_param_named(debug, debug, int, 0644); MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off)."); -#define dprintk(level, args...) \ +#define dprintk(level, args...) \ do { \ if ((debug & level)) { \ printk("%s: %s(): ", __stringify(KBUILD_MODNAME), \ @@ -77,8 +70,8 @@ do { \ enum cinergyt2_ep1_cmd { CINERGYT2_EP1_PID_TABLE_RESET = 0x01, CINERGYT2_EP1_PID_SETUP = 0x02, - CINERGYT2_EP1_CONTROL_STREAM_TRANSFER = 0x03, - CINERGYT2_EP1_SET_TUNER_PARAMETERS = 0x04, + CINERGYT2_EP1_CONTROL_STREAM_TRANSFER = 0x03, + CINERGYT2_EP1_SET_TUNER_PARAMETERS = 0x04, CINERGYT2_EP1_GET_TUNER_STATUS = 0x05, CINERGYT2_EP1_START_SCAN = 0x06, CINERGYT2_EP1_CONTINUE_SCAN = 0x07, @@ -143,7 +136,7 @@ struct cinergyt2 { void *streambuf; dma_addr_t streambuf_dmahandle; - struct urb *stream_urb[STREAM_URB_COUNT]; + struct urb *stream_urb [STREAM_URB_COUNT]; #ifdef ENABLE_RC struct input_dev rc_input_dev; @@ -164,47 +157,47 @@ struct cinergyt2_rc_event { } __attribute__((packed)); static const uint32_t rc_keys [] = { - CINERGYT2_RC_EVENT_TYPE_NEC, 0xfe01eb04, KEY_POWER, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xfd02eb04, KEY_1, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xfc03eb04, KEY_2, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xfb04eb04, KEY_3, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xfa05eb04, KEY_4, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xf906eb04, KEY_5, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xf807eb04, KEY_6, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xf708eb04, KEY_7, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xf609eb04, KEY_8, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xf50aeb04, KEY_9, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xf30ceb04, KEY_0, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xfe01eb04, KEY_POWER, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xfd02eb04, KEY_1, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xfc03eb04, KEY_2, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xfb04eb04, KEY_3, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xfa05eb04, KEY_4, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xf906eb04, KEY_5, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xf807eb04, KEY_6, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xf708eb04, KEY_7, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xf609eb04, KEY_8, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xf50aeb04, KEY_9, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xf30ceb04, KEY_0, CINERGYT2_RC_EVENT_TYPE_NEC, 0xf40beb04, KEY_VIDEO, CINERGYT2_RC_EVENT_TYPE_NEC, 0xf20deb04, KEY_REFRESH, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xf10eeb04, KEY_SELECT, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xf00feb04, KEY_EPG, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xef10eb04, KEY_UP, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xeb14eb04, KEY_DOWN, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xee11eb04, KEY_LEFT, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xec13eb04, KEY_RIGHT, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xed12eb04, KEY_OK, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xea15eb04, KEY_TEXT, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe916eb04, KEY_INFO, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe817eb04, KEY_RED, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe718eb04, KEY_GREEN, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe619eb04, KEY_YELLOW, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe51aeb04, KEY_BLUE, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe31ceb04, KEY_VOLUMEUP, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe11eeb04, KEY_VOLUMEDOWN, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe21deb04, KEY_MUTE, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe41beb04, KEY_CHANNELUP, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xe01feb04, KEY_CHANNELDOWN, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xbf40eb04, KEY_PAUSE, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xb34ceb04, KEY_PLAY, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xa758eb04, KEY_RECORD, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xab54eb04, KEY_PREVIOUS, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xb748eb04, KEY_STOP, - CINERGYT2_RC_EVENT_TYPE_NEC, 0xa35ceb04, KEY_NEXT + CINERGYT2_RC_EVENT_TYPE_NEC, 0xf10eeb04, KEY_SELECT, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xf00feb04, KEY_EPG, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xef10eb04, KEY_UP, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xeb14eb04, KEY_DOWN, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xee11eb04, KEY_LEFT, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xec13eb04, KEY_RIGHT, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xed12eb04, KEY_OK, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xea15eb04, KEY_TEXT, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe916eb04, KEY_INFO, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe817eb04, KEY_RED, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe718eb04, KEY_GREEN, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe619eb04, KEY_YELLOW, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe51aeb04, KEY_BLUE, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe31ceb04, KEY_VOLUMEUP, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe11eeb04, KEY_VOLUMEDOWN, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe21deb04, KEY_MUTE, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe41beb04, KEY_CHANNELUP, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xe01feb04, KEY_CHANNELDOWN, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xbf40eb04, KEY_PAUSE, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xb34ceb04, KEY_PLAY, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xa758eb04, KEY_RECORD, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xab54eb04, KEY_PREVIOUS, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xb748eb04, KEY_STOP, + CINERGYT2_RC_EVENT_TYPE_NEC, 0xa35ceb04, KEY_NEXT }; static int cinergyt2_command (struct cinergyt2 *cinergyt2, - char *send_buf, int send_buf_len, + char *send_buf, int send_buf_len, char *recv_buf, int recv_buf_len) { int actual_len; @@ -232,13 +225,13 @@ static int cinergyt2_command (struct cinergyt2 *cinergyt2, static void cinergyt2_control_stream_transfer (struct cinergyt2 *cinergyt2, int enable) { char buf [] = { CINERGYT2_EP1_CONTROL_STREAM_TRANSFER, enable ? 1 : 0 }; - cinergyt2_command(cinergyt2, buf, sizeof(buf), NULL, 0); + cinergyt2_command(cinergyt2, buf, sizeof(buf), NULL, 0); } static void cinergyt2_sleep (struct cinergyt2 *cinergyt2, int sleep) { char buf [] = { CINERGYT2_EP1_SLEEP_MODE, sleep ? 1 : 0 }; - cinergyt2_command(cinergyt2, buf, sizeof(buf), NULL, 0); + cinergyt2_command(cinergyt2, buf, sizeof(buf), NULL, 0); cinergyt2->sleeping = sleep; } @@ -290,7 +283,7 @@ static int cinergyt2_alloc_stream_urbs (struct cinergyt2 *cinergyt2) { int i; - cinergyt2->streambuf = pci_alloc_consistent(NULL, + cinergyt2->streambuf = pci_alloc_consistent(NULL, STREAM_URB_COUNT*STREAM_BUF_SIZE, &cinergyt2->streambuf_dmahandle); if (!cinergyt2->streambuf) { @@ -301,7 +294,7 @@ static int cinergyt2_alloc_stream_urbs (struct cinergyt2 *cinergyt2) memset(cinergyt2->streambuf, 0, STREAM_URB_COUNT*STREAM_BUF_SIZE); for (i=0; i<STREAM_URB_COUNT; i++) { - struct urb *urb; + struct urb *urb; if (!(urb = usb_alloc_urb(0, GFP_ATOMIC))) { dprintk(1, "failed to alloc consistent stream urbs, bailing out!\n"); @@ -352,9 +345,9 @@ static int cinergyt2_start_feed(struct dvb_demux_feed *dvbdmxfeed) if (down_interruptible(&cinergyt2->sem)) return -ERESTARTSYS; - + if (cinergyt2->streaming == 0) - cinergyt2_start_stream_xfer(cinergyt2); + cinergyt2_start_stream_xfer(cinergyt2); cinergyt2->streaming++; up(&cinergyt2->sem); @@ -364,7 +357,7 @@ static int cinergyt2_start_feed(struct dvb_demux_feed *dvbdmxfeed) static int cinergyt2_stop_feed(struct dvb_demux_feed *dvbdmxfeed) { struct dvb_demux *demux = dvbdmxfeed->demux; - struct cinergyt2 *cinergyt2 = demux->priv; + struct cinergyt2 *cinergyt2 = demux->priv; if (down_interruptible(&cinergyt2->sem)) return -ERESTARTSYS; @@ -497,7 +490,7 @@ static int cinergyt2_open (struct inode *inode, struct file *file) if ((file->f_flags & O_ACCMODE) != O_RDONLY) { cinergyt2_sleep(cinergyt2, 0); schedule_delayed_work(&cinergyt2->query_work, HZ/2); -} + } up(&cinergyt2->sem); return 0; @@ -520,20 +513,20 @@ static int cinergyt2_release (struct inode *inode, struct file *file) up(&cinergyt2->sem); return dvb_generic_release(inode, file); - } +} static unsigned int cinergyt2_poll (struct file *file, struct poll_table_struct *wait) - { +{ struct dvb_device *dvbdev = file->private_data; struct cinergyt2 *cinergyt2 = dvbdev->priv; poll_wait(file, &cinergyt2->poll_wq, wait); return (POLLIN | POLLRDNORM | POLLPRI); - } +} static int cinergyt2_ioctl (struct inode *inode, struct file *file, unsigned cmd, unsigned long arg) - { +{ struct dvb_device *dvbdev = file->private_data; struct cinergyt2 *cinergyt2 = dvbdev->priv; struct dvbt_get_status_msg *stat = &cinergyt2->status; @@ -574,7 +567,7 @@ static int cinergyt2_ioctl (struct inode *inode, struct file *file, /* UNC are already converted to host byte order... */ return put_user(stat->uncorrected_block_count, (__u32 __user *) arg); - + case FE_SET_FRONTEND: { struct dvbt_set_parameters_msg *param = &cinergyt2->param; @@ -611,7 +604,7 @@ static int cinergyt2_ioctl (struct inode *inode, struct file *file, case FE_GET_FRONTEND: /** * trivial to implement (see struct dvbt_get_status_msg). - * equivalent to FE_READ ioctls, but needs + * equivalent to FE_READ ioctls, but needs * TPS -> linux-dvb parameter set conversion. Feel free * to implement this and send us a patch if you need this * functionality. @@ -661,7 +654,7 @@ static int cinergyt2_mmap(struct file *file, struct vm_area_struct *vma) goto bailout; } - vma->vm_flags |= (VM_IO | VM_DONTCOPY); + vma->vm_flags |= (VM_IO | VM_DONTCOPY); vma->vm_file = file; ret = remap_pfn_range(vma, vma->vm_start, @@ -700,7 +693,7 @@ static void cinergyt2_query_rc (void *data) if (down_interruptible(&cinergyt2->sem)) return; - len = cinergyt2_command(cinergyt2, buf, sizeof(buf), + len = cinergyt2_command(cinergyt2, buf, sizeof(buf), (char *) rc_events, sizeof(rc_events)); for (n=0; len>0 && n<(len/sizeof(rc_events[0])); n++) { @@ -712,7 +705,7 @@ static void cinergyt2_query_rc (void *data) /** * keyrepeat bit. If we would handle this properly * we would need to emit down events as long the - * keyrepeat goes, a up event if no further + * keyrepeat goes, a up event if no further * repeat bits occur. Would need a timer to implement * and no other driver does this, so we simply * emit the last key up/down sequence again. @@ -733,7 +726,7 @@ static void cinergyt2_query_rc (void *data) input_report_key(&cinergyt2->rc_input_dev, cinergyt2->rc_input_event, 1); input_report_key(&cinergyt2->rc_input_dev, cinergyt2->rc_input_event, 0); input_sync(&cinergyt2->rc_input_dev); - } + } } schedule_delayed_work(&cinergyt2->rc_query_work, @@ -793,7 +786,7 @@ static int cinergyt2_probe (struct usb_interface *intf, cinergyt2->udev = interface_to_usbdev(intf); cinergyt2->param.cmd = CINERGYT2_EP1_SET_TUNER_PARAMETERS; - + if (cinergyt2_alloc_stream_urbs (cinergyt2) < 0) { dprintk(1, "unable to allocate stream urbs\n"); kfree(cinergyt2); @@ -808,8 +801,8 @@ static int cinergyt2_probe (struct usb_interface *intf, cinergyt2->demux.start_feed = cinergyt2_start_feed; cinergyt2->demux.stop_feed = cinergyt2_stop_feed; cinergyt2->demux.dmx.capabilities = DMX_TS_FILTERING | - DMX_SECTION_FILTERING | - DMX_MEMORY_BASED_FILTERING; + DMX_SECTION_FILTERING | + DMX_MEMORY_BASED_FILTERING; if ((err = dvb_dmx_init(&cinergyt2->demux)) < 0) { dprintk(1, "dvb_dmx_init() failed (err = %d)\n", err); @@ -833,7 +826,7 @@ static int cinergyt2_probe (struct usb_interface *intf, DVB_DEVICE_FRONTEND); #ifdef ENABLE_RC - init_input_dev(&cinergyt2->rc_input_dev); + init_input_dev(&cinergyt2->rc_input_dev); cinergyt2->rc_input_dev.evbit[0] = BIT(EV_KEY); cinergyt2->rc_input_dev.keycodesize = sizeof(unsigned char); @@ -846,7 +839,7 @@ static int cinergyt2_probe (struct usb_interface *intf, input_register_device(&cinergyt2->rc_input_dev); cinergyt2->rc_input_event = KEY_MAX; - + INIT_WORK(&cinergyt2->rc_query_work, cinergyt2_query_rc, cinergyt2); schedule_delayed_work(&cinergyt2->rc_query_work, HZ/2); #endif @@ -878,7 +871,6 @@ static void cinergyt2_disconnect (struct usb_interface *intf) dvb_net_release(&cinergyt2->dvbnet); dvb_dmxdev_release(&cinergyt2->dmxdev); dvb_dmx_release(&cinergyt2->demux); - dvb_unregister_device(cinergyt2->fedev); dvb_unregister_adapter(cinergyt2->adapter); @@ -901,7 +893,7 @@ static int cinergyt2_suspend (struct usb_interface *intf, u32 state) #endif cancel_delayed_work(&cinergyt2->query_work); if (cinergyt2->streaming) - cinergyt2_stop_stream_xfer(cinergyt2); + cinergyt2_stop_stream_xfer(cinergyt2); flush_scheduled_work(); cinergyt2_sleep(cinergyt2, 1); } @@ -922,7 +914,7 @@ static int cinergyt2_resume (struct usb_interface *intf) cinergyt2_sleep(cinergyt2, 0); cinergyt2_command(cinergyt2, (char *) param, sizeof(*param), NULL, 0); if (cinergyt2->streaming) - cinergyt2_start_stream_xfer(cinergyt2); + cinergyt2_start_stream_xfer(cinergyt2); schedule_delayed_work(&cinergyt2->query_work, HZ/2); } @@ -941,13 +933,13 @@ static const struct usb_device_id cinergyt2_table [] __devinitdata = { MODULE_DEVICE_TABLE(usb, cinergyt2_table); static struct usb_driver cinergyt2_driver = { - .owner = THIS_MODULE, + .owner = THIS_MODULE, .name = "cinergyT2", - .probe = cinergyt2_probe, - .disconnect = cinergyt2_disconnect, + .probe = cinergyt2_probe, + .disconnect = cinergyt2_disconnect, .suspend = cinergyt2_suspend, .resume = cinergyt2_resume, - .id_table = cinergyt2_table + .id_table = cinergyt2_table }; static int __init cinergyt2_init (void) diff --git a/drivers/media/dvb/dibusb/dvb-dibusb-fe-i2c.c b/drivers/media/dvb/dibusb/dvb-dibusb-fe-i2c.c index bddf3b39b87e..30e777521bf3 100644 --- a/drivers/media/dvb/dibusb/dvb-dibusb-fe-i2c.c +++ b/drivers/media/dvb/dibusb/dvb-dibusb-fe-i2c.c @@ -1,5 +1,5 @@ /* - * dvb-dibusb-fe-i2c.c is part of the driver for mobile USB Budget DVB-T devices + * dvb-dibusb-fe-i2c.c is part of the driver for mobile USB Budget DVB-T devices * based on reference design made by DiBcom (http://www.dibcom.fr/) * * Copyright (C) 2004-5 Patrick Boettcher (patrick.boettcher@desy.de) @@ -8,30 +8,30 @@ * * This file contains functions for attaching, initializing of an appropriate * demodulator/frontend. I2C-stuff is also located here. - * + * */ #include "dvb-dibusb.h" #include <linux/usb.h> -int dibusb_i2c_msg(struct usb_dibusb *dib, u8 addr, - u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) +int dibusb_i2c_msg(struct usb_dibusb *dib, u8 addr, + u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen) { u8 sndbuf[wlen+4]; /* lead(1) devaddr,direction(1) addr(2) data(wlen) (len(2) (when reading)) */ /* write only ? */ - int wo = (rbuf == NULL || rlen == 0), + int wo = (rbuf == NULL || rlen == 0), len = 2 + wlen + (wo ? 0 : 2); - + sndbuf[0] = wo ? DIBUSB_REQ_I2C_WRITE : DIBUSB_REQ_I2C_READ; sndbuf[1] = (addr << 1) | (wo ? 0 : 1); memcpy(&sndbuf[2],wbuf,wlen); - + if (!wo) { sndbuf[wlen+2] = (rlen >> 8) & 0xff; sndbuf[wlen+3] = rlen & 0xff; } - + return dibusb_readwrite_usb(dib,sndbuf,len,rbuf,rlen); } @@ -43,12 +43,12 @@ static int dibusb_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg *msg,int num) struct usb_dibusb *dib = i2c_get_adapdata(adap); int i; - if (down_interruptible(&dib->i2c_sem) < 0) + if (down_interruptible(&dib->i2c_sem) < 0) return -EAGAIN; if (num > 2) warn("more than 2 i2c messages at a time is not handled yet. TODO."); - + for (i = 0; i < num; i++) { /* write/read request */ if (i+1 < num && (msg[i+1].flags & I2C_M_RD)) { @@ -56,13 +56,13 @@ static int dibusb_i2c_xfer(struct i2c_adapter *adap,struct i2c_msg *msg,int num) msg[i+1].buf,msg[i+1].len) < 0) break; i++; - } else + } else if (dibusb_i2c_msg(dib, msg[i].addr, msg[i].buf,msg[i].len,NULL,0) < 0) break; } - + up(&dib->i2c_sem); - return i; + return i; } static u32 dibusb_i2c_func(struct i2c_adapter *adapter) @@ -80,16 +80,16 @@ static struct i2c_algorithm dibusb_algo = { static int dibusb_general_demod_init(struct dvb_frontend *fe); static u8 dibusb_general_pll_addr(struct dvb_frontend *fe); static int dibusb_general_pll_init(struct dvb_frontend *fe, u8 pll_buf[5]); -static int dibusb_general_pll_set(struct dvb_frontend *fe, +static int dibusb_general_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters* params, u8 pll_buf[5]); static struct mt352_config mt352_hanftek_umt_010_config = { .demod_address = 0x1e, .demod_init = dibusb_general_demod_init, - .pll_set = dibusb_general_pll_set, + .pll_set = dibusb_general_pll_set, }; -static int dibusb_tuner_quirk(struct usb_dibusb *dib) +static int dibusb_tuner_quirk(struct usb_dibusb *dib) { switch (dib->dibdev->dev_cl->id) { case DIBUSB1_1: /* some these device have the ENV77H11D5 and some the THOMSON CABLE */ @@ -100,11 +100,11 @@ static int dibusb_tuner_quirk(struct usb_dibusb *dib) { .flags = 0, .buf = b, .len = 2 }, { .flags = I2C_M_RD, .buf = b2, .len = 1}, }; - + t = &dibusb_tuner[DIBUSB_TUNER_COFDM_PANASONIC_ENV77H11D5]; - + msg[0].addr = msg[1].addr = t->pll_addr; - + if (dib->xfer_ops.tuner_pass_ctrl != NULL) dib->xfer_ops.tuner_pass_ctrl(dib->fe,1,t->pll_addr); dibusb_i2c_xfer(&dib->i2c_adap,msg,2); @@ -117,7 +117,7 @@ static int dibusb_tuner_quirk(struct usb_dibusb *dib) dib->tuner = t; info("this device has the Panasonic ENV77H11D5 onboard."); } - break; + break; } default: break; @@ -125,7 +125,7 @@ static int dibusb_tuner_quirk(struct usb_dibusb *dib) return 0; } -/* there is a ugly pid_filter in the firmware of the umt devices, it is accessible +/* there is a ugly pid_filter in the firmware of the umt devices, it is accessible * by i2c address 0x8. Don't know how to deactivate it and how many rows it has. */ static int dibusb_umt_pid_control(struct dvb_frontend *fe, int index, int pid, int onoff) @@ -150,9 +150,9 @@ int dibusb_fe_init(struct usb_dibusb* dib) { struct dib3000_config demod_cfg; int i; - - if (dib->init_state & DIBUSB_STATE_I2C) { - for (i = 0; i < sizeof(dib->dibdev->dev_cl->demod->i2c_addrs) / sizeof(unsigned char) && + + if (dib->init_state & DIBUSB_STATE_I2C) { + for (i = 0; i < sizeof(dib->dibdev->dev_cl->demod->i2c_addrs) / sizeof(unsigned char) && dib->dibdev->dev_cl->demod->i2c_addrs[i] != 0; i++) { demod_cfg.demod_address = dib->dibdev->dev_cl->demod->i2c_addrs[i]; @@ -178,20 +178,20 @@ int dibusb_fe_init(struct usb_dibusb* dib) break; } } - if (dib->fe->ops->sleep != NULL) - dib->fe_sleep = dib->fe->ops->sleep; - dib->fe->ops->sleep = dibusb_hw_sleep; - - if (dib->fe->ops->init != NULL ) - dib->fe_init = dib->fe->ops->init; - dib->fe->ops->init = dibusb_hw_wakeup; - - /* setting the default tuner */ - dib->tuner = dib->dibdev->dev_cl->tuner; - - /* check which tuner is mounted on this device, in case this is unsure */ - dibusb_tuner_quirk(dib); - } + if (dib->fe->ops->sleep != NULL) + dib->fe_sleep = dib->fe->ops->sleep; + dib->fe->ops->sleep = dibusb_hw_sleep; + + if (dib->fe->ops->init != NULL ) + dib->fe_init = dib->fe->ops->init; + dib->fe->ops->init = dibusb_hw_wakeup; + + /* setting the default tuner */ + dib->tuner = dib->dibdev->dev_cl->tuner; + + /* check which tuner is mounted on this device, in case this is unsure */ + dibusb_tuner_quirk(dib); + } if (dib->fe == NULL) { err("A frontend driver was not found for device '%s'.", dib->dibdev->name); @@ -227,15 +227,15 @@ int dibusb_i2c_init(struct usb_dibusb *dib) #else dib->i2c_adap.class = I2C_CLASS_TV_DIGITAL, #endif - dib->i2c_adap.algo = &dibusb_algo; + dib->i2c_adap.algo = &dibusb_algo; dib->i2c_adap.algo_data = NULL; dib->i2c_adap.id = I2C_ALGO_BIT; - + i2c_set_adapdata(&dib->i2c_adap, dib); - + if ((ret = i2c_add_adapter(&dib->i2c_adap)) < 0) err("could not add i2c adapter"); - + dib->init_state |= DIBUSB_STATE_I2C; return ret; @@ -267,8 +267,8 @@ static int thomson_cable_eu_pll_set(struct dvb_frontend_parameters *fep, u8 pllb pllbuf[0] = (tfreq >> 8) & 0x7f; pllbuf[1] = tfreq & 0xff; - pllbuf[2] = 0x8e; - pllbuf[3] = (vu << 7) | (p2 << 2) | (p1 << 1) | p0; + pllbuf[2] = 0x8e; + pllbuf[3] = (vu << 7) | (p2 << 2) | (p1 << 1) | p0; return 0; } @@ -281,7 +281,7 @@ static int panasonic_cofdm_env57h1xd5_pll_set(struct dvb_frontend_parameters *fe err("frequency cannot be larger than 858 MHz."); return -EINVAL; } - + // contol data 1 : 1 | T/A=1 | T2,T1,T0 = 0,0,0 | R2,R1,R0 = 0,1,0 TA = 1; T210 = 0; @@ -289,19 +289,19 @@ static int panasonic_cofdm_env57h1xd5_pll_set(struct dvb_frontend_parameters *fe ctrl1 = (1 << 7) | (TA << 6) | (T210 << 3) | R210; // ******** CHARGE PUMP CONFIG vs RF FREQUENCIES ***************** - if (freq < 470000000) + if (freq < 470000000) cp210 = 2; // VHF Low and High band ch E12 to E4 to E12 - else if (freq < 526000000) + else if (freq < 526000000) cp210 = 4; // UHF band Ch E21 to E27 - else // if (freq < 862000000) + else // if (freq < 862000000) cp210 = 5; // UHF band ch E28 to E69 //********************* BW select ******************************* - if (freq < 153000000) + if (freq < 153000000) p4321 = 1; // BW selected for VHF low - else if (freq < 470000000) + else if (freq < 470000000) p4321 = 2; // BW selected for VHF high E5 to E12 - else // if (freq < 862000000) + else // if (freq < 862000000) p4321 = 4; // BW selection for UHF E21 to E69 pllbuf[0] = (tfreq >> 8) & 0xff; @@ -313,7 +313,7 @@ static int panasonic_cofdm_env57h1xd5_pll_set(struct dvb_frontend_parameters *fe } /* - * 7 6 5 4 3 2 1 0 + * 7 6 5 4 3 2 1 0 * Address Byte 1 1 0 0 0 MA1 MA0 R/~W=0 * * Program divider byte 1 0 n14 n13 n12 n11 n10 n9 n8 @@ -321,14 +321,14 @@ static int panasonic_cofdm_env57h1xd5_pll_set(struct dvb_frontend_parameters *fe * * Control byte 1 1 T/A=1 T2 T1 T0 R2 R1 R0 * 1 T/A=0 0 0 ATC AL2 AL1 AL0 - * + * * Control byte 2 CP2 CP1 CP0 BS5 BS4 BS3 BS2 BS1 - * + * * MA0/1 = programmable address bits * R/~W = read/write bit (0 for writing) * N14-0 = programmable LO frequency - * - * T/A = test AGC bit (0 = next 6 bits AGC setting, + * + * T/A = test AGC bit (0 = next 6 bits AGC setting, * 1 = next 6 bits test and reference divider ratio settings) * T2-0 = test bits * R2-0 = reference divider ratio and programmable frequency step @@ -420,14 +420,14 @@ static int panasonic_cofdm_env77h11d5_tda6650_set (struct dvb_frontend_parameter } /* - * 7 6 5 4 3 2 1 0 + * 7 6 5 4 3 2 1 0 * Address Byte 1 1 0 0 0 MA1 MA0 R/~W=0 * * Program divider byte 1 0 n14 n13 n12 n11 n10 n9 n8 * Program divider byte 2 n7 n6 n5 n4 n3 n2 n1 n0 * * Control byte 1 CP T2 T1 T0 RSA RSB OS - * + * * Band Switch byte X X X P4 P3 P2 P1 P0 * * Auxiliary byte ATC AL2 AL1 AL0 0 0 0 0 @@ -439,10 +439,10 @@ static int panasonic_cofdm_env77h11d5_tda6650_set (struct dvb_frontend_parameter * 1 1 c6 * * - * + * */ -static int lg_tdtp_e102p_tua6034(struct dvb_frontend_parameters* fep, u8 pllbuf[4]) +static int lg_tdtp_e102p_tua6034(struct dvb_frontend_parameters* fep, u8 pllbuf[4]) { u32 div; u8 p3210, p4; @@ -451,18 +451,18 @@ static int lg_tdtp_e102p_tua6034(struct dvb_frontend_parameters* fep, u8 pllbuf[ div = (fep->frequency + 36125000 + TUNER_MUL / 2) / TUNER_MUL; - if (fep->frequency < 174500000) + if (fep->frequency < 174500000) p3210 = 1; // not supported by the tdtp_e102p else if (fep->frequency < 230000000) // VHF p3210 = 2; - else + else p3210 = 4; if (fep->u.ofdm.bandwidth == BANDWIDTH_7_MHZ) p4 = 0; - else + else p4 = 1; - + pllbuf[0] = (div >> 8) & 0x7f; pllbuf[1] = div & 0xff; pllbuf[2] = 0xce; @@ -484,24 +484,24 @@ static int lg_tdtp_e102p_mt352_demod_init(struct dvb_frontend *fe) static u8 mt352_acq_ctl[] = { 0x53, 0x5f }; static u8 mt352_input_freq_1[] = { 0x56, 0xf1, 0x05 }; - + // static u8 mt352_capt_range_cfg[] = { 0x75, 0x32 }; mt352_write(fe, mt352_clock_config, sizeof(mt352_clock_config)); udelay(2000); mt352_write(fe, mt352_reset, sizeof(mt352_reset)); mt352_write(fe, mt352_mclk_ratio, sizeof(mt352_mclk_ratio)); - + mt352_write(fe, mt352_adc_ctl_1_cfg, sizeof(mt352_adc_ctl_1_cfg)); mt352_write(fe, mt352_agc_cfg, sizeof(mt352_agc_cfg)); mt352_write(fe, mt352_sec_agc_cfg, sizeof(mt352_sec_agc_cfg)); mt352_write(fe, mt352_unk, sizeof(mt352_unk)); - + mt352_write(fe, mt352_acq_ctl, sizeof(mt352_acq_ctl)); mt352_write(fe, mt352_input_freq_1, sizeof(mt352_input_freq_1)); - + // mt352_write(fe, mt352_capt_range_cfg, sizeof(mt352_capt_range_cfg)); return 0; @@ -528,11 +528,11 @@ static u8 dibusb_general_pll_addr(struct dvb_frontend *fe) static int dibusb_pll_i2c_helper(struct usb_dibusb *dib, u8 pll_buf[5], u8 buf[4]) { if (pll_buf == NULL) { - struct i2c_msg msg = { - .addr = dib->tuner->pll_addr, - .flags = 0, - .buf = buf, - .len = sizeof(buf) + struct i2c_msg msg = { + .addr = dib->tuner->pll_addr, + .flags = 0, + .buf = buf, + .len = sizeof(buf) }; if (i2c_transfer (&dib->i2c_adap, &msg, 1) != 1) return -EIO; @@ -545,7 +545,7 @@ static int dibusb_pll_i2c_helper(struct usb_dibusb *dib, u8 pll_buf[5], u8 buf[4 return 0; } -static int dibusb_general_pll_init(struct dvb_frontend *fe, +static int dibusb_general_pll_init(struct dvb_frontend *fe, u8 pll_buf[5]) { struct usb_dibusb* dib = (struct usb_dibusb*) fe->dvb->priv; @@ -558,14 +558,14 @@ static int dibusb_general_pll_init(struct dvb_frontend *fe, default: break; } - + if (ret) return ret; return dibusb_pll_i2c_helper(dib,pll_buf,buf); } -static int dibusb_general_pll_set(struct dvb_frontend *fe, +static int dibusb_general_pll_set(struct dvb_frontend *fe, struct dvb_frontend_parameters *fep, u8 pll_buf[5]) { struct usb_dibusb* dib = (struct usb_dibusb*) fe->dvb->priv; @@ -573,14 +573,14 @@ static int dibusb_general_pll_set(struct dvb_frontend *fe, int ret=0; switch (dib->tuner->id) { - case DIBUSB_TUNER_CABLE_THOMSON: - ret = thomson_cable_eu_pll_set(fep, buf); + case DIBUSB_TUNER_CABLE_THOMSON: + ret = thomson_cable_eu_pll_set(fep, buf); break; case DIBUSB_TUNER_COFDM_PANASONIC_ENV57H1XD5: ret = panasonic_cofdm_env57h1xd5_pll_set(fep, buf); break; case DIBUSB_TUNER_CABLE_LG_TDTP_E102P: - ret = lg_tdtp_e102p_tua6034(fep, buf); + ret = lg_tdtp_e102p_tua6034(fep, buf); break; case DIBUSB_TUNER_COFDM_PANASONIC_ENV77H11D5: ret = panasonic_cofdm_env77h11d5_tda6650_set(fep,buf); @@ -590,9 +590,9 @@ static int dibusb_general_pll_set(struct dvb_frontend *fe, ret = -ENODEV; break; } - + if (ret) return ret; - + return dibusb_pll_i2c_helper(dib,pll_buf,buf); } diff --git a/drivers/media/dvb/dibusb/dvb-dibusb.h b/drivers/media/dvb/dibusb/dvb-dibusb.h index 47be677a3db8..19362c75abef 100644 --- a/drivers/media/dvb/dibusb/dvb-dibusb.h +++ b/drivers/media/dvb/dibusb/dvb-dibusb.h @@ -113,7 +113,7 @@ struct dibusb_device_class { int pipe_cmd; /* command pipe (read/write) */ int pipe_data; /* data pipe */ - + int urb_count; /* number of data URBs to be submitted */ int urb_buffer_size; /* the size of the buffer for each URB */ @@ -149,7 +149,7 @@ struct usb_dibusb { #define DIBUSB_STATE_INIT 0x000 #define DIBUSB_STATE_URB_LIST 0x001 #define DIBUSB_STATE_URB_BUF 0x002 -#define DIBUSB_STATE_URB_SUBMIT 0x004 +#define DIBUSB_STATE_URB_SUBMIT 0x004 #define DIBUSB_STATE_DVB 0x008 #define DIBUSB_STATE_I2C 0x010 #define DIBUSB_STATE_REMOTE 0x020 @@ -175,7 +175,7 @@ struct usb_dibusb { /* pid filtering */ spinlock_t pid_list_lock; struct dibusb_pid *pid_list; - + /* dvb */ struct dvb_adapter *adapter; struct dmxdev dmxdev; @@ -206,7 +206,7 @@ int dibusb_remote_exit(struct usb_dibusb *dib); int dibusb_remote_init(struct usb_dibusb *dib); /* dvb-dibusb-fe-i2c.c */ -int dibusb_i2c_msg(struct usb_dibusb *dib, u8 addr, +int dibusb_i2c_msg(struct usb_dibusb *dib, u8 addr, u8 *wbuf, u16 wlen, u8 *rbuf, u16 rlen); int dibusb_fe_init(struct usb_dibusb* dib); int dibusb_fe_exit(struct usb_dibusb *dib); @@ -238,11 +238,11 @@ int dibusb_ctrl_pid(struct usb_dibusb *dib, struct dvb_demux_feed *dvbdmxfeed , /* i2c and transfer stuff */ #define DIBUSB_I2C_TIMEOUT 5000 -/* +/* * protocol of all dibusb related devices */ -/* +/* * bulk msg to/from endpoint 0x01 * * general structure: @@ -252,23 +252,23 @@ int dibusb_ctrl_pid(struct usb_dibusb *dib, struct dvb_demux_feed *dvbdmxfeed , #define DIBUSB_REQ_START_READ 0x00 #define DIBUSB_REQ_START_DEMOD 0x01 -/* - * i2c read +/* + * i2c read * bulk write: 0x02 ((7bit i2c_addr << 1) & 0x01) register_bytes length_word * bulk read: byte_buffer (length_word bytes) */ -#define DIBUSB_REQ_I2C_READ 0x02 - +#define DIBUSB_REQ_I2C_READ 0x02 + /* * i2c write * bulk write: 0x03 (7bit i2c_addr << 1) register_bytes value_bytes */ -#define DIBUSB_REQ_I2C_WRITE 0x03 +#define DIBUSB_REQ_I2C_WRITE 0x03 -/* - * polling the value of the remote control +/* + * polling the value of the remote control * bulk write: 0x04 - * bulk read: byte_buffer (5 bytes) + * bulk read: byte_buffer (5 bytes) * * first byte of byte_buffer shows the status (0x00, 0x01, 0x02) */ @@ -279,26 +279,26 @@ int dibusb_ctrl_pid(struct usb_dibusb *dib, struct dvb_demux_feed *dvbdmxfeed , #define DIBUSB_RC_NEC_KEY_REPEATED 0x02 /* streaming mode: - * bulk write: 0x05 mode_byte + * bulk write: 0x05 mode_byte * * mode_byte is mostly 0x00 */ #define DIBUSB_REQ_SET_STREAMING_MODE 0x05 /* interrupt the internal read loop, when blocking */ -#define DIBUSB_REQ_INTR_READ 0x06 +#define DIBUSB_REQ_INTR_READ 0x06 /* io control * 0x07 cmd_byte param_bytes * * param_bytes can be up to 32 bytes * - * cmd_byte function parameter name + * cmd_byte function parameter name * 0x00 power mode * 0x00 sleep * 0x01 wakeup * - * 0x01 enable streaming + * 0x01 enable streaming * 0x02 disable streaming * * diff --git a/drivers/media/dvb/dvb-core/demux.h b/drivers/media/dvb/dvb-core/demux.h index 8ff49c0f7a03..d0e01bda833f 100644 --- a/drivers/media/dvb/dvb-core/demux.h +++ b/drivers/media/dvb/dvb-core/demux.h @@ -1,8 +1,8 @@ -/* - * demux.h +/* + * demux.h * * Copyright (c) 2002 Convergence GmbH - * + * * based on code: * Copyright (c) 2000 Nokia Research Center * Tampere, FINLAND @@ -23,56 +23,56 @@ * */ -#ifndef __DEMUX_H -#define __DEMUX_H +#ifndef __DEMUX_H +#define __DEMUX_H #include <linux/types.h> #include <linux/errno.h> -#include <linux/list.h> -#include <linux/time.h> +#include <linux/list.h> +#include <linux/time.h> -/*--------------------------------------------------------------------------*/ -/* Common definitions */ -/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/* Common definitions */ +/*--------------------------------------------------------------------------*/ /* * DMX_MAX_FILTER_SIZE: Maximum length (in bytes) of a section/PES filter. - */ + */ -#ifndef DMX_MAX_FILTER_SIZE +#ifndef DMX_MAX_FILTER_SIZE #define DMX_MAX_FILTER_SIZE 18 -#endif +#endif /* * DMX_MAX_SECFEED_SIZE: Maximum length (in bytes) of a private section feed filter. - */ + */ -#ifndef DMX_MAX_SECFEED_SIZE +#ifndef DMX_MAX_SECFEED_SIZE #define DMX_MAX_SECFEED_SIZE 4096 -#endif +#endif /* - * enum dmx_success: Success codes for the Demux Callback API. - */ - -enum dmx_success { - DMX_OK = 0, /* Received Ok */ - DMX_LENGTH_ERROR, /* Incorrect length */ - DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */ - DMX_CRC_ERROR, /* Incorrect CRC */ - DMX_FRAME_ERROR, /* Frame alignment error */ - DMX_FIFO_ERROR, /* Receiver FIFO overrun */ - DMX_MISSED_ERROR /* Receiver missed packet */ -} ; - -/*--------------------------------------------------------------------------*/ -/* TS packet reception */ + * enum dmx_success: Success codes for the Demux Callback API. + */ + +enum dmx_success { + DMX_OK = 0, /* Received Ok */ + DMX_LENGTH_ERROR, /* Incorrect length */ + DMX_OVERRUN_ERROR, /* Receiver ring buffer overrun */ + DMX_CRC_ERROR, /* Incorrect CRC */ + DMX_FRAME_ERROR, /* Frame alignment error */ + DMX_FIFO_ERROR, /* Receiver FIFO overrun */ + DMX_MISSED_ERROR /* Receiver missed packet */ +} ; + +/*--------------------------------------------------------------------------*/ +/* TS packet reception */ /*--------------------------------------------------------------------------*/ /* TS filter type for set() */ -#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */ +#define TS_PACKET 1 /* send TS packets (188 bytes) to callback (default) */ #define TS_PAYLOAD_ONLY 2 /* in case TS_PACKET is set, only send the TS payload (<=184 bytes per packet) to callback */ #define TS_DECODER 4 /* send stream to built-in decoder (if present) */ @@ -116,38 +116,38 @@ enum dmx_ts_pes #define DMX_TS_PES_PCR DMX_TS_PES_PCR0 -struct dmx_ts_feed { +struct dmx_ts_feed { int is_filtering; /* Set to non-zero when filtering in progress */ struct dmx_demux *parent; /* Back-pointer */ - void *priv; /* Pointer to private data of the API client */ - int (*set) (struct dmx_ts_feed *feed, + void *priv; /* Pointer to private data of the API client */ + int (*set) (struct dmx_ts_feed *feed, u16 pid, - int type, + int type, enum dmx_ts_pes pes_type, - size_t callback_length, - size_t circular_buffer_size, - int descramble, - struct timespec timeout); - int (*start_filtering) (struct dmx_ts_feed* feed); - int (*stop_filtering) (struct dmx_ts_feed* feed); + size_t callback_length, + size_t circular_buffer_size, + int descramble, + struct timespec timeout); + int (*start_filtering) (struct dmx_ts_feed* feed); + int (*stop_filtering) (struct dmx_ts_feed* feed); }; -/*--------------------------------------------------------------------------*/ -/* Section reception */ -/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/* Section reception */ +/*--------------------------------------------------------------------------*/ -struct dmx_section_filter { - u8 filter_value [DMX_MAX_FILTER_SIZE]; - u8 filter_mask [DMX_MAX_FILTER_SIZE]; - u8 filter_mode [DMX_MAX_FILTER_SIZE]; - struct dmx_section_feed* parent; /* Back-pointer */ - void* priv; /* Pointer to private data of the API client */ +struct dmx_section_filter { + u8 filter_value [DMX_MAX_FILTER_SIZE]; + u8 filter_mask [DMX_MAX_FILTER_SIZE]; + u8 filter_mode [DMX_MAX_FILTER_SIZE]; + struct dmx_section_feed* parent; /* Back-pointer */ + void* priv; /* Pointer to private data of the API client */ }; -struct dmx_section_feed { - int is_filtering; /* Set to non-zero when filtering in progress */ +struct dmx_section_feed { + int is_filtering; /* Set to non-zero when filtering in progress */ struct dmx_demux* parent; /* Back-pointer */ - void* priv; /* Pointer to private data of the API client */ + void* priv; /* Pointer to private data of the API client */ int check_crc; u32 crc_val; @@ -156,42 +156,42 @@ struct dmx_section_feed { u8 secbuf_base[DMX_MAX_SECFEED_SIZE]; u16 secbufp, seclen, tsfeedp; - int (*set) (struct dmx_section_feed* feed, - u16 pid, - size_t circular_buffer_size, - int descramble, - int check_crc); - int (*allocate_filter) (struct dmx_section_feed* feed, - struct dmx_section_filter** filter); - int (*release_filter) (struct dmx_section_feed* feed, - struct dmx_section_filter* filter); - int (*start_filtering) (struct dmx_section_feed* feed); - int (*stop_filtering) (struct dmx_section_feed* feed); + int (*set) (struct dmx_section_feed* feed, + u16 pid, + size_t circular_buffer_size, + int descramble, + int check_crc); + int (*allocate_filter) (struct dmx_section_feed* feed, + struct dmx_section_filter** filter); + int (*release_filter) (struct dmx_section_feed* feed, + struct dmx_section_filter* filter); + int (*start_filtering) (struct dmx_section_feed* feed); + int (*stop_filtering) (struct dmx_section_feed* feed); }; -/*--------------------------------------------------------------------------*/ -/* Callback functions */ -/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/* Callback functions */ +/*--------------------------------------------------------------------------*/ -typedef int (*dmx_ts_cb) ( const u8 * buffer1, +typedef int (*dmx_ts_cb) ( const u8 * buffer1, size_t buffer1_length, - const u8 * buffer2, + const u8 * buffer2, size_t buffer2_length, - struct dmx_ts_feed* source, - enum dmx_success success); + struct dmx_ts_feed* source, + enum dmx_success success); typedef int (*dmx_section_cb) ( const u8 * buffer1, size_t buffer1_len, - const u8 * buffer2, + const u8 * buffer2, size_t buffer2_len, - struct dmx_section_filter * source, - enum dmx_success success); + struct dmx_section_filter * source, + enum dmx_success success); -/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ /* DVB Front-End */ -/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ -enum dmx_frontend_source { +enum dmx_frontend_source { DMX_MEMORY_FE, DMX_FRONTEND_0, DMX_FRONTEND_1, @@ -201,106 +201,105 @@ enum dmx_frontend_source { DMX_STREAM_1, DMX_STREAM_2, DMX_STREAM_3 -}; +}; -struct dmx_frontend { - struct list_head connectivity_list; /* List of front-ends that can - be connected to a particular - demux */ - void* priv; /* Pointer to private data of the API client */ +struct dmx_frontend { + struct list_head connectivity_list; /* List of front-ends that can + be connected to a particular + demux */ + void* priv; /* Pointer to private data of the API client */ enum dmx_frontend_source source; }; -/*--------------------------------------------------------------------------*/ -/* MPEG-2 TS Demux */ -/*--------------------------------------------------------------------------*/ - -/* - * Flags OR'ed in the capabilites field of struct dmx_demux. - */ - -#define DMX_TS_FILTERING 1 -#define DMX_PES_FILTERING 2 -#define DMX_SECTION_FILTERING 4 -#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */ -#define DMX_CRC_CHECKING 16 -#define DMX_TS_DESCRAMBLING 32 -#define DMX_SECTION_PAYLOAD_DESCRAMBLING 64 -#define DMX_MAC_ADDRESS_DESCRAMBLING 128 - -/* - * Demux resource type identifier. -*/ - -/* - * DMX_FE_ENTRY(): Casts elements in the list of registered +/*--------------------------------------------------------------------------*/ +/* MPEG-2 TS Demux */ +/*--------------------------------------------------------------------------*/ + +/* + * Flags OR'ed in the capabilites field of struct dmx_demux. + */ + +#define DMX_TS_FILTERING 1 +#define DMX_PES_FILTERING 2 +#define DMX_SECTION_FILTERING 4 +#define DMX_MEMORY_BASED_FILTERING 8 /* write() available */ +#define DMX_CRC_CHECKING 16 +#define DMX_TS_DESCRAMBLING 32 +#define DMX_SECTION_PAYLOAD_DESCRAMBLING 64 +#define DMX_MAC_ADDRESS_DESCRAMBLING 128 + +/* + * Demux resource type identifier. +*/ + +/* + * DMX_FE_ENTRY(): Casts elements in the list of registered * front-ends from the generic type struct list_head * to the type * struct dmx_frontend - *. + *. */ -#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list) +#define DMX_FE_ENTRY(list) list_entry(list, struct dmx_frontend, connectivity_list) -struct dmx_demux { - u32 capabilities; /* Bitfield of capability flags */ - struct dmx_frontend* frontend; /* Front-end connected to the demux */ +struct dmx_demux { + u32 capabilities; /* Bitfield of capability flags */ + struct dmx_frontend* frontend; /* Front-end connected to the demux */ struct list_head reg_list; /* List of registered demuxes */ - void* priv; /* Pointer to private data of the API client */ + void* priv; /* Pointer to private data of the API client */ int users; /* Number of users */ - int (*open) (struct dmx_demux* demux); - int (*close) (struct dmx_demux* demux); - int (*write) (struct dmx_demux* demux, const char* buf, size_t count); - int (*allocate_ts_feed) (struct dmx_demux* demux, - struct dmx_ts_feed** feed, - dmx_ts_cb callback); - int (*release_ts_feed) (struct dmx_demux* demux, - struct dmx_ts_feed* feed); - int (*allocate_section_feed) (struct dmx_demux* demux, - struct dmx_section_feed** feed, - dmx_section_cb callback); + int (*open) (struct dmx_demux* demux); + int (*close) (struct dmx_demux* demux); + int (*write) (struct dmx_demux* demux, const char* buf, size_t count); + int (*allocate_ts_feed) (struct dmx_demux* demux, + struct dmx_ts_feed** feed, + dmx_ts_cb callback); + int (*release_ts_feed) (struct dmx_demux* demux, + struct dmx_ts_feed* feed); + int (*allocate_section_feed) (struct dmx_demux* demux, + struct dmx_section_feed** feed, + dmx_section_cb callback); int (*release_section_feed) (struct dmx_demux* demux, - struct dmx_section_feed* feed); - int (*descramble_mac_address) (struct dmx_demux* demux, - u8* buffer1, - size_t buffer1_length, - u8* buffer2, + struct dmx_section_feed* feed); + int (*descramble_mac_address) (struct dmx_demux* demux, + u8* buffer1, + size_t buffer1_length, + u8* buffer2, size_t buffer2_length, - u16 pid); + u16 pid); int (*descramble_section_payload) (struct dmx_demux* demux, - u8* buffer1, + u8* buffer1, size_t buffer1_length, u8* buffer2, size_t buffer2_length, - u16 pid); - int (*add_frontend) (struct dmx_demux* demux, - struct dmx_frontend* frontend); + u16 pid); + int (*add_frontend) (struct dmx_demux* demux, + struct dmx_frontend* frontend); int (*remove_frontend) (struct dmx_demux* demux, - struct dmx_frontend* frontend); - struct list_head* (*get_frontends) (struct dmx_demux* demux); - int (*connect_frontend) (struct dmx_demux* demux, - struct dmx_frontend* frontend); - int (*disconnect_frontend) (struct dmx_demux* demux); + struct dmx_frontend* frontend); + struct list_head* (*get_frontends) (struct dmx_demux* demux); + int (*connect_frontend) (struct dmx_demux* demux, + struct dmx_frontend* frontend); + int (*disconnect_frontend) (struct dmx_demux* demux); int (*get_pes_pids) (struct dmx_demux* demux, u16 *pids); int (*get_stc) (struct dmx_demux* demux, unsigned int num, u64 *stc, unsigned int *base); -}; +}; -/*--------------------------------------------------------------------------*/ -/* Demux directory */ -/*--------------------------------------------------------------------------*/ +/*--------------------------------------------------------------------------*/ +/* Demux directory */ +/*--------------------------------------------------------------------------*/ -/* - * DMX_DIR_ENTRY(): Casts elements in the list of registered +/* + * DMX_DIR_ENTRY(): Casts elements in the list of registered * demuxes from the generic type struct list_head* to the type struct dmx_demux - *. - */ + *. + */ #define DMX_DIR_ENTRY(list) list_entry(list, struct dmx_demux, reg_list) -int dmx_register_demux (struct dmx_demux* demux); -int dmx_unregister_demux (struct dmx_demux* demux); -struct list_head* dmx_get_demuxes (void); +int dmx_register_demux (struct dmx_demux* demux); +int dmx_unregister_demux (struct dmx_demux* demux); +struct list_head* dmx_get_demuxes (void); #endif /* #ifndef __DEMUX_H */ - diff --git a/drivers/media/dvb/dvb-core/dmxdev.c b/drivers/media/dvb/dvb-core/dmxdev.c index cdbfb15b78f3..7d26f91e99ba 100644 --- a/drivers/media/dvb/dvb-core/dmxdev.c +++ b/drivers/media/dvb/dvb-core/dmxdev.c @@ -1,5 +1,5 @@ -/* - * dmxdev.c - DVB demultiplexer device +/* + * dmxdev.c - DVB demultiplexer device * * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> * & Marcus Metzler <marcus@convergence.de> @@ -48,7 +48,7 @@ dvb_dmxdev_file_to_filter(struct file *file) return (struct dmxdev_filter *) file->private_data; } -static inline void dvb_dmxdev_buffer_init(struct dmxdev_buffer *buffer) +static inline void dvb_dmxdev_buffer_init(struct dmxdev_buffer *buffer) { buffer->data=NULL; buffer->size=8192; @@ -58,7 +58,7 @@ static inline void dvb_dmxdev_buffer_init(struct dmxdev_buffer *buffer) init_waitqueue_head(&buffer->queue); } -static inline int dvb_dmxdev_buffer_write(struct dmxdev_buffer *buf, const u8 *src, int len) +static inline int dvb_dmxdev_buffer_write(struct dmxdev_buffer *buf, const u8 *src, int len) { int split; int free; @@ -68,7 +68,7 @@ static inline int dvb_dmxdev_buffer_write(struct dmxdev_buffer *buf, const u8 *s return 0; if (!buf->data) return 0; - + free=buf->pread-buf->pwrite; split=0; if (free<=0) { @@ -97,14 +97,14 @@ static ssize_t dvb_dmxdev_buffer_read(struct dmxdev_buffer *src, { unsigned long todo=count; int split, avail, error; - + if (!src->data) return 0; if ((error=src->error)) { src->pwrite=src->pread; src->error=0; - return error; + return error; } if (non_blocking && (src->pwrite==src->pread)) @@ -122,9 +122,9 @@ static ssize_t dvb_dmxdev_buffer_read(struct dmxdev_buffer *src, if ((error=src->error)) { src->pwrite=src->pread; src->error=0; - return error; + return error; } - + split=src->size; avail=src->pwrite - src->pread; if (avail<0) { @@ -162,7 +162,7 @@ static struct dmx_frontend * get_fe(struct dmx_demux *demux, int type) list_for_each(pos, head) if (DMX_FE_ENTRY(pos)->source==type) return DMX_FE_ENTRY(pos); - + return NULL; } @@ -183,7 +183,7 @@ static int dvb_dvr_open(struct inode *inode, struct file *file) if (down_interruptible (&dmxdev->mutex)) return -ERESTARTSYS; - + if ((file->f_flags&O_ACCMODE)==O_RDWR) { if (!(dmxdev->capabilities&DMXDEV_CAP_DUPLEX)) { up(&dmxdev->mutex); @@ -203,20 +203,20 @@ static int dvb_dvr_open(struct inode *inode, struct file *file) if ((file->f_flags&O_ACCMODE)==O_WRONLY) { dmxdev->dvr_orig_fe=dmxdev->demux->frontend; - + if (!dmxdev->demux->write) { up(&dmxdev->mutex); return -EOPNOTSUPP; } - + front=get_fe(dmxdev->demux, DMX_MEMORY_FE); - + if (!front) { up(&dmxdev->mutex); return -EINVAL; } - dmxdev->demux->disconnect_frontend(dmxdev->demux); - dmxdev->demux->connect_frontend(dmxdev->demux, front); + dmxdev->demux->disconnect_frontend(dmxdev->demux); + dmxdev->demux->connect_frontend(dmxdev->demux, front); } up(&dmxdev->mutex); return 0; @@ -231,8 +231,8 @@ static int dvb_dvr_release(struct inode *inode, struct file *file) return -ERESTARTSYS; if ((file->f_flags&O_ACCMODE)==O_WRONLY) { - dmxdev->demux->disconnect_frontend(dmxdev->demux); - dmxdev->demux->connect_frontend(dmxdev->demux, + dmxdev->demux->disconnect_frontend(dmxdev->demux); + dmxdev->demux->connect_frontend(dmxdev->demux, dmxdev->dvr_orig_fe); } if ((file->f_flags&O_ACCMODE)==O_RDONLY) { @@ -275,8 +275,8 @@ static ssize_t dvb_dvr_read(struct file *file, char __user *buf, size_t count, int ret; //down(&dmxdev->mutex); - ret= dvb_dmxdev_buffer_read(&dmxdev->dvr_buffer, - file->f_flags&O_NONBLOCK, + ret= dvb_dmxdev_buffer_read(&dmxdev->dvr_buffer, + file->f_flags&O_NONBLOCK, buf, count, ppos); //up(&dmxdev->mutex); return ret; @@ -302,11 +302,11 @@ static int dvb_dmxdev_set_buffer_size(struct dmxdev_filter *dmxdevfilter, unsign mem=buf->data; buf->data=NULL; buf->size=size; - buf->pwrite=buf->pread=0; + buf->pwrite=buf->pread=0; spin_unlock_irq(&dmxdevfilter->dev->lock); - if (mem) + if (mem) vfree(mem); - + if (buf->size) { mem=vmalloc(dmxdevfilter->buffer.size); if (!mem) @@ -321,7 +321,7 @@ static int dvb_dmxdev_set_buffer_size(struct dmxdev_filter *dmxdevfilter, unsign static void dvb_dmxdev_filter_timeout(unsigned long data) { struct dmxdev_filter *dmxdevfilter=(struct dmxdev_filter *)data; - + dmxdevfilter->buffer.error=-ETIMEDOUT; spin_lock_irq(&dmxdevfilter->dev->lock); dmxdevfilter->state=DMXDEV_STATE_TIMEDOUT; @@ -332,7 +332,7 @@ static void dvb_dmxdev_filter_timeout(unsigned long data) static void dvb_dmxdev_filter_timer(struct dmxdev_filter *dmxdevfilter) { struct dmx_sct_filter_params *para=&dmxdevfilter->params.sec; - + del_timer(&dmxdevfilter->timer); if (para->timeout) { dmxdevfilter->timer.function=dvb_dmxdev_filter_timeout; @@ -348,7 +348,7 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len, { struct dmxdev_filter *dmxdevfilter=(struct dmxdev_filter *) filter->priv; int ret; - + if (dmxdevfilter->buffer.error) { wake_up(&dmxdevfilter->buffer.queue); return 0; @@ -359,16 +359,16 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len, return 0; } del_timer(&dmxdevfilter->timer); - dprintk("dmxdev: section callback %02x %02x %02x %02x %02x %02x\n", - buffer1[0], buffer1[1], - buffer1[2], buffer1[3], + dprintk("dmxdev: section callback %02x %02x %02x %02x %02x %02x\n", + buffer1[0], buffer1[1], + buffer1[2], buffer1[3], buffer1[4], buffer1[5]); ret=dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer1, buffer1_len); if (ret==buffer1_len) { ret=dvb_dmxdev_buffer_write(&dmxdevfilter->buffer, buffer2, buffer2_len); } if (ret<0) { - dmxdevfilter->buffer.pwrite=dmxdevfilter->buffer.pread; + dmxdevfilter->buffer.pwrite=dmxdevfilter->buffer.pread; dmxdevfilter->buffer.error=-EOVERFLOW; } if (dmxdevfilter->params.sec.flags&DMX_ONESHOT) @@ -385,7 +385,7 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len, struct dmxdev_filter *dmxdevfilter=(struct dmxdev_filter *) feed->priv; struct dmxdev_buffer *buffer; int ret; - + spin_lock(&dmxdevfilter->dev->lock); if (dmxdevfilter->params.pes.output==DMX_OUT_DECODER) { spin_unlock(&dmxdevfilter->dev->lock); @@ -402,10 +402,10 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len, return 0; } ret=dvb_dmxdev_buffer_write(buffer, buffer1, buffer1_len); - if (ret==buffer1_len) + if (ret==buffer1_len) ret=dvb_dmxdev_buffer_write(buffer, buffer2, buffer2_len); if (ret<0) { - buffer->pwrite=buffer->pread; + buffer->pwrite=buffer->pread; buffer->error=-EOVERFLOW; } spin_unlock(&dmxdevfilter->dev->lock); @@ -456,7 +456,7 @@ static int dvb_dmxdev_feed_start(struct dmxdev_filter *filter) } -/* restart section feed if it has filters left associated with it, +/* restart section feed if it has filters left associated with it, otherwise release the feed */ static int dvb_dmxdev_feed_restart(struct dmxdev_filter *filter) @@ -464,15 +464,15 @@ static int dvb_dmxdev_feed_restart(struct dmxdev_filter *filter) int i; struct dmxdev *dmxdev = filter->dev; u16 pid = filter->params.sec.pid; - - for (i=0; i<dmxdev->filternum; i++) + + for (i=0; i<dmxdev->filternum; i++) if (dmxdev->filter[i].state>=DMXDEV_STATE_GO && dmxdev->filter[i].type==DMXDEV_TYPE_SEC && dmxdev->filter[i].pid==pid) { dvb_dmxdev_feed_start(&dmxdev->filter[i]); return 0; } - + filter->dev->demux->release_section_feed(dmxdev->demux, filter->feed.sec); return 0; @@ -480,7 +480,7 @@ static int dvb_dmxdev_feed_restart(struct dmxdev_filter *filter) static int dvb_dmxdev_filter_stop(struct dmxdev_filter *dmxdevfilter) { - if (dmxdevfilter->state<DMXDEV_STATE_GO) + if (dmxdevfilter->state<DMXDEV_STATE_GO) return 0; switch (dmxdevfilter->type) { @@ -505,17 +505,17 @@ static int dvb_dmxdev_filter_stop(struct dmxdev_filter *dmxdevfilter) dmxdevfilter->feed.ts=NULL; break; default: - if (dmxdevfilter->state==DMXDEV_STATE_ALLOCATED) + if (dmxdevfilter->state==DMXDEV_STATE_ALLOCATED) return 0; return -EINVAL; } - dmxdevfilter->buffer.pwrite=dmxdevfilter->buffer.pread=0; + dmxdevfilter->buffer.pwrite=dmxdevfilter->buffer.pread=0; return 0; } static inline int dvb_dmxdev_filter_reset(struct dmxdev_filter *dmxdevfilter) { - if (dmxdevfilter->state<DMXDEV_STATE_SET) + if (dmxdevfilter->state<DMXDEV_STATE_SET) return 0; dmxdevfilter->type=DMXDEV_TYPE_NONE; @@ -530,11 +530,11 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter) void *mem; int ret, i; - if (filter->state < DMXDEV_STATE_SET) + if (filter->state < DMXDEV_STATE_SET) return -EINVAL; if (filter->state >= DMXDEV_STATE_GO) - dvb_dmxdev_filter_stop(filter); + dvb_dmxdev_filter_stop(filter); if (!(mem = filter->buffer.data)) { mem = vmalloc(filter->buffer.size); @@ -560,27 +560,27 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter) /* find active filter/feed with same PID */ for (i=0; i<dmxdev->filternum; i++) { if (dmxdev->filter[i].state >= DMXDEV_STATE_GO && - dmxdev->filter[i].pid == para->pid && + dmxdev->filter[i].pid == para->pid && dmxdev->filter[i].type == DMXDEV_TYPE_SEC) { *secfeed = dmxdev->filter[i].feed.sec; break; } } - /* if no feed found, try to allocate new one */ + /* if no feed found, try to allocate new one */ if (!*secfeed) { - ret=dmxdev->demux->allocate_section_feed(dmxdev->demux, - secfeed, + ret=dmxdev->demux->allocate_section_feed(dmxdev->demux, + secfeed, dvb_dmxdev_section_callback); if (ret<0) { printk ("DVB (%s): could not alloc feed\n", __FUNCTION__); return ret; } - - ret=(*secfeed)->set(*secfeed, para->pid, 32768, 0, + + ret=(*secfeed)->set(*secfeed, para->pid, 32768, 0, (para->flags & DMX_CHECK_CRC) ? 1 : 0); - + if (ret<0) { printk ("DVB (%s): could not set feed\n", __FUNCTION__); @@ -590,7 +590,7 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter) } else { dvb_dmxdev_feed_stop(filter); } - + ret=(*secfeed)->allocate_filter(*secfeed, secfilter); if (ret < 0) { @@ -602,11 +602,11 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter) (*secfilter)->priv = filter; - memcpy(&((*secfilter)->filter_value[3]), + memcpy(&((*secfilter)->filter_value[3]), &(para->filter.filter[1]), DMX_FILTER_SIZE-1); - memcpy(&(*secfilter)->filter_mask[3], + memcpy(&(*secfilter)->filter_mask[3], ¶->filter.mask[1], DMX_FILTER_SIZE-1); - memcpy(&(*secfilter)->filter_mode[3], + memcpy(&(*secfilter)->filter_mode[3], ¶->filter.mode[1], DMX_FILTER_SIZE-1); (*secfilter)->filter_value[0]=para->filter.filter[0]; @@ -614,7 +614,7 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter) (*secfilter)->filter_mode[0]=para->filter.mode[0]; (*secfilter)->filter_mask[1]=0; (*secfilter)->filter_mask[2]=0; - + filter->todo = 0; ret = filter->feed.sec->start_filtering (filter->feed.sec); @@ -626,7 +626,7 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter) break; } - case DMXDEV_TYPE_PES: + case DMXDEV_TYPE_PES: { struct timespec timeout = { 0 }; struct dmx_pes_filter_params *para = &filter->params.pes; @@ -635,27 +635,27 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter) int ts_type; enum dmx_ts_pes ts_pes; struct dmx_ts_feed **tsfeed = &filter->feed.ts; - + filter->feed.ts = NULL; otype=para->output; - + ts_pes=(enum dmx_ts_pes) para->pes_type; - - if (ts_pes<DMX_PES_OTHER) + + if (ts_pes<DMX_PES_OTHER) ts_type=TS_DECODER; else ts_type=0; - - if (otype == DMX_OUT_TS_TAP) + + if (otype == DMX_OUT_TS_TAP) ts_type |= TS_PACKET; - - if (otype == DMX_OUT_TAP) + + if (otype == DMX_OUT_TAP) ts_type |= TS_PAYLOAD_ONLY|TS_PACKET; - - ret=dmxdev->demux->allocate_ts_feed(dmxdev->demux, - tsfeed, + + ret=dmxdev->demux->allocate_ts_feed(dmxdev->demux, + tsfeed, dvb_dmxdev_ts_callback); - if (ret<0) + if (ret<0) return ret; (*tsfeed)->priv = (void *) filter; @@ -730,13 +730,13 @@ static int dvb_dmxdev_filter_free(struct dmxdev *dmxdev, struct dmxdev_filter *d up(&dmxdev->mutex); return -ERESTARTSYS; } - + dvb_dmxdev_filter_stop(dmxdevfilter); dvb_dmxdev_filter_reset(dmxdevfilter); - + if (dmxdevfilter->buffer.data) { void *mem=dmxdevfilter->buffer.data; - + spin_lock_irq(&dmxdev->lock); dmxdevfilter->buffer.data=NULL; spin_unlock_irq(&dmxdev->lock); @@ -759,22 +759,22 @@ static inline void invert_mode(dmx_filter_t *filter) } -static int dvb_dmxdev_filter_set(struct dmxdev *dmxdev, - struct dmxdev_filter *dmxdevfilter, +static int dvb_dmxdev_filter_set(struct dmxdev *dmxdev, + struct dmxdev_filter *dmxdevfilter, struct dmx_sct_filter_params *params) { dprintk ("function : %s\n", __FUNCTION__); dvb_dmxdev_filter_stop(dmxdevfilter); - + dmxdevfilter->type=DMXDEV_TYPE_SEC; dmxdevfilter->pid=params->pid; - memcpy(&dmxdevfilter->params.sec, + memcpy(&dmxdevfilter->params.sec, params, sizeof(struct dmx_sct_filter_params)); invert_mode(&dmxdevfilter->params.sec.filter); dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET); - - if (params->flags&DMX_IMMEDIATE_START) + + if (params->flags&DMX_IMMEDIATE_START) return dvb_dmxdev_filter_start(dmxdevfilter); return 0; @@ -795,7 +795,7 @@ static int dvb_dmxdev_pes_filter_set(struct dmxdev *dmxdev, dvb_dmxdev_filter_state_set(dmxdevfilter, DMXDEV_STATE_SET); - if (params->flags&DMX_IMMEDIATE_START) + if (params->flags&DMX_IMMEDIATE_START) return dvb_dmxdev_filter_start(dmxdevfilter); return 0; @@ -806,18 +806,18 @@ static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil, { int result, hcount; int done=0; - + if (dfil->todo<=0) { hcount=3+dfil->todo; if (hcount>count) hcount=count; - result=dvb_dmxdev_buffer_read(&dfil->buffer, file->f_flags&O_NONBLOCK, + result=dvb_dmxdev_buffer_read(&dfil->buffer, file->f_flags&O_NONBLOCK, buf, hcount, ppos); if (result<0) { dfil->todo=0; return result; } - if (copy_from_user(dfil->secheader-dfil->todo, buf, result)) + if (copy_from_user(dfil->secheader-dfil->todo, buf, result)) return -EFAULT; buf+=result; done=result; @@ -831,7 +831,7 @@ static ssize_t dvb_dmxdev_read_sec(struct dmxdev_filter *dfil, } if (count>dfil->todo) count=dfil->todo; - result=dvb_dmxdev_buffer_read(&dfil->buffer, file->f_flags&O_NONBLOCK, + result=dvb_dmxdev_buffer_read(&dfil->buffer, file->f_flags&O_NONBLOCK, buf, count, ppos); if (result<0) return result; @@ -852,8 +852,8 @@ dvb_demux_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) if (dmxdevfilter->type==DMXDEV_TYPE_SEC) ret=dvb_dmxdev_read_sec(dmxdevfilter, file, buf, count, ppos); else - ret=dvb_dmxdev_buffer_read(&dmxdevfilter->buffer, - file->f_flags&O_NONBLOCK, + ret=dvb_dmxdev_buffer_read(&dmxdevfilter->buffer, + file->f_flags&O_NONBLOCK, buf, count, ppos); up(&dmxdevfilter->mutex); @@ -868,7 +868,7 @@ static int dvb_demux_do_ioctl(struct inode *inode, struct file *file, struct dmxdev *dmxdev=dmxdevfilter->dev; unsigned long arg=(unsigned long) parg; int ret=0; - + if (down_interruptible (&dmxdev->mutex)) return -ERESTARTSYS; @@ -894,27 +894,27 @@ static int dvb_demux_do_ioctl(struct inode *inode, struct file *file, up(&dmxdevfilter->mutex); break; - case DMX_SET_FILTER: + case DMX_SET_FILTER: if (down_interruptible(&dmxdevfilter->mutex)) { up(&dmxdev->mutex); return -ERESTARTSYS; } - ret = dvb_dmxdev_filter_set(dmxdev, dmxdevfilter, + ret = dvb_dmxdev_filter_set(dmxdev, dmxdevfilter, (struct dmx_sct_filter_params *)parg); up(&dmxdevfilter->mutex); break; - case DMX_SET_PES_FILTER: + case DMX_SET_PES_FILTER: if (down_interruptible(&dmxdevfilter->mutex)) { up(&dmxdev->mutex); return -ERESTARTSYS; } - ret=dvb_dmxdev_pes_filter_set(dmxdev, dmxdevfilter, + ret=dvb_dmxdev_pes_filter_set(dmxdev, dmxdevfilter, (struct dmx_pes_filter_params *)parg); up(&dmxdevfilter->mutex); break; - case DMX_SET_BUFFER_SIZE: + case DMX_SET_BUFFER_SIZE: if (down_interruptible(&dmxdevfilter->mutex)) { up(&dmxdev->mutex); return -ERESTARTSYS; @@ -922,11 +922,11 @@ static int dvb_demux_do_ioctl(struct inode *inode, struct file *file, ret=dvb_dmxdev_set_buffer_size(dmxdevfilter, arg); up(&dmxdevfilter->mutex); break; - - case DMX_GET_EVENT: + + case DMX_GET_EVENT: break; - - case DMX_GET_PES_PIDS: + + case DMX_GET_PES_PIDS: if (!dmxdev->demux->get_pes_pids) { ret=-EINVAL; break; @@ -992,6 +992,7 @@ static int dvb_demux_release(struct inode *inode, struct file *file) return dvb_dmxdev_filter_free(dmxdev, dmxdevfilter); } + static struct file_operations dvb_demux_fops = { .owner = THIS_MODULE, .read = dvb_demux_read, @@ -1001,6 +1002,7 @@ static struct file_operations dvb_demux_fops = { .poll = dvb_demux_poll, }; + static struct dvb_device dvbdev_demux = { .priv = NULL, .users = 1, @@ -1008,8 +1010,9 @@ static struct dvb_device dvbdev_demux = { .fops = &dvb_demux_fops }; + static int dvb_dvr_do_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, void *parg) + unsigned int cmd, void *parg) { struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; struct dmxdev *dmxdev=(struct dmxdev *) dvbdev->priv; @@ -1020,11 +1023,11 @@ static int dvb_dvr_do_ioctl(struct inode *inode, struct file *file, return -ERESTARTSYS; switch (cmd) { - case DMX_SET_BUFFER_SIZE: + case DMX_SET_BUFFER_SIZE: // FIXME: implement ret=0; break; - + default: ret=-EINVAL; } @@ -1032,8 +1035,9 @@ static int dvb_dvr_do_ioctl(struct inode *inode, struct file *file, return ret; } + static int dvb_dvr_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, unsigned long arg) + unsigned int cmd, unsigned long arg) { return dvb_usercopy(inode, file, cmd, arg, dvb_dvr_do_ioctl); } @@ -1055,7 +1059,7 @@ static unsigned int dvb_dvr_poll (struct file *file, poll_table *wait) if (dmxdev->dvr_buffer.pread!=dmxdev->dvr_buffer.pwrite) mask |= (POLLIN | POLLRDNORM | POLLPRI); - } else + } else mask |= (POLLOUT | POLLWRNORM | POLLPRI); return mask; @@ -1079,14 +1083,14 @@ static struct dvb_device dvbdev_dvr = { .fops = &dvb_dvr_fops }; -int +int dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter) { int i; - if (dmxdev->demux->open(dmxdev->demux)<0) + if (dmxdev->demux->open(dmxdev->demux) < 0) return -EUSERS; - + dmxdev->filter = vmalloc(dmxdev->filternum*sizeof(struct dmxdev_filter)); if (!dmxdev->filter) return -ENOMEM; @@ -1109,6 +1113,7 @@ dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter) dvb_dmxdev_filter_state_set(&dmxdev->filter[i], DMXDEV_STATE_FREE); dvb_dmxdev_dvr_state_set(&dmxdev->dvr[i], DMXDEV_STATE_FREE); } + dvb_register_device(dvb_adapter, &dmxdev->dvbdev, &dvbdev_demux, dmxdev, DVB_DEVICE_DEMUX); dvb_register_device(dvb_adapter, &dmxdev->dvr_dvbdev, &dvbdev_dvr, dmxdev, DVB_DEVICE_DVR); @@ -1118,15 +1123,17 @@ dvb_dmxdev_init(struct dmxdev *dmxdev, struct dvb_adapter *dvb_adapter) } EXPORT_SYMBOL(dvb_dmxdev_init); -void +void dvb_dmxdev_release(struct dmxdev *dmxdev) { dvb_unregister_device(dmxdev->dvbdev); dvb_unregister_device(dmxdev->dvr_dvbdev); + if (dmxdev->filter) { vfree(dmxdev->filter); dmxdev->filter=NULL; } + if (dmxdev->dvr) { vfree(dmxdev->dvr); dmxdev->dvr=NULL; @@ -1134,4 +1141,3 @@ dvb_dmxdev_release(struct dmxdev *dmxdev) dmxdev->demux->close(dmxdev->demux); } EXPORT_SYMBOL(dvb_dmxdev_release); - diff --git a/drivers/media/dvb/dvb-core/dmxdev.h b/drivers/media/dvb/dvb-core/dmxdev.h index 47d31777c0c3..395a9cd75012 100644 --- a/drivers/media/dvb/dvb-core/dmxdev.h +++ b/drivers/media/dvb/dvb-core/dmxdev.h @@ -1,4 +1,4 @@ -/* +/* * dmxdev.h * * Copyright (C) 2000 Ralph Metzler & Marcus Metzler diff --git a/drivers/media/dvb/dvb-core/dvb_ca_en50221.c b/drivers/media/dvb/dvb-core/dvb_ca_en50221.c index 63eccd4b67b2..9df998504c8e 100644 --- a/drivers/media/dvb/dvb-core/dvb_ca_en50221.c +++ b/drivers/media/dvb/dvb-core/dvb_ca_en50221.c @@ -61,19 +61,19 @@ MODULE_PARM_DESC(cam_debug, "enable verbose debug messages"); #define CTRLIF_SIZE_LOW 2 #define CTRLIF_SIZE_HIGH 3 -#define CMDREG_HC 1 /* Host control */ -#define CMDREG_SW 2 /* Size write */ -#define CMDREG_SR 4 /* Size read */ -#define CMDREG_RS 8 /* Reset interface */ -#define CMDREG_FRIE 0x40 /* Enable FR interrupt */ -#define CMDREG_DAIE 0x80 /* Enable DA interrupt */ +#define CMDREG_HC 1 /* Host control */ +#define CMDREG_SW 2 /* Size write */ +#define CMDREG_SR 4 /* Size read */ +#define CMDREG_RS 8 /* Reset interface */ +#define CMDREG_FRIE 0x40 /* Enable FR interrupt */ +#define CMDREG_DAIE 0x80 /* Enable DA interrupt */ #define IRQEN (CMDREG_DAIE) -#define STATUSREG_RE 1 /* read error */ -#define STATUSREG_WE 2 /* write error */ -#define STATUSREG_FR 0x40 /* module free */ -#define STATUSREG_DA 0x80 /* data available */ -#define STATUSREG_TXERR (STATUSREG_RE|STATUSREG_WE) /* general transfer error */ +#define STATUSREG_RE 1 /* read error */ +#define STATUSREG_WE 2 /* write error */ +#define STATUSREG_FR 0x40 /* module free */ +#define STATUSREG_DA 0x80 /* data available */ +#define STATUSREG_TXERR (STATUSREG_RE|STATUSREG_WE) /* general transfer error */ #define DVB_CA_SLOTSTATE_NONE 0 @@ -89,83 +89,83 @@ MODULE_PARM_DESC(cam_debug, "enable verbose debug messages"); /* Information on a CA slot */ struct dvb_ca_slot { - /* current state of the CAM */ - int slot_state; + /* current state of the CAM */ + int slot_state; - /* Number of CAMCHANGES that have occurred since last processing */ - atomic_t camchange_count; + /* Number of CAMCHANGES that have occurred since last processing */ + atomic_t camchange_count; - /* Type of last CAMCHANGE */ - int camchange_type; + /* Type of last CAMCHANGE */ + int camchange_type; - /* base address of CAM config */ - u32 config_base; + /* base address of CAM config */ + u32 config_base; - /* value to write into Config Control register */ - u8 config_option; + /* value to write into Config Control register */ + u8 config_option; - /* if 1, the CAM supports DA IRQs */ - u8 da_irq_supported:1; + /* if 1, the CAM supports DA IRQs */ + u8 da_irq_supported:1; - /* size of the buffer to use when talking to the CAM */ - int link_buf_size; + /* size of the buffer to use when talking to the CAM */ + int link_buf_size; - /* semaphore for syncing access to slot structure */ - struct rw_semaphore sem; + /* semaphore for syncing access to slot structure */ + struct rw_semaphore sem; - /* buffer for incoming packets */ - struct dvb_ringbuffer rx_buffer; + /* buffer for incoming packets */ + struct dvb_ringbuffer rx_buffer; - /* timer used during various states of the slot */ - unsigned long timeout; + /* timer used during various states of the slot */ + unsigned long timeout; }; /* Private CA-interface information */ struct dvb_ca_private { - /* pointer back to the public data structure */ - struct dvb_ca_en50221* pub; + /* pointer back to the public data structure */ + struct dvb_ca_en50221 *pub; - /* the DVB device */ - struct dvb_device *dvbdev; + /* the DVB device */ + struct dvb_device *dvbdev; - /* Flags describing the interface (DVB_CA_FLAG_*) */ - u32 flags; + /* Flags describing the interface (DVB_CA_FLAG_*) */ + u32 flags; - /* number of slots supported by this CA interface */ - unsigned int slot_count; + /* number of slots supported by this CA interface */ + unsigned int slot_count; - /* information on each slot */ - struct dvb_ca_slot* slot_info; + /* information on each slot */ + struct dvb_ca_slot *slot_info; - /* wait queues for read() and write() operations */ - wait_queue_head_t wait_queue; + /* wait queues for read() and write() operations */ + wait_queue_head_t wait_queue; - /* PID of the monitoring thread */ - pid_t thread_pid; + /* PID of the monitoring thread */ + pid_t thread_pid; - /* Wait queue used when shutting thread down */ - wait_queue_head_t thread_queue; + /* Wait queue used when shutting thread down */ + wait_queue_head_t thread_queue; - /* Flag indicating when thread should exit */ - int exit:1; + /* Flag indicating when thread should exit */ + int exit:1; - /* Flag indicating if the CA device is open */ - int open:1; + /* Flag indicating if the CA device is open */ + int open:1; - /* Flag indicating the thread should wake up now */ - int wakeup:1; + /* Flag indicating the thread should wake up now */ + int wakeup:1; - /* Delay the main thread should use */ - unsigned long delay; + /* Delay the main thread should use */ + unsigned long delay; - /* Slot to start looking for data to read from in the next user-space read operation */ - int next_read_slot; + /* Slot to start looking for data to read from in the next user-space read operation */ + int next_read_slot; }; -static void dvb_ca_en50221_thread_wakeup(struct dvb_ca_private* ca); -static int dvb_ca_en50221_read_data(struct dvb_ca_private* ca, int slot, u8* ebuf, int ecount); -static int dvb_ca_en50221_write_data(struct dvb_ca_private* ca, int slot, u8* ebuf, int ecount); +static void dvb_ca_en50221_thread_wakeup(struct dvb_ca_private *ca); +static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot, u8 * ebuf, int ecount); +static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot, u8 * ebuf, int ecount); /** @@ -177,19 +177,19 @@ static int dvb_ca_en50221_write_data(struct dvb_ca_private* ca, int slot, u8* eb * @param nlen Number of bytes in needle. * @return Pointer into haystack needle was found at, or NULL if not found. */ -static u8* findstr(u8* haystack, int hlen, u8* needle, int nlen) +static u8 *findstr(u8 * haystack, int hlen, u8 * needle, int nlen) { - int i; + int i; if (hlen < nlen) return NULL; - for(i=0; i<= hlen - nlen; i++) { + for (i = 0; i <= hlen - nlen; i++) { if (!strncmp(haystack + i, needle, nlen)) return haystack + i; - } + } - return NULL; + return NULL; } @@ -201,43 +201,43 @@ static u8* findstr(u8* haystack, int hlen, u8* needle, int nlen) /** * Check CAM status. */ -static int dvb_ca_en50221_check_camstatus(struct dvb_ca_private* ca, int slot) +static int dvb_ca_en50221_check_camstatus(struct dvb_ca_private *ca, int slot) { - int slot_status; - int cam_present_now; - int cam_changed; + int slot_status; + int cam_present_now; + int cam_changed; - /* IRQ mode */ - if (ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE) { - return (atomic_read(&ca->slot_info[slot].camchange_count) != 0); - } + /* IRQ mode */ + if (ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE) { + return (atomic_read(&ca->slot_info[slot].camchange_count) != 0); + } - /* poll mode */ + /* poll mode */ slot_status = ca->pub->poll_slot_status(ca->pub, slot, ca->open); - cam_present_now = (slot_status & DVB_CA_EN50221_POLL_CAM_PRESENT) ? 1: 0; - cam_changed = (slot_status & DVB_CA_EN50221_POLL_CAM_CHANGED) ? 1: 0; - if (!cam_changed) { - int cam_present_old = (ca->slot_info[slot].slot_state != DVB_CA_SLOTSTATE_NONE); - cam_changed = (cam_present_now != cam_present_old); - } - - if (cam_changed) { - if (!cam_present_now) { - ca->slot_info[slot].camchange_type = DVB_CA_EN50221_CAMCHANGE_REMOVED; - } else { - ca->slot_info[slot].camchange_type = DVB_CA_EN50221_CAMCHANGE_INSERTED; - } - atomic_set(&ca->slot_info[slot].camchange_count, 1); - } else { - if ((ca->slot_info[slot].slot_state == DVB_CA_SLOTSTATE_WAITREADY) && - (slot_status & DVB_CA_EN50221_POLL_CAM_READY)) { - // move to validate state if reset is completed - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_VALIDATE; - } - } - - return cam_changed; + cam_present_now = (slot_status & DVB_CA_EN50221_POLL_CAM_PRESENT) ? 1 : 0; + cam_changed = (slot_status & DVB_CA_EN50221_POLL_CAM_CHANGED) ? 1 : 0; + if (!cam_changed) { + int cam_present_old = (ca->slot_info[slot].slot_state != DVB_CA_SLOTSTATE_NONE); + cam_changed = (cam_present_now != cam_present_old); + } + + if (cam_changed) { + if (!cam_present_now) { + ca->slot_info[slot].camchange_type = DVB_CA_EN50221_CAMCHANGE_REMOVED; + } else { + ca->slot_info[slot].camchange_type = DVB_CA_EN50221_CAMCHANGE_INSERTED; + } + atomic_set(&ca->slot_info[slot].camchange_count, 1); + } else { + if ((ca->slot_info[slot].slot_state == DVB_CA_SLOTSTATE_WAITREADY) && + (slot_status & DVB_CA_EN50221_POLL_CAM_READY)) { + // move to validate state if reset is completed + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_VALIDATE; + } + } + + return cam_changed; } @@ -255,39 +255,39 @@ static int dvb_ca_en50221_check_camstatus(struct dvb_ca_private* ca, int slot) static int dvb_ca_en50221_wait_if_status(struct dvb_ca_private *ca, int slot, u8 waitfor, int timeout_hz) { - unsigned long timeout; - unsigned long start; + unsigned long timeout; + unsigned long start; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - /* loop until timeout elapsed */ - start = jiffies; - timeout = jiffies + timeout_hz; - while(1) { - /* read the status and check for error */ - int res = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS); + /* loop until timeout elapsed */ + start = jiffies; + timeout = jiffies + timeout_hz; + while (1) { + /* read the status and check for error */ + int res = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS); if (res < 0) return -EIO; - /* if we got the flags, it was successful! */ - if (res & waitfor) { - dprintk("%s succeeded timeout:%lu\n", __FUNCTION__, jiffies - start); - return 0; - } + /* if we got the flags, it was successful! */ + if (res & waitfor) { + dprintk("%s succeeded timeout:%lu\n", __FUNCTION__, jiffies - start); + return 0; + } - /* check for timeout */ - if (time_after(jiffies, timeout)) { - break; - } + /* check for timeout */ + if (time_after(jiffies, timeout)) { + break; + } - /* wait for a bit */ - msleep(1); - } + /* wait for a bit */ + msleep(1); + } - dprintk("%s failed timeout:%lu\n", __FUNCTION__, jiffies - start); + dprintk("%s failed timeout:%lu\n", __FUNCTION__, jiffies - start); - /* if we get here, we've timed out */ - return -ETIMEDOUT; + /* if we get here, we've timed out */ + return -ETIMEDOUT; } @@ -299,22 +299,22 @@ static int dvb_ca_en50221_wait_if_status(struct dvb_ca_private *ca, int slot, * * @return 0 on success, nonzero on failure. */ -static int dvb_ca_en50221_link_init(struct dvb_ca_private* ca, int slot) +static int dvb_ca_en50221_link_init(struct dvb_ca_private *ca, int slot) { - int ret; - int buf_size; - u8 buf[2]; + int ret; + int buf_size; + u8 buf[2]; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - /* we'll be determining these during this function */ - ca->slot_info[slot].da_irq_supported = 0; + /* we'll be determining these during this function */ + ca->slot_info[slot].da_irq_supported = 0; - /* set the host link buffer size temporarily. it will be overwritten with the - * real negotiated size later. */ - ca->slot_info[slot].link_buf_size = 2; + /* set the host link buffer size temporarily. it will be overwritten with the + * real negotiated size later. */ + ca->slot_info[slot].link_buf_size = 2; - /* read the buffer size from the CAM */ + /* read the buffer size from the CAM */ if ((ret = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN | CMDREG_SR)) != 0) return ret; if ((ret = dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_DA, HZ / 10)) != 0) @@ -324,16 +324,16 @@ static int dvb_ca_en50221_link_init(struct dvb_ca_private* ca, int slot) if ((ret = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN)) != 0) return ret; - /* store it, and choose the minimum of our buffer and the CAM's buffer size */ - buf_size = (buf[0] << 8) | buf[1]; + /* store it, and choose the minimum of our buffer and the CAM's buffer size */ + buf_size = (buf[0] << 8) | buf[1]; if (buf_size > HOST_LINK_BUF_SIZE) buf_size = HOST_LINK_BUF_SIZE; - ca->slot_info[slot].link_buf_size = buf_size; - buf[0] = buf_size >> 8; - buf[1] = buf_size & 0xff; - dprintk("Chosen link buffer size of %i\n", buf_size); + ca->slot_info[slot].link_buf_size = buf_size; + buf[0] = buf_size >> 8; + buf[1] = buf_size & 0xff; + dprintk("Chosen link buffer size of %i\n", buf_size); - /* write the buffer size to the CAM */ + /* write the buffer size to the CAM */ if ((ret = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN | CMDREG_SW)) != 0) return ret; if ((ret = dvb_ca_en50221_wait_if_status(ca, slot, STATUSREG_FR, HZ / 10)) != 0) @@ -343,8 +343,8 @@ static int dvb_ca_en50221_link_init(struct dvb_ca_private* ca, int slot) if ((ret = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN)) != 0) return ret; - /* success */ - return 0; + /* success */ + return 0; } /** @@ -359,44 +359,44 @@ static int dvb_ca_en50221_link_init(struct dvb_ca_private* ca, int slot) * * @return 0 on success, nonzero on error. */ -static int dvb_ca_en50221_read_tuple(struct dvb_ca_private* ca, int slot, - int* address, int* tupleType, int* tupleLength, u8* tuple) +static int dvb_ca_en50221_read_tuple(struct dvb_ca_private *ca, int slot, + int *address, int *tupleType, int *tupleLength, u8 * tuple) { - int i; - int _tupleType; - int _tupleLength; - int _address = *address; + int i; + int _tupleType; + int _tupleLength; + int _address = *address; - /* grab the next tuple length and type */ + /* grab the next tuple length and type */ if ((_tupleType = ca->pub->read_attribute_mem(ca->pub, slot, _address)) < 0) return _tupleType; - if (_tupleType == 0xff) { - dprintk("END OF CHAIN TUPLE type:0x%x\n", _tupleType); - *address += 2; - *tupleType = _tupleType; - *tupleLength = 0; - return 0; - } + if (_tupleType == 0xff) { + dprintk("END OF CHAIN TUPLE type:0x%x\n", _tupleType); + *address += 2; + *tupleType = _tupleType; + *tupleLength = 0; + return 0; + } if ((_tupleLength = ca->pub->read_attribute_mem(ca->pub, slot, _address + 2)) < 0) return _tupleLength; - _address += 4; + _address += 4; - dprintk("TUPLE type:0x%x length:%i\n", _tupleType, _tupleLength); + dprintk("TUPLE type:0x%x length:%i\n", _tupleType, _tupleLength); - /* read in the whole tuple */ - for(i=0; i< _tupleLength; i++) { - tuple[i] = ca->pub->read_attribute_mem(ca->pub, slot, _address + (i*2)); + /* read in the whole tuple */ + for (i = 0; i < _tupleLength; i++) { + tuple[i] = ca->pub->read_attribute_mem(ca->pub, slot, _address + (i * 2)); dprintk(" 0x%02x: 0x%02x %c\n", i, tuple[i] & 0xff, ((tuple[i] > 31) && (tuple[i] < 127)) ? tuple[i] : '.'); - } - _address += (_tupleLength*2); - - // success - *tupleType = _tupleType; - *tupleLength = _tupleLength; - *address = _address; - return 0; + } + _address += (_tupleLength * 2); + + // success + *tupleType = _tupleType; + *tupleLength = _tupleLength; + *address = _address; + return 0; } @@ -409,23 +409,23 @@ static int dvb_ca_en50221_read_tuple(struct dvb_ca_private* ca, int slot, * * @return 0 on success, <0 on failure. */ -static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private* ca, int slot) +static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private *ca, int slot) { - int address = 0; - int tupleLength; - int tupleType; - u8 tuple[257]; - char* dvb_str; - int rasz; - int status; - int got_cftableentry = 0; - int end_chain = 0; - int i; - u16 manfid = 0; - u16 devid = 0; - - - // CISTPL_DEVICE_0A + int address = 0; + int tupleLength; + int tupleType; + u8 tuple[257]; + char *dvb_str; + int rasz; + int status; + int got_cftableentry = 0; + int end_chain = 0; + int i; + u16 manfid = 0; + u16 devid = 0; + + + // CISTPL_DEVICE_0A if ((status = dvb_ca_en50221_read_tuple(ca, slot, &address, &tupleType, &tupleLength, tuple)) < 0) return status; @@ -434,7 +434,7 @@ static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private* ca, int slot) - // CISTPL_DEVICE_0C + // CISTPL_DEVICE_0C if ((status = dvb_ca_en50221_read_tuple(ca, slot, &address, &tupleType, &tupleLength, tuple)) < 0) return status; @@ -443,7 +443,7 @@ static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private* ca, int slot) - // CISTPL_VERS_1 + // CISTPL_VERS_1 if ((status = dvb_ca_en50221_read_tuple(ca, slot, &address, &tupleType, &tupleLength, tuple)) < 0) return status; @@ -452,7 +452,7 @@ static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private* ca, int slot) - // CISTPL_MANFID + // CISTPL_MANFID if ((status = dvb_ca_en50221_read_tuple(ca, slot, &address, &tupleType, &tupleLength, tuple)) < 0) return status; @@ -460,12 +460,12 @@ static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private* ca, int slot) return -EINVAL; if (tupleLength != 4) return -EINVAL; - manfid = (tuple[1] << 8) | tuple[0]; - devid = (tuple[3] << 8) | tuple[2]; + manfid = (tuple[1] << 8) | tuple[0]; + devid = (tuple[3] << 8) | tuple[2]; - // CISTPL_CONFIG + // CISTPL_CONFIG if ((status = dvb_ca_en50221_read_tuple(ca, slot, &address, &tupleType, &tupleLength, tuple)) < 0) return status; @@ -474,76 +474,76 @@ static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private* ca, int slot) if (tupleLength < 3) return -EINVAL; - /* extract the configbase */ - rasz = tuple[0] & 3; + /* extract the configbase */ + rasz = tuple[0] & 3; if (tupleLength < (3 + rasz + 14)) return -EINVAL; - ca->slot_info[slot].config_base = 0; - for(i=0; i< rasz+1; i++) { - ca->slot_info[slot].config_base |= (tuple[2+i] << (8*i)); - } + ca->slot_info[slot].config_base = 0; + for (i = 0; i < rasz + 1; i++) { + ca->slot_info[slot].config_base |= (tuple[2 + i] << (8 * i)); + } - /* check it contains the correct DVB string */ - dvb_str = findstr(tuple, tupleLength, "DVB_CI_V", 8); + /* check it contains the correct DVB string */ + dvb_str = findstr(tuple, tupleLength, "DVB_CI_V", 8); if (dvb_str == NULL) return -EINVAL; if (tupleLength < ((dvb_str - (char *) tuple) + 12)) return -EINVAL; - /* is it a version we support? */ - if (strncmp(dvb_str + 8, "1.00", 4)) { - printk("dvb_ca adapter %d: Unsupported DVB CAM module version %c%c%c%c\n", + /* is it a version we support? */ + if (strncmp(dvb_str + 8, "1.00", 4)) { + printk("dvb_ca adapter %d: Unsupported DVB CAM module version %c%c%c%c\n", ca->dvbdev->adapter->num, dvb_str[8], dvb_str[9], dvb_str[10], dvb_str[11]); - return -EINVAL; - } + return -EINVAL; + } - /* process the CFTABLE_ENTRY tuples, and any after those */ - while((!end_chain) && (address < 0x1000)) { + /* process the CFTABLE_ENTRY tuples, and any after those */ + while ((!end_chain) && (address < 0x1000)) { if ((status = dvb_ca_en50221_read_tuple(ca, slot, &address, &tupleType, &tupleLength, tuple)) < 0) return status; - switch(tupleType) { - case 0x1B: // CISTPL_CFTABLE_ENTRY + switch (tupleType) { + case 0x1B: // CISTPL_CFTABLE_ENTRY if (tupleLength < (2 + 11 + 17)) break; - /* if we've already parsed one, just use it */ + /* if we've already parsed one, just use it */ if (got_cftableentry) break; - /* get the config option */ - ca->slot_info[slot].config_option = tuple[0] & 0x3f; + /* get the config option */ + ca->slot_info[slot].config_option = tuple[0] & 0x3f; - /* OK, check it contains the correct strings */ - if ((findstr(tuple, tupleLength, "DVB_HOST", 8) == NULL) || + /* OK, check it contains the correct strings */ + if ((findstr(tuple, tupleLength, "DVB_HOST", 8) == NULL) || (findstr(tuple, tupleLength, "DVB_CI_MODULE", 13) == NULL)) break; - got_cftableentry = 1; - break; + got_cftableentry = 1; + break; - case 0x14: // CISTPL_NO_LINK - break; + case 0x14: // CISTPL_NO_LINK + break; - case 0xFF: // CISTPL_END - end_chain = 1; - break; + case 0xFF: // CISTPL_END + end_chain = 1; + break; - default: /* Unknown tuple type - just skip this tuple and move to the next one */ + default: /* Unknown tuple type - just skip this tuple and move to the next one */ dprintk("dvb_ca: Skipping unknown tuple type:0x%x length:0x%x\n", tupleType, tupleLength); - break; - } - } + break; + } + } if ((address > 0x1000) || (!got_cftableentry)) return -EINVAL; - dprintk("Valid DVB CAM detected MANID:%x DEVID:%x CONFIGBASE:0x%x CONFIGOPTION:0x%x\n", + dprintk("Valid DVB CAM detected MANID:%x DEVID:%x CONFIGBASE:0x%x CONFIGOPTION:0x%x\n", manfid, devid, ca->slot_info[slot].config_base, ca->slot_info[slot].config_option); - // success! - return 0; + // success! + return 0; } @@ -553,24 +553,24 @@ static int dvb_ca_en50221_parse_attributes(struct dvb_ca_private* ca, int slot) * @param ca CA instance. * @param slot Slot containing the CAM. */ -static int dvb_ca_en50221_set_configoption(struct dvb_ca_private* ca, int slot) +static int dvb_ca_en50221_set_configoption(struct dvb_ca_private *ca, int slot) { - int configoption; + int configoption; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - /* set the config option */ + /* set the config option */ ca->pub->write_attribute_mem(ca->pub, slot, ca->slot_info[slot].config_base, ca->slot_info[slot].config_option); - /* check it */ - configoption = ca->pub->read_attribute_mem(ca->pub, slot, ca->slot_info[slot].config_base); - dprintk("Set configoption 0x%x, read configoption 0x%x\n", + /* check it */ + configoption = ca->pub->read_attribute_mem(ca->pub, slot, ca->slot_info[slot].config_base); + dprintk("Set configoption 0x%x, read configoption 0x%x\n", ca->slot_info[slot].config_option, configoption & 0x3f); - /* fine! */ - return 0; + /* fine! */ + return 0; } @@ -588,17 +588,17 @@ static int dvb_ca_en50221_set_configoption(struct dvb_ca_private* ca, int slot) * * @return Number of bytes read, or < 0 on error */ -static int dvb_ca_en50221_read_data(struct dvb_ca_private* ca, int slot, u8* ebuf, int ecount) +static int dvb_ca_en50221_read_data(struct dvb_ca_private *ca, int slot, u8 * ebuf, int ecount) { - int bytes_read; - int status; - u8 buf[HOST_LINK_BUF_SIZE]; - int i; + int bytes_read; + int status; + u8 buf[HOST_LINK_BUF_SIZE]; + int i; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - /* check if we have space for a link buf in the rx_buffer */ - if (ebuf == NULL) { + /* check if we have space for a link buf in the rx_buffer */ + if (ebuf == NULL) { int buf_free; down_read(&ca->slot_info[slot].sem); @@ -610,99 +610,98 @@ static int dvb_ca_en50221_read_data(struct dvb_ca_private* ca, int slot, u8* ebu buf_free = dvb_ringbuffer_free(&ca->slot_info[slot].rx_buffer); up_read(&ca->slot_info[slot].sem); - if (buf_free < (ca->slot_info[slot].link_buf_size + DVB_RINGBUFFER_PKTHDRSIZE)) { - status = -EAGAIN; - goto exit; - } - } + if (buf_free < (ca->slot_info[slot].link_buf_size + DVB_RINGBUFFER_PKTHDRSIZE)) { + status = -EAGAIN; + goto exit; + } + } - /* check if there is data available */ + /* check if there is data available */ if ((status = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS)) < 0) goto exit; - if (!(status & STATUSREG_DA)) { - /* no data */ - status = 0; - goto exit; - } + if (!(status & STATUSREG_DA)) { + /* no data */ + status = 0; + goto exit; + } - /* read the amount of data */ + /* read the amount of data */ if ((status = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_SIZE_HIGH)) < 0) goto exit; - bytes_read = status << 8; + bytes_read = status << 8; if ((status = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_SIZE_LOW)) < 0) goto exit; - bytes_read |= status; + bytes_read |= status; - /* check it will fit */ - if (ebuf == NULL) { - if (bytes_read > ca->slot_info[slot].link_buf_size) { + /* check it will fit */ + if (ebuf == NULL) { + if (bytes_read > ca->slot_info[slot].link_buf_size) { printk("dvb_ca adapter %d: CAM tried to send a buffer larger than the link buffer size (%i > %i)!\n", ca->dvbdev->adapter->num, bytes_read, ca->slot_info[slot].link_buf_size); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT; - status = -EIO; - goto exit; - } - if (bytes_read < 2) { + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT; + status = -EIO; + goto exit; + } + if (bytes_read < 2) { printk("dvb_ca adapter %d: CAM sent a buffer that was less than 2 bytes!\n", ca->dvbdev->adapter->num); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT; - status = -EIO; - goto exit; - } - } else { - if (bytes_read > ecount) { + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT; + status = -EIO; + goto exit; + } + } else { + if (bytes_read > ecount) { printk("dvb_ca adapter %d: CAM tried to send a buffer larger than the ecount size!\n", ca->dvbdev->adapter->num); - status = -EIO; - goto exit; - } - } - - /* fill the buffer */ - for(i=0; i < bytes_read; i++) { - /* read byte and check */ + status = -EIO; + goto exit; + } + } + + /* fill the buffer */ + for (i = 0; i < bytes_read; i++) { + /* read byte and check */ if ((status = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_DATA)) < 0) goto exit; - /* OK, store it in the buffer */ - buf[i] = status; - } + /* OK, store it in the buffer */ + buf[i] = status; + } - /* check for read error (RE should now be 0) */ + /* check for read error (RE should now be 0) */ if ((status = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS)) < 0) goto exit; - if (status & STATUSREG_RE) { + if (status & STATUSREG_RE) { ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT; - status = -EIO; - goto exit; - } + status = -EIO; + goto exit; + } - /* OK, add it to the receive buffer, or copy into external buffer if supplied */ - if (ebuf == NULL) { + /* OK, add it to the receive buffer, or copy into external buffer if supplied */ + if (ebuf == NULL) { down_read(&ca->slot_info[slot].sem); if (ca->slot_info[slot].rx_buffer.data == NULL) { up_read(&ca->slot_info[slot].sem); status = -EIO; goto exit; } - dvb_ringbuffer_pkt_write(&ca->slot_info[slot].rx_buffer, buf, bytes_read); + dvb_ringbuffer_pkt_write(&ca->slot_info[slot].rx_buffer, buf, bytes_read); up_read(&ca->slot_info[slot].sem); - } else { - memcpy(ebuf, buf, bytes_read); - } + } else { + memcpy(ebuf, buf, bytes_read); + } dprintk("Received CA packet for slot %i connection id 0x%x last_frag:%i size:0x%x\n", slot, buf[0], (buf[1] & 0x80) == 0, bytes_read); - /* wake up readers when a last_fragment is received */ - if ((buf[1] & 0x80) == 0x00) { - wake_up_interruptible(&ca->wait_queue); - } - - status = bytes_read; + /* wake up readers when a last_fragment is received */ + if ((buf[1] & 0x80) == 0x00) { + wake_up_interruptible(&ca->wait_queue); + } + status = bytes_read; exit: - return status; + return status; } @@ -718,71 +717,71 @@ exit: * * @return Number of bytes written, or < 0 on error. */ -static int dvb_ca_en50221_write_data(struct dvb_ca_private* ca, int slot, u8* buf, int bytes_write) +static int dvb_ca_en50221_write_data(struct dvb_ca_private *ca, int slot, u8 * buf, int bytes_write) { - int status; - int i; + int status; + int i; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - // sanity check + // sanity check if (bytes_write > ca->slot_info[slot].link_buf_size) return -EINVAL; - /* check if interface is actually waiting for us to read from it, or if a read is in progress */ + /* check if interface is actually waiting for us to read from it, or if a read is in progress */ if ((status = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS)) < 0) goto exitnowrite; - if (status & (STATUSREG_DA|STATUSREG_RE)) { - status = -EAGAIN; - goto exitnowrite; - } + if (status & (STATUSREG_DA | STATUSREG_RE)) { + status = -EAGAIN; + goto exitnowrite; + } - /* OK, set HC bit */ + /* OK, set HC bit */ if ((status = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN | CMDREG_HC)) != 0) goto exit; - /* check if interface is still free */ + /* check if interface is still free */ if ((status = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS)) < 0) goto exit; - if (!(status & STATUSREG_FR)) { - /* it wasn't free => try again later */ - status = -EAGAIN; - goto exit; - } + if (!(status & STATUSREG_FR)) { + /* it wasn't free => try again later */ + status = -EAGAIN; + goto exit; + } - /* send the amount of data */ + /* send the amount of data */ if ((status = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_SIZE_HIGH, bytes_write >> 8)) != 0) goto exit; if ((status = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_SIZE_LOW, bytes_write & 0xff)) != 0) goto exit; - /* send the buffer */ - for(i=0; i < bytes_write; i++) { + /* send the buffer */ + for (i = 0; i < bytes_write; i++) { if ((status = ca->pub->write_cam_control(ca->pub, slot, CTRLIF_DATA, buf[i])) != 0) goto exit; - } + } - /* check for write error (WE should now be 0) */ + /* check for write error (WE should now be 0) */ if ((status = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS)) < 0) goto exit; - if (status & STATUSREG_WE) { + if (status & STATUSREG_WE) { ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT; - status = -EIO; - goto exit; - } - status = bytes_write; + status = -EIO; + goto exit; + } + status = bytes_write; dprintk("Wrote CA packet for slot %i, connection id 0x%x last_frag:%i size:0x%x\n", slot, buf[0], (buf[1] & 0x80) == 0, bytes_write); exit: - ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN); + ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, IRQEN); exitnowrite: - return status; + return status; } EXPORT_SYMBOL(dvb_ca_en50221_camchange_irq); @@ -798,26 +797,26 @@ EXPORT_SYMBOL(dvb_ca_en50221_camchange_irq); * @param ca CA instance. * @param slot Slot to shut down. */ -static int dvb_ca_en50221_slot_shutdown(struct dvb_ca_private* ca, int slot) +static int dvb_ca_en50221_slot_shutdown(struct dvb_ca_private *ca, int slot) { - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - down_write(&ca->slot_info[slot].sem); - ca->pub->slot_shutdown(ca->pub, slot); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_NONE; + down_write(&ca->slot_info[slot].sem); + ca->pub->slot_shutdown(ca->pub, slot); + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_NONE; if (ca->slot_info[slot].rx_buffer.data) vfree(ca->slot_info[slot].rx_buffer.data); - ca->slot_info[slot].rx_buffer.data = NULL; - up_write(&ca->slot_info[slot].sem); + ca->slot_info[slot].rx_buffer.data = NULL; + up_write(&ca->slot_info[slot].sem); - /* need to wake up all processes to check if they're now - trying to write to a defunct CAM */ - wake_up_interruptible(&ca->wait_queue); + /* need to wake up all processes to check if they're now + trying to write to a defunct CAM */ + wake_up_interruptible(&ca->wait_queue); - dprintk("Slot %i shutdown\n", slot); + dprintk("Slot %i shutdown\n", slot); - /* success */ - return 0; + /* success */ + return 0; } EXPORT_SYMBOL(dvb_ca_en50221_camready_irq); @@ -829,24 +828,24 @@ EXPORT_SYMBOL(dvb_ca_en50221_camready_irq); * @param slot Slot concerned. * @param change_type One of the DVB_CA_CAMCHANGE_* values. */ -void dvb_ca_en50221_camchange_irq(struct dvb_ca_en50221* pubca, int slot, int change_type) +void dvb_ca_en50221_camchange_irq(struct dvb_ca_en50221 *pubca, int slot, int change_type) { - struct dvb_ca_private* ca = (struct dvb_ca_private*) pubca->private; + struct dvb_ca_private *ca = (struct dvb_ca_private *) pubca->private; - dprintk("CAMCHANGE IRQ slot:%i change_type:%i\n", slot, change_type); + dprintk("CAMCHANGE IRQ slot:%i change_type:%i\n", slot, change_type); - switch(change_type) { - case DVB_CA_EN50221_CAMCHANGE_REMOVED: - case DVB_CA_EN50221_CAMCHANGE_INSERTED: - break; + switch (change_type) { + case DVB_CA_EN50221_CAMCHANGE_REMOVED: + case DVB_CA_EN50221_CAMCHANGE_INSERTED: + break; - default: - return; - } + default: + return; + } - ca->slot_info[slot].camchange_type = change_type; - atomic_inc(&ca->slot_info[slot].camchange_count); - dvb_ca_en50221_thread_wakeup(ca); + ca->slot_info[slot].camchange_type = change_type; + atomic_inc(&ca->slot_info[slot].camchange_count); + dvb_ca_en50221_thread_wakeup(ca); } EXPORT_SYMBOL(dvb_ca_en50221_frda_irq); @@ -857,16 +856,16 @@ EXPORT_SYMBOL(dvb_ca_en50221_frda_irq); * @param ca CA instance. * @param slot Slot concerned. */ -void dvb_ca_en50221_camready_irq(struct dvb_ca_en50221* pubca, int slot) +void dvb_ca_en50221_camready_irq(struct dvb_ca_en50221 *pubca, int slot) { - struct dvb_ca_private* ca = (struct dvb_ca_private*) pubca->private; + struct dvb_ca_private *ca = (struct dvb_ca_private *) pubca->private; - dprintk("CAMREADY IRQ slot:%i\n", slot); + dprintk("CAMREADY IRQ slot:%i\n", slot); - if (ca->slot_info[slot].slot_state == DVB_CA_SLOTSTATE_WAITREADY) { - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_VALIDATE; - dvb_ca_en50221_thread_wakeup(ca); - } + if (ca->slot_info[slot].slot_state == DVB_CA_SLOTSTATE_WAITREADY) { + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_VALIDATE; + dvb_ca_en50221_thread_wakeup(ca); + } } @@ -876,27 +875,27 @@ void dvb_ca_en50221_camready_irq(struct dvb_ca_en50221* pubca, int slot) * @param ca CA instance. * @param slot Slot concerned. */ -void dvb_ca_en50221_frda_irq(struct dvb_ca_en50221* pubca, int slot) +void dvb_ca_en50221_frda_irq(struct dvb_ca_en50221 *pubca, int slot) { - struct dvb_ca_private* ca = (struct dvb_ca_private*) pubca->private; - int flags; + struct dvb_ca_private *ca = (struct dvb_ca_private *) pubca->private; + int flags; - dprintk("FR/DA IRQ slot:%i\n", slot); + dprintk("FR/DA IRQ slot:%i\n", slot); - switch(ca->slot_info[slot].slot_state) { - case DVB_CA_SLOTSTATE_LINKINIT: - flags = ca->pub->read_cam_control(pubca, slot, CTRLIF_STATUS); - if (flags & STATUSREG_DA) { - dprintk("CAM supports DA IRQ\n"); - ca->slot_info[slot].da_irq_supported = 1; + switch (ca->slot_info[slot].slot_state) { + case DVB_CA_SLOTSTATE_LINKINIT: + flags = ca->pub->read_cam_control(pubca, slot, CTRLIF_STATUS); + if (flags & STATUSREG_DA) { + dprintk("CAM supports DA IRQ\n"); + ca->slot_info[slot].da_irq_supported = 1; } - break; + break; - case DVB_CA_SLOTSTATE_RUNNING: + case DVB_CA_SLOTSTATE_RUNNING: if (ca->open) dvb_ca_en50221_read_data(ca, slot, NULL, 0); - break; - } + break; + } } @@ -909,14 +908,14 @@ void dvb_ca_en50221_frda_irq(struct dvb_ca_en50221* pubca, int slot) * * @param ca CA instance. */ -static void dvb_ca_en50221_thread_wakeup(struct dvb_ca_private* ca) +static void dvb_ca_en50221_thread_wakeup(struct dvb_ca_private *ca) { - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - ca->wakeup = 1; - mb(); - wake_up_interruptible(&ca->thread_queue); + ca->wakeup = 1; + mb(); + wake_up_interruptible(&ca->thread_queue); } /** @@ -924,16 +923,16 @@ static void dvb_ca_en50221_thread_wakeup(struct dvb_ca_private* ca) * * @param ca CA instance. */ -static int dvb_ca_en50221_thread_should_wakeup(struct dvb_ca_private* ca) +static int dvb_ca_en50221_thread_should_wakeup(struct dvb_ca_private *ca) { - if (ca->wakeup) { - ca->wakeup = 0; - return 1; - } + if (ca->wakeup) { + ca->wakeup = 0; + return 1; + } if (ca->exit) return 1; - - return 0; + + return 0; } @@ -942,50 +941,50 @@ static int dvb_ca_en50221_thread_should_wakeup(struct dvb_ca_private* ca) * * @param ca CA instance. */ -static void dvb_ca_en50221_thread_update_delay(struct dvb_ca_private* ca) +static void dvb_ca_en50221_thread_update_delay(struct dvb_ca_private *ca) { - int delay; - int curdelay = 100000000; - int slot; - - for(slot=0; slot < ca->slot_count; slot++) { - switch(ca->slot_info[slot].slot_state) { - default: - case DVB_CA_SLOTSTATE_NONE: - case DVB_CA_SLOTSTATE_INVALID: - delay = HZ*60; - if (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE)) { - delay = HZ/10; - } - break; - - case DVB_CA_SLOTSTATE_UNINITIALISED: - case DVB_CA_SLOTSTATE_WAITREADY: - case DVB_CA_SLOTSTATE_VALIDATE: - case DVB_CA_SLOTSTATE_WAITFR: - case DVB_CA_SLOTSTATE_LINKINIT: - delay = HZ/10; - break; - - case DVB_CA_SLOTSTATE_RUNNING: - delay = HZ*60; - if (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE)) { - delay = HZ/10; - } - if (ca->open) { - if ((!ca->slot_info[slot].da_irq_supported) || - (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_DA))) { - delay = HZ/100; - } - } - break; - } + int delay; + int curdelay = 100000000; + int slot; + + for (slot = 0; slot < ca->slot_count; slot++) { + switch (ca->slot_info[slot].slot_state) { + default: + case DVB_CA_SLOTSTATE_NONE: + case DVB_CA_SLOTSTATE_INVALID: + delay = HZ * 60; + if (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE)) { + delay = HZ / 10; + } + break; + + case DVB_CA_SLOTSTATE_UNINITIALISED: + case DVB_CA_SLOTSTATE_WAITREADY: + case DVB_CA_SLOTSTATE_VALIDATE: + case DVB_CA_SLOTSTATE_WAITFR: + case DVB_CA_SLOTSTATE_LINKINIT: + delay = HZ / 10; + break; + + case DVB_CA_SLOTSTATE_RUNNING: + delay = HZ * 60; + if (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE)) { + delay = HZ / 10; + } + if (ca->open) { + if ((!ca->slot_info[slot].da_irq_supported) || + (!(ca->flags & DVB_CA_EN50221_FLAG_IRQ_DA))) { + delay = HZ / 100; + } + } + break; + } if (delay < curdelay) curdelay = delay; - } + } - ca->delay = curdelay; + ca->delay = curdelay; } @@ -993,160 +992,159 @@ static void dvb_ca_en50221_thread_update_delay(struct dvb_ca_private* ca) /** * Kernel thread which monitors CA slots for CAM changes, and performs data transfers. */ -static int dvb_ca_en50221_thread(void* data) +static int dvb_ca_en50221_thread(void *data) { - struct dvb_ca_private *ca = (struct dvb_ca_private*) data; - char name[15]; - int slot; - int flags; + struct dvb_ca_private *ca = (struct dvb_ca_private *) data; + char name[15]; + int slot; + int flags; int status; - int pktcount; - void* rxbuf; + int pktcount; + void *rxbuf; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - /* setup kernel thread */ - snprintf(name, sizeof(name), "kdvb-ca-%i:%i", ca->dvbdev->adapter->num, ca->dvbdev->id); + /* setup kernel thread */ + snprintf(name, sizeof(name), "kdvb-ca-%i:%i", ca->dvbdev->adapter->num, ca->dvbdev->id); - lock_kernel (); - daemonize (name); - sigfillset (¤t->blocked); - unlock_kernel (); + lock_kernel(); + daemonize(name); + sigfillset(¤t->blocked); + unlock_kernel(); - /* choose the correct initial delay */ - dvb_ca_en50221_thread_update_delay(ca); + /* choose the correct initial delay */ + dvb_ca_en50221_thread_update_delay(ca); - /* main loop */ - while(!ca->exit) { - /* sleep for a bit */ - if (!ca->wakeup) { + /* main loop */ + while (!ca->exit) { + /* sleep for a bit */ + if (!ca->wakeup) { flags = wait_event_interruptible_timeout(ca->thread_queue, dvb_ca_en50221_thread_should_wakeup(ca), ca->delay); - if ((flags == -ERESTARTSYS) || ca->exit) { - /* got signal or quitting */ - break; - } - } - ca->wakeup = 0; - - /* go through all the slots processing them */ - for(slot=0; slot < ca->slot_count; slot++) { - - // check the cam status + deal with CAMCHANGEs - while(dvb_ca_en50221_check_camstatus(ca, slot)) { - /* clear down an old CI slot if necessary */ + if ((flags == -ERESTARTSYS) || ca->exit) { + /* got signal or quitting */ + break; + } + } + ca->wakeup = 0; + + /* go through all the slots processing them */ + for (slot = 0; slot < ca->slot_count; slot++) { + + // check the cam status + deal with CAMCHANGEs + while (dvb_ca_en50221_check_camstatus(ca, slot)) { + /* clear down an old CI slot if necessary */ if (ca->slot_info[slot].slot_state != DVB_CA_SLOTSTATE_NONE) dvb_ca_en50221_slot_shutdown(ca, slot); - /* if a CAM is NOW present, initialise it */ - if (ca->slot_info[slot].camchange_type == DVB_CA_EN50221_CAMCHANGE_INSERTED) { - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_UNINITIALISED; - } - - /* we've handled one CAMCHANGE */ - dvb_ca_en50221_thread_update_delay(ca); - atomic_dec(&ca->slot_info[slot].camchange_count); - } - - // CAM state machine - switch(ca->slot_info[slot].slot_state) { - case DVB_CA_SLOTSTATE_NONE: - case DVB_CA_SLOTSTATE_INVALID: - // no action needed - break; - - case DVB_CA_SLOTSTATE_UNINITIALISED: - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_WAITREADY; - ca->pub->slot_reset(ca->pub, slot); - ca->slot_info[slot].timeout = jiffies + (INIT_TIMEOUT_SECS * HZ); - break; - - case DVB_CA_SLOTSTATE_WAITREADY: - if (time_after(jiffies, ca->slot_info[slot].timeout)) { + /* if a CAM is NOW present, initialise it */ + if (ca->slot_info[slot].camchange_type == DVB_CA_EN50221_CAMCHANGE_INSERTED) { + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_UNINITIALISED; + } + + /* we've handled one CAMCHANGE */ + dvb_ca_en50221_thread_update_delay(ca); + atomic_dec(&ca->slot_info[slot].camchange_count); + } + + // CAM state machine + switch (ca->slot_info[slot].slot_state) { + case DVB_CA_SLOTSTATE_NONE: + case DVB_CA_SLOTSTATE_INVALID: + // no action needed + break; + + case DVB_CA_SLOTSTATE_UNINITIALISED: + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_WAITREADY; + ca->pub->slot_reset(ca->pub, slot); + ca->slot_info[slot].timeout = jiffies + (INIT_TIMEOUT_SECS * HZ); + break; + + case DVB_CA_SLOTSTATE_WAITREADY: + if (time_after(jiffies, ca->slot_info[slot].timeout)) { printk("dvb_ca adaptor %d: PC card did not respond :(\n", ca->dvbdev->adapter->num); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; - dvb_ca_en50221_thread_update_delay(ca); - break; - } - // no other action needed; will automatically change state when ready - break; - - case DVB_CA_SLOTSTATE_VALIDATE: + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; + dvb_ca_en50221_thread_update_delay(ca); + break; + } + // no other action needed; will automatically change state when ready + break; + + case DVB_CA_SLOTSTATE_VALIDATE: if (dvb_ca_en50221_parse_attributes(ca, slot) != 0) { printk("dvb_ca adapter %d: Invalid PC card inserted :(\n", ca->dvbdev->adapter->num); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; - dvb_ca_en50221_thread_update_delay(ca); - break; - } - if (dvb_ca_en50221_set_configoption(ca, slot) != 0) { + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; + dvb_ca_en50221_thread_update_delay(ca); + break; + } + if (dvb_ca_en50221_set_configoption(ca, slot) != 0) { printk("dvb_ca adapter %d: Unable to initialise CAM :(\n", ca->dvbdev->adapter->num); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; - dvb_ca_en50221_thread_update_delay(ca); - break; - } + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; + dvb_ca_en50221_thread_update_delay(ca); + break; + } if (ca->pub->write_cam_control(ca->pub, slot, CTRLIF_COMMAND, CMDREG_RS) != 0) { printk("dvb_ca adapter %d: Unable to reset CAM IF\n", ca->dvbdev->adapter->num); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; - dvb_ca_en50221_thread_update_delay(ca); - break; - } - - dprintk("DVB CAM validated successfully\n"); + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; + dvb_ca_en50221_thread_update_delay(ca); + break; + } + dprintk("DVB CAM validated successfully\n"); - ca->slot_info[slot].timeout = jiffies + (INIT_TIMEOUT_SECS * HZ); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_WAITFR; - ca->wakeup = 1; - break; + ca->slot_info[slot].timeout = jiffies + (INIT_TIMEOUT_SECS * HZ); + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_WAITFR; + ca->wakeup = 1; + break; - case DVB_CA_SLOTSTATE_WAITFR: - if (time_after(jiffies, ca->slot_info[slot].timeout)) { + case DVB_CA_SLOTSTATE_WAITFR: + if (time_after(jiffies, ca->slot_info[slot].timeout)) { printk("dvb_ca adapter %d: DVB CAM did not respond :(\n", ca->dvbdev->adapter->num); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; - dvb_ca_en50221_thread_update_delay(ca); - break; - } - - flags = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS); - if (flags & STATUSREG_FR) { - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT; - ca->wakeup = 1; - } - break; - - case DVB_CA_SLOTSTATE_LINKINIT: - if (dvb_ca_en50221_link_init(ca, slot) != 0) { - printk("dvb_ca adapter %d: DVB CAM link initialisation failed :(\n", ca->dvbdev->adapter->num); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; - dvb_ca_en50221_thread_update_delay(ca); - break; - } - - rxbuf = vmalloc(RX_BUFFER_SIZE); - if (rxbuf == NULL) { - printk("dvb_ca adapter %d: Unable to allocate CAM rx buffer :(\n", ca->dvbdev->adapter->num); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; - dvb_ca_en50221_thread_update_delay(ca); - break; - } + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; + dvb_ca_en50221_thread_update_delay(ca); + break; + } + + flags = ca->pub->read_cam_control(ca->pub, slot, CTRLIF_STATUS); + if (flags & STATUSREG_FR) { + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_LINKINIT; + ca->wakeup = 1; + } + break; + + case DVB_CA_SLOTSTATE_LINKINIT: + if (dvb_ca_en50221_link_init(ca, slot) != 0) { + printk("dvb_ca adapter %d: DVB CAM link initialisation failed :(\n", ca->dvbdev->adapter->num); + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; + dvb_ca_en50221_thread_update_delay(ca); + break; + } + + rxbuf = vmalloc(RX_BUFFER_SIZE); + if (rxbuf == NULL) { + printk("dvb_ca adapter %d: Unable to allocate CAM rx buffer :(\n", ca->dvbdev->adapter->num); + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_INVALID; + dvb_ca_en50221_thread_update_delay(ca); + break; + } down_write(&ca->slot_info[slot].sem); - dvb_ringbuffer_init(&ca->slot_info[slot].rx_buffer, rxbuf, RX_BUFFER_SIZE); + dvb_ringbuffer_init(&ca->slot_info[slot].rx_buffer, rxbuf, RX_BUFFER_SIZE); up_write(&ca->slot_info[slot].sem); - ca->pub->slot_ts_enable(ca->pub, slot); - ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_RUNNING; - dvb_ca_en50221_thread_update_delay(ca); - printk("dvb_ca adapter %d: DVB CAM detected and initialised successfully\n", ca->dvbdev->adapter->num); - break; + ca->pub->slot_ts_enable(ca->pub, slot); + ca->slot_info[slot].slot_state = DVB_CA_SLOTSTATE_RUNNING; + dvb_ca_en50221_thread_update_delay(ca); + printk("dvb_ca adapter %d: DVB CAM detected and initialised successfully\n", ca->dvbdev->adapter->num); + break; - case DVB_CA_SLOTSTATE_RUNNING: + case DVB_CA_SLOTSTATE_RUNNING: if (!ca->open) continue; @@ -1155,35 +1153,35 @@ static int dvb_ca_en50221_thread(void* data) break; // poll mode - pktcount = 0; + pktcount = 0; while ((status = dvb_ca_en50221_read_data(ca, slot, NULL, 0)) > 0) { if (!ca->open) break; - /* if a CAMCHANGE occurred at some point, do not do any more processing of this slot */ - if (dvb_ca_en50221_check_camstatus(ca, slot)) { - // we dont want to sleep on the next iteration so we can handle the cam change - ca->wakeup = 1; - break; - } - - /* check if we've hit our limit this time */ - if (++pktcount >= MAX_RX_PACKETS_PER_ITERATION) { - // dont sleep; there is likely to be more data to read - ca->wakeup = 1; - break; - } - } - break; - } - } - } - - /* completed */ - ca->thread_pid = 0; - mb(); - wake_up_interruptible (&ca->thread_queue); - return 0; + /* if a CAMCHANGE occurred at some point, do not do any more processing of this slot */ + if (dvb_ca_en50221_check_camstatus(ca, slot)) { + // we dont want to sleep on the next iteration so we can handle the cam change + ca->wakeup = 1; + break; + } + + /* check if we've hit our limit this time */ + if (++pktcount >= MAX_RX_PACKETS_PER_ITERATION) { + // dont sleep; there is likely to be more data to read + ca->wakeup = 1; + break; + } + } + break; + } + } + } + + /* completed */ + ca->thread_pid = 0; + mb(); + wake_up_interruptible(&ca->thread_queue); + return 0; } @@ -1205,62 +1203,62 @@ static int dvb_ca_en50221_thread(void* data) static int dvb_ca_en50221_io_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *parg) { - struct dvb_device* dvbdev=(struct dvb_device*) file->private_data; - struct dvb_ca_private* ca = (struct dvb_ca_private*) dvbdev->priv; - int err=0; - int slot; - - dprintk ("%s\n", __FUNCTION__); - - switch (cmd) { - case CA_RESET: - for(slot = 0; slot < ca->slot_count; slot++) { - if (ca->slot_info[slot].slot_state != DVB_CA_SLOTSTATE_NONE) { - dvb_ca_en50221_slot_shutdown(ca, slot); - if (ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE) + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + struct dvb_ca_private *ca = (struct dvb_ca_private *) dvbdev->priv; + int err = 0; + int slot; + + dprintk("%s\n", __FUNCTION__); + + switch (cmd) { + case CA_RESET: + for (slot = 0; slot < ca->slot_count; slot++) { + if (ca->slot_info[slot].slot_state != DVB_CA_SLOTSTATE_NONE) { + dvb_ca_en50221_slot_shutdown(ca, slot); + if (ca->flags & DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE) dvb_ca_en50221_camchange_irq(ca->pub, slot, DVB_CA_EN50221_CAMCHANGE_INSERTED); - } - } - ca->next_read_slot = 0; - dvb_ca_en50221_thread_wakeup(ca); - break; + } + } + ca->next_read_slot = 0; + dvb_ca_en50221_thread_wakeup(ca); + break; case CA_GET_CAP: { - struct ca_caps *caps = (struct ca_caps*) parg; + struct ca_caps *caps = (struct ca_caps *) parg; - caps->slot_num=ca->slot_count; - caps->slot_type=CA_CI_LINK; - caps->descr_num=0; - caps->descr_type=0; - break; - } + caps->slot_num = ca->slot_count; + caps->slot_type = CA_CI_LINK; + caps->descr_num = 0; + caps->descr_type = 0; + break; + } case CA_GET_SLOT_INFO: { - struct ca_slot_info *info=(struct ca_slot_info *)parg; + struct ca_slot_info *info = (struct ca_slot_info *) parg; - if ((info->num > ca->slot_count) || (info->num < 0)) - return -EINVAL; + if ((info->num > ca->slot_count) || (info->num < 0)) + return -EINVAL; - info->type = CA_CI_LINK; - info->flags = 0; + info->type = CA_CI_LINK; + info->flags = 0; if ((ca->slot_info[info->num].slot_state != DVB_CA_SLOTSTATE_NONE) && (ca->slot_info[info->num].slot_state != DVB_CA_SLOTSTATE_INVALID)) { - info->flags = CA_CI_MODULE_PRESENT; - } - if (ca->slot_info[info->num].slot_state == DVB_CA_SLOTSTATE_RUNNING) { - info->flags |= CA_CI_MODULE_READY; - } - break; - } - - default: - err=-EINVAL; - break; - } - - return err; + info->flags = CA_CI_MODULE_PRESENT; + } + if (ca->slot_info[info->num].slot_state == DVB_CA_SLOTSTATE_RUNNING) { + info->flags |= CA_CI_MODULE_READY; + } + break; + } + + default: + err = -EINVAL; + break; + } + + return err; } @@ -1277,7 +1275,7 @@ static int dvb_ca_en50221_io_do_ioctl(struct inode *inode, struct file *file, static int dvb_ca_en50221_io_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { - return dvb_usercopy(inode, file, cmd, arg, dvb_ca_en50221_io_do_ioctl); + return dvb_usercopy(inode, file, cmd, arg, dvb_ca_en50221_io_do_ioctl); } @@ -1294,127 +1292,127 @@ static int dvb_ca_en50221_io_ioctl(struct inode *inode, struct file *file, static ssize_t dvb_ca_en50221_io_write(struct file *file, const char __user * buf, size_t count, loff_t * ppos) { - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - struct dvb_ca_private *ca=(struct dvb_ca_private*) dvbdev->priv; - u8 slot, connection_id; - int status; - char fragbuf[HOST_LINK_BUF_SIZE]; - int fragpos = 0; - int fraglen; - unsigned long timeout; - int written; - - dprintk ("%s\n", __FUNCTION__); - - /* Incoming packet has a 2 byte header. hdr[0] = slot_id, hdr[1] = connection_id */ + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + struct dvb_ca_private *ca = (struct dvb_ca_private *) dvbdev->priv; + u8 slot, connection_id; + int status; + char fragbuf[HOST_LINK_BUF_SIZE]; + int fragpos = 0; + int fraglen; + unsigned long timeout; + int written; + + dprintk("%s\n", __FUNCTION__); + + /* Incoming packet has a 2 byte header. hdr[0] = slot_id, hdr[1] = connection_id */ if (count < 2) return -EINVAL; - /* extract slot & connection id */ + /* extract slot & connection id */ if (copy_from_user(&slot, buf, 1)) return -EFAULT; if (copy_from_user(&connection_id, buf + 1, 1)) return -EFAULT; - buf+=2; - count-=2; + buf += 2; + count -= 2; - /* check if the slot is actually running */ + /* check if the slot is actually running */ if (ca->slot_info[slot].slot_state != DVB_CA_SLOTSTATE_RUNNING) return -EINVAL; - /* fragment the packets & store in the buffer */ - while(fragpos < count) { - fraglen = ca->slot_info[slot].link_buf_size - 2; + /* fragment the packets & store in the buffer */ + while (fragpos < count) { + fraglen = ca->slot_info[slot].link_buf_size - 2; if ((count - fragpos) < fraglen) fraglen = count - fragpos; - fragbuf[0] = connection_id; - fragbuf[1] = ((fragpos + fraglen) < count) ? 0x80 : 0x00; + fragbuf[0] = connection_id; + fragbuf[1] = ((fragpos + fraglen) < count) ? 0x80 : 0x00; if ((status = copy_from_user(fragbuf + 2, buf + fragpos, fraglen)) != 0) goto exit; - timeout = jiffies + HZ/2; - written = 0; - while(!time_after(jiffies, timeout)) { + timeout = jiffies + HZ / 2; + written = 0; + while (!time_after(jiffies, timeout)) { /* check the CAM hasn't been removed/reset in the meantime */ if (ca->slot_info[slot].slot_state != DVB_CA_SLOTSTATE_RUNNING) { status = -EIO; goto exit; } - status = dvb_ca_en50221_write_data(ca, slot, fragbuf, fraglen+2); - if (status == (fraglen+2)) { - written = 1; - break; + status = dvb_ca_en50221_write_data(ca, slot, fragbuf, fraglen + 2); + if (status == (fraglen + 2)) { + written = 1; + break; } if (status != -EAGAIN) goto exit; - msleep(1); - } - if (!written) { - status = -EIO; - goto exit; + msleep(1); + } + if (!written) { + status = -EIO; + goto exit; } - fragpos += fraglen; - } - status = count + 2; + fragpos += fraglen; + } + status = count + 2; exit: - return status; + return status; } /** * Condition for waking up in dvb_ca_en50221_io_read_condition */ -static int dvb_ca_en50221_io_read_condition(struct dvb_ca_private* ca, int* result, int* _slot) +static int dvb_ca_en50221_io_read_condition(struct dvb_ca_private *ca, int *result, int *_slot) { - int slot; - int slot_count = 0; - int idx; - int fraglen; - int connection_id = -1; - int found = 0; - u8 hdr[2]; - - slot = ca->next_read_slot; - while((slot_count < ca->slot_count) && (!found)) { + int slot; + int slot_count = 0; + int idx; + int fraglen; + int connection_id = -1; + int found = 0; + u8 hdr[2]; + + slot = ca->next_read_slot; + while ((slot_count < ca->slot_count) && (!found)) { if (ca->slot_info[slot].slot_state != DVB_CA_SLOTSTATE_RUNNING) goto nextslot; - down_read(&ca->slot_info[slot].sem); + down_read(&ca->slot_info[slot].sem); if (ca->slot_info[slot].rx_buffer.data == NULL) { up_read(&ca->slot_info[slot].sem); return 0; } - idx = dvb_ringbuffer_pkt_next(&ca->slot_info[slot].rx_buffer, -1, &fraglen); - while(idx != -1) { - dvb_ringbuffer_pkt_read(&ca->slot_info[slot].rx_buffer, idx, 0, hdr, 2, 0); + idx = dvb_ringbuffer_pkt_next(&ca->slot_info[slot].rx_buffer, -1, &fraglen); + while (idx != -1) { + dvb_ringbuffer_pkt_read(&ca->slot_info[slot].rx_buffer, idx, 0, hdr, 2, 0); if (connection_id == -1) connection_id = hdr[0]; - if ((hdr[0] == connection_id) && ((hdr[1] & 0x80) == 0)) { - *_slot = slot; - found = 1; - break; - } + if ((hdr[0] == connection_id) && ((hdr[1] & 0x80) == 0)) { + *_slot = slot; + found = 1; + break; + } - idx = dvb_ringbuffer_pkt_next(&ca->slot_info[slot].rx_buffer, idx, &fraglen); - } + idx = dvb_ringbuffer_pkt_next(&ca->slot_info[slot].rx_buffer, idx, &fraglen); + } if (!found) up_read(&ca->slot_info[slot].sem); -nextslot: - slot = (slot + 1) % ca->slot_count; - slot_count++; - } + nextslot: + slot = (slot + 1) % ca->slot_count; + slot_count++; + } - ca->next_read_slot = slot; - return found; + ca->next_read_slot = slot; + return found; } @@ -1431,91 +1429,91 @@ nextslot: static ssize_t dvb_ca_en50221_io_read(struct file *file, char __user * buf, size_t count, loff_t * ppos) { - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - struct dvb_ca_private *ca=(struct dvb_ca_private*) dvbdev->priv; - int status; - int result = 0; - u8 hdr[2]; - int slot; - int connection_id = -1; - size_t idx, idx2; - int last_fragment = 0; - size_t fraglen; - int pktlen; - int dispose = 0; - - dprintk ("%s\n", __FUNCTION__); - - /* Outgoing packet has a 2 byte header. hdr[0] = slot_id, hdr[1] = connection_id */ + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + struct dvb_ca_private *ca = (struct dvb_ca_private *) dvbdev->priv; + int status; + int result = 0; + u8 hdr[2]; + int slot; + int connection_id = -1; + size_t idx, idx2; + int last_fragment = 0; + size_t fraglen; + int pktlen; + int dispose = 0; + + dprintk("%s\n", __FUNCTION__); + + /* Outgoing packet has a 2 byte header. hdr[0] = slot_id, hdr[1] = connection_id */ if (count < 2) return -EINVAL; - /* wait for some data */ - if ((status = dvb_ca_en50221_io_read_condition(ca, &result, &slot)) == 0) { + /* wait for some data */ + if ((status = dvb_ca_en50221_io_read_condition(ca, &result, &slot)) == 0) { - /* if we're in nonblocking mode, exit immediately */ + /* if we're in nonblocking mode, exit immediately */ if (file->f_flags & O_NONBLOCK) return -EWOULDBLOCK; - /* wait for some data */ + /* wait for some data */ status = wait_event_interruptible(ca->wait_queue, dvb_ca_en50221_io_read_condition (ca, &result, &slot)); - } - if ((status < 0) || (result < 0)) { + } + if ((status < 0) || (result < 0)) { if (result) return result; - return status; - } - - idx = dvb_ringbuffer_pkt_next(&ca->slot_info[slot].rx_buffer, -1, &fraglen); - pktlen = 2; - do { - if (idx == -1) { - printk("dvb_ca adapter %d: BUG: read packet ended before last_fragment encountered\n", ca->dvbdev->adapter->num); - status = -EIO; - goto exit; - } - - dvb_ringbuffer_pkt_read(&ca->slot_info[slot].rx_buffer, idx, 0, hdr, 2, 0); + return status; + } + + idx = dvb_ringbuffer_pkt_next(&ca->slot_info[slot].rx_buffer, -1, &fraglen); + pktlen = 2; + do { + if (idx == -1) { + printk("dvb_ca adapter %d: BUG: read packet ended before last_fragment encountered\n", ca->dvbdev->adapter->num); + status = -EIO; + goto exit; + } + + dvb_ringbuffer_pkt_read(&ca->slot_info[slot].rx_buffer, idx, 0, hdr, 2, 0); if (connection_id == -1) connection_id = hdr[0]; - if (hdr[0] == connection_id) { - if (pktlen < count) { - if ((pktlen + fraglen - 2) > count) { - fraglen = count - pktlen; - } else { - fraglen -= 2; - } + if (hdr[0] == connection_id) { + if (pktlen < count) { + if ((pktlen + fraglen - 2) > count) { + fraglen = count - pktlen; + } else { + fraglen -= 2; + } if ((status = dvb_ringbuffer_pkt_read(&ca->slot_info[slot].rx_buffer, idx, 2, buf + pktlen, fraglen, 1)) < 0) { - goto exit; - } - pktlen += fraglen; - } + goto exit; + } + pktlen += fraglen; + } if ((hdr[1] & 0x80) == 0) last_fragment = 1; - dispose = 1; - } + dispose = 1; + } - idx2 = dvb_ringbuffer_pkt_next(&ca->slot_info[slot].rx_buffer, idx, &fraglen); + idx2 = dvb_ringbuffer_pkt_next(&ca->slot_info[slot].rx_buffer, idx, &fraglen); if (dispose) dvb_ringbuffer_pkt_dispose(&ca->slot_info[slot].rx_buffer, idx); - idx = idx2; - dispose = 0; - } while (!last_fragment); + idx = idx2; + dispose = 0; + } while (!last_fragment); - hdr[0] = slot; - hdr[1] = connection_id; + hdr[0] = slot; + hdr[1] = connection_id; if ((status = copy_to_user(buf, hdr, 2)) != 0) goto exit; - status = pktlen; + status = pktlen; -exit: - up_read(&ca->slot_info[slot].sem); - return status; + exit: + up_read(&ca->slot_info[slot].sem); + return status; } @@ -1529,36 +1527,36 @@ exit: */ static int dvb_ca_en50221_io_open(struct inode *inode, struct file *file) { - struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; - struct dvb_ca_private *ca = (struct dvb_ca_private*) dvbdev->priv; - int err; - int i; + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + struct dvb_ca_private *ca = (struct dvb_ca_private *) dvbdev->priv; + int err; + int i; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); if (!try_module_get(ca->pub->owner)) return -EIO; - err=dvb_generic_open(inode, file); - if (err<0) - return err; + err = dvb_generic_open(inode, file); + if (err < 0) + return err; - for(i=0; i< ca->slot_count; i++) { + for (i = 0; i < ca->slot_count; i++) { - if (ca->slot_info[i].slot_state == DVB_CA_SLOTSTATE_RUNNING) { - down_write(&ca->slot_info[i].sem); + if (ca->slot_info[i].slot_state == DVB_CA_SLOTSTATE_RUNNING) { + down_write(&ca->slot_info[i].sem); if (ca->slot_info[i].rx_buffer.data != NULL) { - dvb_ringbuffer_flush(&ca->slot_info[i].rx_buffer); + dvb_ringbuffer_flush(&ca->slot_info[i].rx_buffer); } - up_write(&ca->slot_info[i].sem); - } - } + up_write(&ca->slot_info[i].sem); + } + } - ca->open = 1; - dvb_ca_en50221_thread_update_delay(ca); - dvb_ca_en50221_thread_wakeup(ca); + ca->open = 1; + dvb_ca_en50221_thread_update_delay(ca); + dvb_ca_en50221_thread_wakeup(ca); - return 0; + return 0; } @@ -1572,21 +1570,21 @@ static int dvb_ca_en50221_io_open(struct inode *inode, struct file *file) */ static int dvb_ca_en50221_io_release(struct inode *inode, struct file *file) { - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - struct dvb_ca_private *ca=(struct dvb_ca_private*) dvbdev->priv; + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + struct dvb_ca_private *ca = (struct dvb_ca_private *) dvbdev->priv; int err = 0; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - /* mark the CA device as closed */ - ca->open = 0; - dvb_ca_en50221_thread_update_delay(ca); + /* mark the CA device as closed */ + ca->open = 0; + dvb_ca_en50221_thread_update_delay(ca); - err=dvb_generic_release(inode, file); + err = dvb_generic_release(inode, file); module_put(ca->pub->owner); - return 0; + return 0; } @@ -1598,56 +1596,57 @@ static int dvb_ca_en50221_io_release(struct inode *inode, struct file *file) * * @return Standard poll mask. */ -static unsigned int dvb_ca_en50221_io_poll(struct file *file, poll_table *wait) +static unsigned int dvb_ca_en50221_io_poll(struct file *file, poll_table * wait) { - struct dvb_device* dvbdev = (struct dvb_device*) file->private_data; - struct dvb_ca_private* ca = (struct dvb_ca_private*) dvbdev->priv; - unsigned int mask=0; - int slot; - int result = 0; + struct dvb_device *dvbdev = (struct dvb_device *) file->private_data; + struct dvb_ca_private *ca = (struct dvb_ca_private *) dvbdev->priv; + unsigned int mask = 0; + int slot; + int result = 0; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - if (dvb_ca_en50221_io_read_condition(ca, &result, &slot) == 1) { - up_read(&ca->slot_info[slot].sem); - mask |= POLLIN; - } + if (dvb_ca_en50221_io_read_condition(ca, &result, &slot) == 1) { + up_read(&ca->slot_info[slot].sem); + mask |= POLLIN; + } - /* if there is something, return now */ + /* if there is something, return now */ if (mask) return mask; - /* wait for something to happen */ - poll_wait(file, &ca->wait_queue, wait); + /* wait for something to happen */ + poll_wait(file, &ca->wait_queue, wait); - if (dvb_ca_en50221_io_read_condition(ca, &result, &slot) == 1) { - up_read(&ca->slot_info[slot].sem); - mask |= POLLIN; - } + if (dvb_ca_en50221_io_read_condition(ca, &result, &slot) == 1) { + up_read(&ca->slot_info[slot].sem); + mask |= POLLIN; + } - return mask; + return mask; } EXPORT_SYMBOL(dvb_ca_en50221_init); static struct file_operations dvb_ca_fops = { - .owner = THIS_MODULE, - .read = dvb_ca_en50221_io_read, - .write = dvb_ca_en50221_io_write, - .ioctl = dvb_ca_en50221_io_ioctl, - .open = dvb_ca_en50221_io_open, - .release= dvb_ca_en50221_io_release, - .poll = dvb_ca_en50221_io_poll, + .owner = THIS_MODULE, + .read = dvb_ca_en50221_io_read, + .write = dvb_ca_en50221_io_write, + .ioctl = dvb_ca_en50221_io_ioctl, + .open = dvb_ca_en50221_io_open, + .release = dvb_ca_en50221_io_release, + .poll = dvb_ca_en50221_io_poll, }; static struct dvb_device dvbdev_ca = { - .priv = NULL, - .users = 1, - .readers= 1, - .writers= 1, - .fops = &dvb_ca_fops, + .priv = NULL, + .users = 1, + .readers = 1, + .writers = 1, + .fops = &dvb_ca_fops, }; + /* ******************************************************************************** */ /* Initialisation/shutdown functions */ @@ -1665,79 +1664,81 @@ static struct dvb_device dvbdev_ca = { int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter, struct dvb_ca_en50221 *pubca, int flags, int slot_count) { - int ret; - struct dvb_ca_private* ca = NULL; - int i; + int ret; + struct dvb_ca_private *ca = NULL; + int i; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); if (slot_count < 1) return -EINVAL; - /* initialise the system data */ + /* initialise the system data */ if ((ca = (struct dvb_ca_private *) kmalloc(sizeof(struct dvb_ca_private), GFP_KERNEL)) == NULL) { - ret = -ENOMEM; - goto error; - } - memset(ca, 0, sizeof(struct dvb_ca_private)); - ca->pub = pubca; - ca->flags = flags; - ca->slot_count = slot_count; - if ((ca->slot_info = kmalloc(sizeof(struct dvb_ca_slot) * slot_count, GFP_KERNEL)) == NULL) { - ret = -ENOMEM; - goto error; - } - memset(ca->slot_info, 0, sizeof(struct dvb_ca_slot) * slot_count); - init_waitqueue_head(&ca->wait_queue); - ca->thread_pid = 0; - init_waitqueue_head(&ca->thread_queue); - ca->exit = 0; - ca->open = 0; - ca->wakeup = 0; - ca->next_read_slot = 0; - pubca->private = ca; - - /* register the DVB device */ - ret = dvb_register_device(dvb_adapter, &ca->dvbdev, &dvbdev_ca, ca, DVB_DEVICE_CA); + ret = -ENOMEM; + goto error; + } + memset(ca, 0, sizeof(struct dvb_ca_private)); + ca->pub = pubca; + ca->flags = flags; + ca->slot_count = slot_count; + if ((ca->slot_info = kmalloc(sizeof(struct dvb_ca_slot) * slot_count, GFP_KERNEL)) == NULL) { + ret = -ENOMEM; + goto error; + } + memset(ca->slot_info, 0, sizeof(struct dvb_ca_slot) * slot_count); + init_waitqueue_head(&ca->wait_queue); + ca->thread_pid = 0; + init_waitqueue_head(&ca->thread_queue); + ca->exit = 0; + ca->open = 0; + ca->wakeup = 0; + ca->next_read_slot = 0; + pubca->private = ca; + + /* register the DVB device */ + ret = dvb_register_device(dvb_adapter, &ca->dvbdev, &dvbdev_ca, ca, DVB_DEVICE_CA); if (ret) goto error; - /* now initialise each slot */ - for(i=0; i< slot_count; i++) { - memset(&ca->slot_info[i], 0, sizeof(struct dvb_ca_slot)); - ca->slot_info[i].slot_state = DVB_CA_SLOTSTATE_NONE; - atomic_set(&ca->slot_info[i].camchange_count, 0); - ca->slot_info[i].camchange_type = DVB_CA_EN50221_CAMCHANGE_REMOVED; - init_rwsem(&ca->slot_info[i].sem); - } - - if (signal_pending(current)) { - ret = -EINTR; - goto error; - } - mb(); - - /* create a kthread for monitoring this CA device */ - ret = kernel_thread (dvb_ca_en50221_thread, ca, 0); - if (ret < 0) { - printk("dvb_ca_init: failed to start kernel_thread (%d)\n", ret); - goto error; - } - ca->thread_pid = ret; - return 0; - -error: - if (ca != NULL) { + /* now initialise each slot */ + for (i = 0; i < slot_count; i++) { + memset(&ca->slot_info[i], 0, sizeof(struct dvb_ca_slot)); + ca->slot_info[i].slot_state = DVB_CA_SLOTSTATE_NONE; + atomic_set(&ca->slot_info[i].camchange_count, 0); + ca->slot_info[i].camchange_type = DVB_CA_EN50221_CAMCHANGE_REMOVED; + init_rwsem(&ca->slot_info[i].sem); + } + + if (signal_pending(current)) { + ret = -EINTR; + goto error; + } + mb(); + + /* create a kthread for monitoring this CA device */ + + ret = kernel_thread(dvb_ca_en50221_thread, ca, 0); + + if (ret < 0) { + printk("dvb_ca_init: failed to start kernel_thread (%d)\n", ret); + goto error; + } + ca->thread_pid = ret; + return 0; + + error: + if (ca != NULL) { if (ca->dvbdev != NULL) dvb_unregister_device(ca->dvbdev); if (ca->slot_info != NULL) kfree(ca->slot_info); - kfree(ca); - } - pubca->private = NULL; - return ret; + kfree(ca); + } + pubca->private = NULL; + return ret; } EXPORT_SYMBOL(dvb_ca_en50221_release); @@ -1749,32 +1750,31 @@ EXPORT_SYMBOL(dvb_ca_en50221_release); * @param ca_dev The dvb_device_t instance for the CA device. * @param ca The associated dvb_ca instance. */ -void dvb_ca_en50221_release(struct dvb_ca_en50221* pubca) +void dvb_ca_en50221_release(struct dvb_ca_en50221 *pubca) { - struct dvb_ca_private* ca = (struct dvb_ca_private*) pubca->private; - int i; + struct dvb_ca_private *ca = (struct dvb_ca_private *) pubca->private; + int i; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); - /* shutdown the thread if there was one */ - if (ca->thread_pid) { - if (kill_proc(ca->thread_pid, 0, 1) == -ESRCH) { + /* shutdown the thread if there was one */ + if (ca->thread_pid) { + if (kill_proc(ca->thread_pid, 0, 1) == -ESRCH) { printk("dvb_ca_release adapter %d: thread PID %d already died\n", ca->dvbdev->adapter->num, ca->thread_pid); - } else { - ca->exit = 1; - mb(); - dvb_ca_en50221_thread_wakeup(ca); - wait_event_interruptible(ca->thread_queue, ca->thread_pid == 0); - } - } - - for(i=0; i< ca->slot_count; i++) { - dvb_ca_en50221_slot_shutdown(ca, i); - } - kfree(ca->slot_info); - dvb_unregister_device(ca->dvbdev); - kfree(ca); - pubca->private = NULL; + } else { + ca->exit = 1; + mb(); + dvb_ca_en50221_thread_wakeup(ca); + wait_event_interruptible(ca->thread_queue, ca->thread_pid == 0); + } + } + + for (i = 0; i < ca->slot_count; i++) { + dvb_ca_en50221_slot_shutdown(ca, i); + } + kfree(ca->slot_info); + dvb_unregister_device(ca->dvbdev); + kfree(ca); + pubca->private = NULL; } - diff --git a/drivers/media/dvb/dvb-core/dvb_demux.c b/drivers/media/dvb/dvb-core/dvb_demux.c index 7901398d6e3f..98f4573d2c48 100644 --- a/drivers/media/dvb/dvb-core/dvb_demux.c +++ b/drivers/media/dvb/dvb-core/dvb_demux.c @@ -1,4 +1,4 @@ -/* +/* * dvb_demux.c - DVB kernel demux API * * Copyright (C) 2000-2001 Ralph Metzler <ralph@convergence.de> @@ -27,13 +27,13 @@ #include <linux/module.h> #include <linux/poll.h> #include <linux/string.h> - #include <linux/crc32.h> +#include <linux/crc32.h> #include <asm/uaccess.h> #include "dvb_demux.h" -#define NOBUFS -/* +#define NOBUFS +/* ** #define DVB_DEMUX_SECTION_LOSS_LOG to monitor payload loss in the syslog */ // #define DVB_DEMUX_SECTION_LOSS_LOG @@ -93,10 +93,10 @@ static inline u16 ts_pid(const u8 *buf) static inline u8 payload(const u8 *tsp) { - if (!(tsp[3]&0x10)) // no payload? + if (!(tsp[3] & 0x10)) // no payload? return 0; - if (tsp[3]&0x20) { // adaptation field? - if (tsp[4]>183) // corrupted data? + if (tsp[3] & 0x20) { // adaptation field? + if (tsp[4] > 183) // corrupted data? return 0; else return 184-1-tsp[4]; @@ -134,7 +134,7 @@ static void dvb_dmx_memcopy (struct dvb_demux_feed *f, u8 *d, const u8 *s, size_ * Software filter functions ******************************************************************************/ -static inline int dvb_dmx_swfilter_payload (struct dvb_demux_feed *feed, const u8 *buf) +static inline int dvb_dmx_swfilter_payload (struct dvb_demux_feed *feed, const u8 *buf) { int count = payload(buf); int p; @@ -159,11 +159,11 @@ static inline int dvb_dmx_swfilter_payload (struct dvb_demux_feed *feed, const u feed->peslen += count; - return feed->cb.ts (&buf[p], count, NULL, 0, &feed->feed.ts, DMX_OK); + return feed->cb.ts (&buf[p], count, NULL, 0, &feed->feed.ts, DMX_OK); } -static int dvb_dmx_swfilter_sectionfilter (struct dvb_demux_feed *feed, +static int dvb_dmx_swfilter_sectionfilter (struct dvb_demux_feed *feed, struct dvb_demux_filter *f) { u8 neq = 0; @@ -181,8 +181,8 @@ static int dvb_dmx_swfilter_sectionfilter (struct dvb_demux_feed *feed, if (f->doneq && !neq) return 0; - return feed->cb.sec (feed->feed.sec.secbuf, feed->feed.sec.seclen, - NULL, 0, &f->filter, DMX_OK); + return feed->cb.sec (feed->feed.sec.secbuf, feed->feed.sec.seclen, + NULL, 0, &f->filter, DMX_OK); } @@ -203,7 +203,7 @@ static inline int dvb_dmx_swfilter_section_feed (struct dvb_demux_feed *feed) section_syntax_indicator = ((sec->secbuf[1] & 0x80) != 0); if (section_syntax_indicator && demux->check_crc32(feed, sec->secbuf, sec->seclen)) - return -1; + return -1; } do { @@ -232,27 +232,27 @@ static void dvb_dmx_swfilter_section_new(struct dvb_demux_feed *feed) */ if(sec->secbuf[0] != 0xff || sec->secbuf[n-1] != 0xff) { - printk("dvb_demux.c section ts padding loss: %d/%d\n", + printk("dvb_demux.c section ts padding loss: %d/%d\n", n, sec->tsfeedp); printk("dvb_demux.c pad data:"); for(i = 0; i < n; i++) printk(" %02x", sec->secbuf[i]); printk("\n"); - } - } + } + } #endif sec->tsfeedp = sec->secbufp = sec->seclen = 0; sec->secbuf = sec->secbuf_base; - } +} -/* +/* ** Losless Section Demux 1.4.1 by Emard ** Valsecchi Patrick: ** - middle of section A (no PUSI) -** - end of section A and start of section B +** - end of section A and start of section B ** (with PUSI pointing to the start of the second section) -** +** ** In this case, without feed->pusi_seen you'll receive a garbage section ** consisting of the end of section A. Basically because tsfeedp ** is incemented and the use=0 condition is not raised @@ -276,7 +276,7 @@ static int dvb_dmx_swfilter_section_copy_dump(struct dvb_demux_feed *feed, const if(sec->tsfeedp + len > DMX_MAX_SECFEED_SIZE) { #ifdef DVB_DEMUX_SECTION_LOSS_LOG - printk("dvb_demux.c section buffer full loss: %d/%d\n", + printk("dvb_demux.c section buffer full loss: %d/%d\n", sec->tsfeedp + len - DMX_MAX_SECFEED_SIZE, DMX_MAX_SECFEED_SIZE); #endif len = DMX_MAX_SECFEED_SIZE - sec->tsfeedp; @@ -302,38 +302,38 @@ static int dvb_dmx_swfilter_section_copy_dump(struct dvb_demux_feed *feed, const for(n = 0; sec->secbufp + 2 < limit; n++) { seclen = section_length(sec->secbuf); - if(seclen <= 0 || seclen > DMX_MAX_SECFEED_SIZE + if(seclen <= 0 || seclen > DMX_MAX_SECFEED_SIZE || seclen + sec->secbufp > limit) return 0; sec->seclen = seclen; sec->crc_val = ~0; /* dump [secbuf .. secbuf+seclen) */ if(feed->pusi_seen) - dvb_dmx_swfilter_section_feed(feed); + dvb_dmx_swfilter_section_feed(feed); #ifdef DVB_DEMUX_SECTION_LOSS_LOG else printk("dvb_demux.c pusi not seen, discarding section data\n"); #endif sec->secbufp += seclen; /* secbufp and secbuf moving together is */ sec->secbuf += seclen; /* redundand but saves pointer arithmetic */ - } - - return 0; } + return 0; +} + -static int dvb_dmx_swfilter_section_packet(struct dvb_demux_feed *feed, const u8 *buf) +static int dvb_dmx_swfilter_section_packet(struct dvb_demux_feed *feed, const u8 *buf) { u8 p, count; int ccok, dc_i = 0; u8 cc; count = payload(buf); - + if (count == 0) /* count == 0 if no payload or out of range */ - return -1; + return -1; - p = 188-count; /* payload start */ + p = 188 - count; /* payload start */ cc = buf[3] & 0x0f; ccok = ((feed->cc + 1) & 0x0f) == cc; @@ -376,7 +376,7 @@ static int dvb_dmx_swfilter_section_packet(struct dvb_demux_feed *feed, const u8 } #ifdef DVB_DEMUX_SECTION_LOSS_LOG else - if(count > 0) + if (count > 0) printk("dvb_demux.c PUSI=1 but %d bytes lost\n", count); #endif } else { @@ -400,9 +400,9 @@ static inline void dvb_dmx_swfilter_packet_type(struct dvb_demux_feed *feed, con if (feed->ts_type & TS_PAYLOAD_ONLY) dvb_dmx_swfilter_payload(feed, buf); else - feed->cb.ts(buf, 188, NULL, 0, &feed->feed.ts, DMX_OK); + feed->cb.ts(buf, 188, NULL, 0, &feed->feed.ts, DMX_OK); } - if (feed->ts_type & TS_DECODER) + if (feed->ts_type & TS_DECODER) if (feed->demux->write_to_decoder) feed->demux->write_to_decoder(feed, buf, 188); break; @@ -443,7 +443,7 @@ void dvb_dmx_swfilter_packet(struct dvb_demux *demux, const u8 *buf) continue; if (feed->pid == pid) { - dvb_dmx_swfilter_packet_type (feed, buf); + dvb_dmx_swfilter_packet_type(feed, buf); if (DVR_FEED(feed)) continue; } @@ -459,8 +459,8 @@ void dvb_dmx_swfilter_packets(struct dvb_demux *demux, const u8 *buf, size_t cou spin_lock(&demux->lock); while (count--) { - if(buf[0] == 0x47) { - dvb_dmx_swfilter_packet(demux, buf); + if(buf[0] == 0x47) { + dvb_dmx_swfilter_packet(demux, buf); } buf += 188; } @@ -472,8 +472,8 @@ EXPORT_SYMBOL(dvb_dmx_swfilter_packets); void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) { - int p = 0,i, j; - + int p = 0, i, j; + spin_lock(&demux->lock); if ((i = demux->tsbufp)) { @@ -484,7 +484,7 @@ void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) } memcpy(&demux->tsbuf[i], buf, j); if (demux->tsbuf[0] == 0x47) - dvb_dmx_swfilter_packet(demux, demux->tsbuf); + dvb_dmx_swfilter_packet(demux, demux->tsbuf); demux->tsbufp = 0; p += j; } @@ -500,7 +500,7 @@ void dvb_dmx_swfilter(struct dvb_demux *demux, const u8 *buf, size_t count) demux->tsbufp=i; goto bailout; } - } else + } else p++; } @@ -544,7 +544,7 @@ void dvb_dmx_swfilter_204(struct dvb_demux *demux, const u8 *buf, size_t count) demux->tsbufp=i; goto bailout; } - } else { + } else { p++; } } @@ -595,8 +595,8 @@ static int dvb_demux_feed_find(struct dvb_demux_feed *feed) if (entry == feed) return 1; - return 0; - } + return 0; +} static void dvb_demux_feed_add(struct dvb_demux_feed *feed) { @@ -619,16 +619,16 @@ static void dvb_demux_feed_del(struct dvb_demux_feed *feed) printk(KERN_ERR "%s: feed not in list (type=%x state=%x pid=%x)\n", __FUNCTION__, feed->type, feed->state, feed->pid); goto out; -} + } list_del(&feed->list_head); out: spin_unlock_irq(&feed->demux->lock); } -static int dmx_ts_feed_set (struct dmx_ts_feed* ts_feed, u16 pid, int ts_type, - enum dmx_ts_pes pes_type, size_t callback_length, - size_t circular_buffer_size, int descramble, +static int dmx_ts_feed_set (struct dmx_ts_feed* ts_feed, u16 pid, int ts_type, + enum dmx_ts_pes pes_type, size_t callback_length, + size_t circular_buffer_size, int descramble, struct timespec timeout) { struct dvb_demux_feed *feed = (struct dvb_demux_feed *) ts_feed; @@ -636,7 +636,7 @@ static int dmx_ts_feed_set (struct dmx_ts_feed* ts_feed, u16 pid, int ts_type, if (pid > DMX_MAX_PID) return -EINVAL; - + if (down_interruptible (&demux->mutex)) return -ERESTARTSYS; @@ -646,7 +646,7 @@ static int dmx_ts_feed_set (struct dmx_ts_feed* ts_feed, u16 pid, int ts_type, return -EINVAL; } - if (demux->pesfilter[pes_type] && + if (demux->pesfilter[pes_type] && demux->pesfilter[pes_type] != feed) { up(&demux->mutex); return -EINVAL; @@ -682,7 +682,7 @@ static int dmx_ts_feed_set (struct dmx_ts_feed* ts_feed, u16 pid, int ts_type, } #endif } - + feed->state = DMX_STATE_READY; up(&demux->mutex); @@ -722,7 +722,7 @@ static int dmx_ts_feed_start_filtering(struct dmx_ts_feed* ts_feed) return 0; } - + static int dmx_ts_feed_stop_filtering(struct dmx_ts_feed* ts_feed) { struct dvb_demux_feed *feed = (struct dvb_demux_feed *) ts_feed; @@ -732,7 +732,7 @@ static int dmx_ts_feed_stop_filtering(struct dmx_ts_feed* ts_feed) if (down_interruptible (&demux->mutex)) return -ERESTARTSYS; - if (feed->state<DMX_STATE_GO) { + if (feed->state < DMX_STATE_GO) { up(&demux->mutex); return -EINVAL; } @@ -742,7 +742,7 @@ static int dmx_ts_feed_stop_filtering(struct dmx_ts_feed* ts_feed) return -ENODEV; } - ret = demux->stop_feed(feed); + ret = demux->stop_feed(feed); spin_lock_irq(&demux->lock); ts_feed->is_filtering = 0; @@ -753,7 +753,7 @@ static int dmx_ts_feed_stop_filtering(struct dmx_ts_feed* ts_feed) return ret; } -static int dvbdmx_allocate_ts_feed (struct dmx_demux *dmx, struct dmx_ts_feed **ts_feed, +static int dvbdmx_allocate_ts_feed (struct dmx_demux *dmx, struct dmx_ts_feed **ts_feed, dmx_ts_cb callback) { struct dvb_demux *demux = (struct dvb_demux *) dmx; @@ -792,7 +792,7 @@ static int dvbdmx_allocate_ts_feed (struct dmx_demux *dmx, struct dmx_ts_feed ** feed->filter->type = DMX_TYPE_TS; feed->filter->feed = feed; feed->filter->state = DMX_STATE_READY; - + up(&demux->mutex); return 0; @@ -812,8 +812,8 @@ static int dvbdmx_release_ts_feed(struct dmx_demux *dmx, struct dmx_ts_feed *ts_ } #ifndef NOBUFS - vfree(feed->buffer); - feed->buffer=0; + vfree(feed->buffer); + feed->buffer=0; #endif feed->state = DMX_STATE_FREE; @@ -821,8 +821,8 @@ static int dvbdmx_release_ts_feed(struct dmx_demux *dmx, struct dmx_ts_feed *ts_ dvb_demux_feed_del(feed); - feed->pid = 0xffff; - + feed->pid = 0xffff; + if (feed->ts_type & TS_DECODER && feed->pes_type < DMX_TS_PES_OTHER) demux->pesfilter[feed->pes_type] = NULL; @@ -835,64 +835,65 @@ static int dvbdmx_release_ts_feed(struct dmx_demux *dmx, struct dmx_ts_feed *ts_ * dmx_section_feed API calls ******************************************************************************/ -static int dmx_section_feed_allocate_filter(struct dmx_section_feed* feed, - struct dmx_section_filter** filter) +static int dmx_section_feed_allocate_filter(struct dmx_section_feed* feed, + struct dmx_section_filter** filter) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdemux=dvbdmxfeed->demux; + struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdemux = dvbdmxfeed->demux; struct dvb_demux_filter *dvbdmxfilter; if (down_interruptible (&dvbdemux->mutex)) return -ERESTARTSYS; - dvbdmxfilter=dvb_dmx_filter_alloc(dvbdemux); + dvbdmxfilter = dvb_dmx_filter_alloc(dvbdemux); if (!dvbdmxfilter) { up(&dvbdemux->mutex); return -EBUSY; } spin_lock_irq(&dvbdemux->lock); - *filter=&dvbdmxfilter->filter; - (*filter)->parent=feed; - (*filter)->priv=NULL; - dvbdmxfilter->feed=dvbdmxfeed; - dvbdmxfilter->type=DMX_TYPE_SEC; - dvbdmxfilter->state=DMX_STATE_READY; - - dvbdmxfilter->next=dvbdmxfeed->filter; - dvbdmxfeed->filter=dvbdmxfilter; + *filter = &dvbdmxfilter->filter; + (*filter)->parent = feed; + (*filter)->priv = NULL; + dvbdmxfilter->feed = dvbdmxfeed; + dvbdmxfilter->type = DMX_TYPE_SEC; + dvbdmxfilter->state = DMX_STATE_READY; + dvbdmxfilter->next = dvbdmxfeed->filter; + dvbdmxfeed->filter = dvbdmxfilter; spin_unlock_irq(&dvbdemux->lock); + up(&dvbdemux->mutex); return 0; } -static int dmx_section_feed_set(struct dmx_section_feed* feed, - u16 pid, size_t circular_buffer_size, - int descramble, int check_crc) +static int dmx_section_feed_set(struct dmx_section_feed* feed, + u16 pid, size_t circular_buffer_size, + int descramble, int check_crc) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx = dvbdmxfeed->demux; - if (pid>0x1fff) + if (pid > 0x1fff) return -EINVAL; if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - + dvb_demux_feed_add(dvbdmxfeed); dvbdmxfeed->pid = pid; - dvbdmxfeed->buffer_size=circular_buffer_size; - dvbdmxfeed->descramble=descramble; + dvbdmxfeed->buffer_size = circular_buffer_size; + dvbdmxfeed->descramble = descramble; if (dvbdmxfeed->descramble) { up(&dvbdmx->mutex); return -ENOSYS; } - dvbdmxfeed->feed.sec.check_crc=check_crc; + dvbdmxfeed->feed.sec.check_crc = check_crc; + #ifdef NOBUFS - dvbdmxfeed->buffer=NULL; + dvbdmxfeed->buffer = NULL; #else dvbdmxfeed->buffer=vmalloc(dvbdmxfeed->buffer_size); if (!dvbdmxfeed->buffer) { @@ -900,47 +901,50 @@ static int dmx_section_feed_set(struct dmx_section_feed* feed, return -ENOMEM; } #endif - dvbdmxfeed->state=DMX_STATE_READY; + + dvbdmxfeed->state = DMX_STATE_READY; up(&dvbdmx->mutex); return 0; } + static void prepare_secfilters(struct dvb_demux_feed *dvbdmxfeed) { int i; struct dvb_demux_filter *f; struct dmx_section_filter *sf; u8 mask, mode, doneq; - + if (!(f=dvbdmxfeed->filter)) return; do { - sf=&f->filter; - doneq=0; + sf = &f->filter; + doneq = 0; for (i=0; i<DVB_DEMUX_MASK_MAX; i++) { - mode=sf->filter_mode[i]; - mask=sf->filter_mask[i]; - f->maskandmode[i]=mask&mode; - doneq|=f->maskandnotmode[i]=mask&~mode; + mode = sf->filter_mode[i]; + mask = sf->filter_mask[i]; + f->maskandmode[i] = mask & mode; + doneq |= f->maskandnotmode[i] = mask & ~mode; } - f->doneq=doneq ? 1 : 0; - } while ((f=f->next)); + f->doneq = doneq ? 1 : 0; + } while ((f = f->next)); } static int dmx_section_feed_start_filtering(struct dmx_section_feed *feed) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx = dvbdmxfeed->demux; int ret; if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - + if (feed->is_filtering) { up(&dvbdmx->mutex); return -EBUSY; } + if (!dvbdmxfeed->filter) { up(&dvbdmx->mutex); return -EINVAL; @@ -948,9 +952,9 @@ static int dmx_section_feed_start_filtering(struct dmx_section_feed *feed) dvbdmxfeed->feed.sec.tsfeedp = 0; dvbdmxfeed->feed.sec.secbuf = dvbdmxfeed->feed.sec.secbuf_base; - dvbdmxfeed->feed.sec.secbufp=0; - dvbdmxfeed->feed.sec.seclen=0; - + dvbdmxfeed->feed.sec.secbufp = 0; + dvbdmxfeed->feed.sec.seclen = 0; + if (!dvbdmx->start_feed) { up(&dvbdmx->mutex); return -ENODEV; @@ -964,9 +968,10 @@ static int dmx_section_feed_start_filtering(struct dmx_section_feed *feed) } spin_lock_irq(&dvbdmx->lock); - feed->is_filtering=1; - dvbdmxfeed->state=DMX_STATE_GO; + feed->is_filtering = 1; + dvbdmxfeed->state = DMX_STATE_GO; spin_unlock_irq(&dvbdmx->lock); + up(&dvbdmx->mutex); return 0; } @@ -974,8 +979,8 @@ static int dmx_section_feed_start_filtering(struct dmx_section_feed *feed) static int dmx_section_feed_stop_filtering(struct dmx_section_feed* feed) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx = dvbdmxfeed->demux; int ret; if (down_interruptible (&dvbdmx->mutex)) @@ -985,93 +990,99 @@ static int dmx_section_feed_stop_filtering(struct dmx_section_feed* feed) up(&dvbdmx->mutex); return -ENODEV; } - ret=dvbdmx->stop_feed(dvbdmxfeed); + + ret = dvbdmx->stop_feed(dvbdmxfeed); + spin_lock_irq(&dvbdmx->lock); - dvbdmxfeed->state=DMX_STATE_READY; - feed->is_filtering=0; + dvbdmxfeed->state = DMX_STATE_READY; + feed->is_filtering = 0; spin_unlock_irq(&dvbdmx->lock); + up(&dvbdmx->mutex); return ret; } -static int dmx_section_feed_release_filter(struct dmx_section_feed *feed, +static int dmx_section_feed_release_filter(struct dmx_section_feed *feed, struct dmx_section_filter* filter) { - struct dvb_demux_filter *dvbdmxfilter=(struct dvb_demux_filter *) filter, *f; - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; + struct dvb_demux_filter *dvbdmxfilter = (struct dvb_demux_filter *) filter, *f; + struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx = dvbdmxfeed->demux; if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - if (dvbdmxfilter->feed!=dvbdmxfeed) { + if (dvbdmxfilter->feed != dvbdmxfeed) { up(&dvbdmx->mutex); return -EINVAL; } - if (feed->is_filtering) + + if (feed->is_filtering) feed->stop_filtering(feed); - + spin_lock_irq(&dvbdmx->lock); - f=dvbdmxfeed->filter; + f = dvbdmxfeed->filter; if (f == dvbdmxfilter) { - dvbdmxfeed->filter=dvbdmxfilter->next; + dvbdmxfeed->filter = dvbdmxfilter->next; } else { - while(f->next!=dvbdmxfilter) - f=f->next; - f->next=f->next->next; + while(f->next != dvbdmxfilter) + f = f->next; + f->next = f->next->next; } - dvbdmxfilter->state=DMX_STATE_FREE; + + dvbdmxfilter->state = DMX_STATE_FREE; spin_unlock_irq(&dvbdmx->lock); up(&dvbdmx->mutex); return 0; } -static int dvbdmx_allocate_section_feed(struct dmx_demux *demux, +static int dvbdmx_allocate_section_feed(struct dmx_demux *demux, struct dmx_section_feed **feed, dmx_section_cb callback) { - struct dvb_demux *dvbdmx=(struct dvb_demux *) demux; + struct dvb_demux *dvbdmx = (struct dvb_demux *) demux; struct dvb_demux_feed *dvbdmxfeed; if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; - if (!(dvbdmxfeed=dvb_dmx_feed_alloc(dvbdmx))) { + if (!(dvbdmxfeed = dvb_dmx_feed_alloc(dvbdmx))) { up(&dvbdmx->mutex); return -EBUSY; } - dvbdmxfeed->type=DMX_TYPE_SEC; - dvbdmxfeed->cb.sec=callback; - dvbdmxfeed->demux=dvbdmx; - dvbdmxfeed->pid=0xffff; + + dvbdmxfeed->type = DMX_TYPE_SEC; + dvbdmxfeed->cb.sec = callback; + dvbdmxfeed->demux = dvbdmx; + dvbdmxfeed->pid = 0xffff; dvbdmxfeed->feed.sec.secbuf = dvbdmxfeed->feed.sec.secbuf_base; dvbdmxfeed->feed.sec.secbufp = dvbdmxfeed->feed.sec.seclen = 0; dvbdmxfeed->feed.sec.tsfeedp = 0; - dvbdmxfeed->filter=NULL; - dvbdmxfeed->buffer=NULL; + dvbdmxfeed->filter = NULL; + dvbdmxfeed->buffer = NULL; (*feed)=&dvbdmxfeed->feed.sec; - (*feed)->is_filtering=0; - (*feed)->parent=demux; - (*feed)->priv=NULL; - - (*feed)->set=dmx_section_feed_set; - (*feed)->allocate_filter=dmx_section_feed_allocate_filter; - (*feed)->start_filtering=dmx_section_feed_start_filtering; - (*feed)->stop_filtering=dmx_section_feed_stop_filtering; + (*feed)->is_filtering = 0; + (*feed)->parent = demux; + (*feed)->priv = NULL; + + (*feed)->set = dmx_section_feed_set; + (*feed)->allocate_filter = dmx_section_feed_allocate_filter; + (*feed)->start_filtering = dmx_section_feed_start_filtering; + (*feed)->stop_filtering = dmx_section_feed_stop_filtering; (*feed)->release_filter = dmx_section_feed_release_filter; up(&dvbdmx->mutex); return 0; } -static int dvbdmx_release_section_feed(struct dmx_demux *demux, +static int dvbdmx_release_section_feed(struct dmx_demux *demux, struct dmx_section_feed *feed) { - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) feed; - struct dvb_demux *dvbdmx=(struct dvb_demux *) demux; + struct dvb_demux_feed *dvbdmxfeed = (struct dvb_demux_feed *) feed; + struct dvb_demux *dvbdmx = (struct dvb_demux *) demux; if (down_interruptible (&dvbdmx->mutex)) return -ERESTARTSYS; @@ -1081,14 +1092,14 @@ static int dvbdmx_release_section_feed(struct dmx_demux *demux, return -EINVAL; } #ifndef NOBUFS - vfree(dvbdmxfeed->buffer); - dvbdmxfeed->buffer=0; + vfree(dvbdmxfeed->buffer); + dvbdmxfeed->buffer=0; #endif dvbdmxfeed->state=DMX_STATE_FREE; dvb_demux_feed_del(dvbdmxfeed); - dvbdmxfeed->pid = 0xffff; + dvbdmxfeed->pid = 0xffff; up(&dvbdmx->mutex); return 0; @@ -1101,10 +1112,11 @@ static int dvbdmx_release_section_feed(struct dmx_demux *demux, static int dvbdmx_open(struct dmx_demux *demux) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux = (struct dvb_demux *) demux; - if (dvbdemux->users>=MAX_DVB_DEMUX_USERS) + if (dvbdemux->users >= MAX_DVB_DEMUX_USERS) return -EUSERS; + dvbdemux->users++; return 0; } @@ -1112,10 +1124,11 @@ static int dvbdmx_open(struct dmx_demux *demux) static int dvbdmx_close(struct dmx_demux *demux) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux = (struct dvb_demux *) demux; - if (dvbdemux->users==0) + if (dvbdemux->users == 0) return -ENODEV; + dvbdemux->users--; //FIXME: release any unneeded resources if users==0 return 0; @@ -1142,7 +1155,7 @@ static int dvbdmx_write(struct dmx_demux *demux, const char *buf, size_t count) static int dvbdmx_add_frontend(struct dmx_demux *demux, struct dmx_frontend *frontend) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux = (struct dvb_demux *) demux; struct list_head *head = &dvbdemux->frontend_list; list_add(&(frontend->connectivity_list), head); @@ -1153,8 +1166,8 @@ static int dvbdmx_add_frontend(struct dmx_demux *demux, struct dmx_frontend *fro static int dvbdmx_remove_frontend(struct dmx_demux *demux, struct dmx_frontend *frontend) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; - struct list_head *pos, *n, *head=&dvbdemux->frontend_list; + struct dvb_demux *dvbdemux = (struct dvb_demux *) demux; + struct list_head *pos, *n, *head = &dvbdemux->frontend_list; list_for_each_safe (pos, n, head) { if (DMX_FE_ENTRY(pos) == frontend) { @@ -1162,13 +1175,14 @@ static int dvbdmx_remove_frontend(struct dmx_demux *demux, struct dmx_frontend * return 0; } } + return -ENODEV; } static struct list_head * dvbdmx_get_frontends(struct dmx_demux *demux) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux = (struct dvb_demux *) demux; if (list_empty(&dvbdemux->frontend_list)) return NULL; @@ -1178,15 +1192,15 @@ static struct list_head * dvbdmx_get_frontends(struct dmx_demux *demux) int dvbdmx_connect_frontend(struct dmx_demux *demux, struct dmx_frontend *frontend) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux = (struct dvb_demux *) demux; if (demux->frontend) return -EINVAL; - + if (down_interruptible (&dvbdemux->mutex)) return -ERESTARTSYS; - demux->frontend=frontend; + demux->frontend = frontend; up(&dvbdemux->mutex); return 0; } @@ -1195,12 +1209,12 @@ EXPORT_SYMBOL(dvbdmx_connect_frontend); int dvbdmx_disconnect_frontend(struct dmx_demux *demux) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux = (struct dvb_demux *) demux; if (down_interruptible (&dvbdemux->mutex)) return -ERESTARTSYS; - demux->frontend=NULL; + demux->frontend = NULL; up(&dvbdemux->mutex); return 0; } @@ -1209,7 +1223,7 @@ EXPORT_SYMBOL(dvbdmx_disconnect_frontend); static int dvbdmx_get_pes_pids(struct dmx_demux *demux, u16 *pids) { - struct dvb_demux *dvbdemux=(struct dvb_demux *) demux; + struct dvb_demux *dvbdemux = (struct dvb_demux *) demux; memcpy(pids, dvbdemux->pids, 5*sizeof(u16)); return 0; @@ -1221,35 +1235,36 @@ int dvb_dmx_init(struct dvb_demux *dvbdemux) int i, err; struct dmx_demux *dmx = &dvbdemux->dmx; - dvbdemux->users=0; - dvbdemux->filter=vmalloc(dvbdemux->filternum*sizeof(struct dvb_demux_filter)); + dvbdemux->users = 0; + dvbdemux->filter = vmalloc(dvbdemux->filternum*sizeof(struct dvb_demux_filter)); + if (!dvbdemux->filter) return -ENOMEM; - dvbdemux->feed=vmalloc(dvbdemux->feednum*sizeof(struct dvb_demux_feed)); + dvbdemux->feed = vmalloc(dvbdemux->feednum*sizeof(struct dvb_demux_feed)); if (!dvbdemux->feed) { vfree(dvbdemux->filter); return -ENOMEM; } for (i=0; i<dvbdemux->filternum; i++) { - dvbdemux->filter[i].state=DMX_STATE_FREE; - dvbdemux->filter[i].index=i; + dvbdemux->filter[i].state = DMX_STATE_FREE; + dvbdemux->filter[i].index = i; } for (i=0; i<dvbdemux->feednum; i++) - dvbdemux->feed[i].state=DMX_STATE_FREE; + dvbdemux->feed[i].state = DMX_STATE_FREE; dvbdemux->frontend_list.next= dvbdemux->frontend_list.prev= &dvbdemux->frontend_list; for (i=0; i<DMX_TS_PES_OTHER; i++) { - dvbdemux->pesfilter[i]=NULL; - dvbdemux->pids[i]=0xffff; + dvbdemux->pesfilter[i] = NULL; + dvbdemux->pids[i] = 0xffff; } INIT_LIST_HEAD(&dvbdemux->feed_list); dvbdemux->playing = 0; dvbdemux->recording = 0; - dvbdemux->tsbufp=0; + dvbdemux->tsbufp = 0; if (!dvbdemux->check_crc32) dvbdemux->check_crc32 = dvb_dmx_crc32; @@ -1257,30 +1272,31 @@ int dvb_dmx_init(struct dvb_demux *dvbdemux) if (!dvbdemux->memcopy) dvbdemux->memcopy = dvb_dmx_memcopy; - dmx->frontend=NULL; + dmx->frontend = NULL; dmx->reg_list.prev = dmx->reg_list.next = &dmx->reg_list; - dmx->priv=(void *) dvbdemux; - dmx->open=dvbdmx_open; - dmx->close=dvbdmx_close; - dmx->write=dvbdmx_write; - dmx->allocate_ts_feed=dvbdmx_allocate_ts_feed; - dmx->release_ts_feed=dvbdmx_release_ts_feed; - dmx->allocate_section_feed=dvbdmx_allocate_section_feed; - dmx->release_section_feed=dvbdmx_release_section_feed; - - dmx->descramble_mac_address=NULL; - dmx->descramble_section_payload=NULL; - - dmx->add_frontend=dvbdmx_add_frontend; - dmx->remove_frontend=dvbdmx_remove_frontend; - dmx->get_frontends=dvbdmx_get_frontends; - dmx->connect_frontend=dvbdmx_connect_frontend; - dmx->disconnect_frontend=dvbdmx_disconnect_frontend; - dmx->get_pes_pids=dvbdmx_get_pes_pids; + dmx->priv = (void *) dvbdemux; + dmx->open = dvbdmx_open; + dmx->close = dvbdmx_close; + dmx->write = dvbdmx_write; + dmx->allocate_ts_feed = dvbdmx_allocate_ts_feed; + dmx->release_ts_feed = dvbdmx_release_ts_feed; + dmx->allocate_section_feed = dvbdmx_allocate_section_feed; + dmx->release_section_feed = dvbdmx_release_section_feed; + + dmx->descramble_mac_address = NULL; + dmx->descramble_section_payload = NULL; + + dmx->add_frontend = dvbdmx_add_frontend; + dmx->remove_frontend = dvbdmx_remove_frontend; + dmx->get_frontends = dvbdmx_get_frontends; + dmx->connect_frontend = dvbdmx_connect_frontend; + dmx->disconnect_frontend = dvbdmx_disconnect_frontend; + dmx->get_pes_pids = dvbdmx_get_pes_pids; + sema_init(&dvbdemux->mutex, 1); spin_lock_init(&dvbdemux->lock); - if ((err = dmx_register_demux(dmx)) < 0) + if ((err = dmx_register_demux(dmx)) < 0) return err; return 0; @@ -1293,9 +1309,8 @@ int dvb_dmx_release(struct dvb_demux *dvbdemux) struct dmx_demux *dmx = &dvbdemux->dmx; dmx_unregister_demux(dmx); - vfree(dvbdemux->filter); - vfree(dvbdemux->feed); + vfree(dvbdemux->filter); + vfree(dvbdemux->feed); return 0; } EXPORT_SYMBOL(dvb_dmx_release); - diff --git a/drivers/media/dvb/dvb-core/dvb_demux.h b/drivers/media/dvb/dvb-core/dvb_demux.h index 02faa99d297f..904ad580420b 100644 --- a/drivers/media/dvb/dvb-core/dvb_demux.h +++ b/drivers/media/dvb/dvb-core/dvb_demux.h @@ -1,4 +1,4 @@ -/* +/* * dvb_demux.h: DVB kernel demux API * * Copyright (C) 2000-2001 Marcus Metzler & Ralph Metzler @@ -45,10 +45,10 @@ struct dvb_demux_filter { struct dmx_section_filter filter; - u8 maskandmode [DMX_MAX_FILTER_SIZE]; - u8 maskandnotmode [DMX_MAX_FILTER_SIZE]; + u8 maskandmode [DMX_MAX_FILTER_SIZE]; + u8 maskandnotmode [DMX_MAX_FILTER_SIZE]; int doneq; - + struct dvb_demux_filter *next; struct dvb_demux_feed *feed; int index; @@ -85,10 +85,10 @@ struct dvb_demux_feed { int buffer_size; int descramble; - struct timespec timeout; + struct timespec timeout; struct dvb_demux_filter *filter; int cb_length; - + int ts_type; enum dmx_ts_pes pes_type; @@ -113,7 +113,7 @@ struct dvb_demux { const u8 *buf, size_t len); void (*memcopy) (struct dvb_demux_feed *feed, u8 *dst, const u8 *src, size_t len); - + int users; #define MAX_DVB_DEMUX_USERS 10 struct dvb_demux_filter *filter; @@ -123,8 +123,8 @@ struct dvb_demux { struct dvb_demux_feed *pesfilter[DMX_TS_PES_OTHER]; u16 pids[DMX_TS_PES_OTHER]; - int playing; - int recording; + int playing; + int recording; #define DMX_MAX_PID 0x2000 struct list_head feed_list; @@ -147,4 +147,3 @@ int dvbdmx_connect_frontend(struct dmx_demux *demux, struct dmx_frontend *fronte int dvbdmx_disconnect_frontend(struct dmx_demux *demux); #endif /* _DVB_DEMUX_H_ */ - diff --git a/drivers/media/dvb/dvb-core/dvb_filter.c b/drivers/media/dvb/dvb-core/dvb_filter.c index 5ce4f6569d0b..bd5143906084 100644 --- a/drivers/media/dvb/dvb-core/dvb_filter.c +++ b/drivers/media/dvb/dvb-core/dvb_filter.c @@ -22,12 +22,12 @@ static u32 ac3_frames[3][32] = {69,87,104,121,139,174,208,243,278,348,417,487,557,696,835,975,1114, 1253,1393,0,0,0,0,0,0,0,0,0,0,0,0,0}, {96,120,144,168,192,240,288,336,384,480,576,672,768,960,1152,1344, - 1536,1728,1920,0,0,0,0,0,0,0,0,0,0,0,0,0}}; + 1536,1728,1920,0,0,0,0,0,0,0,0,0,0,0,0,0}}; #if 0 -static void setup_ts2pes(ipack *pa, ipack *pv, u16 *pida, u16 *pidv, +static void setup_ts2pes(ipack *pa, ipack *pv, u16 *pida, u16 *pidv, void (*pes_write)(u8 *buf, int count, void *data), void *priv) { @@ -72,7 +72,7 @@ static int read_picture_header(u8 *headr, struct mpg_picture *pic, int field, in u8 pct; if (pr) printk( "Pic header: "); - pic->temporal_reference[field] = (( headr[0] << 2 ) | + pic->temporal_reference[field] = (( headr[0] << 2 ) | (headr[1] & 0x03) )& 0x03ff; if (pr) printk( " temp ref: 0x%04x", pic->temporal_reference[field]); @@ -93,31 +93,31 @@ static int read_picture_header(u8 *headr, struct mpg_picture *pic, int field, in } - pic->vinfo.vbv_delay = (( headr[1] >> 5 ) | ( headr[2] << 3) | + pic->vinfo.vbv_delay = (( headr[1] >> 5 ) | ( headr[2] << 3) | ( (headr[3] & 0x1F) << 11) ) & 0xffff; if (pr) printk( " vbv delay: 0x%04x", pic->vinfo.vbv_delay); - pic->picture_header_parameter = ( headr[3] & 0xe0 ) | + pic->picture_header_parameter = ( headr[3] & 0xe0 ) | ((headr[4] & 0x80) >> 3); if ( pct == B_FRAME ){ pic->picture_header_parameter |= ( headr[4] >> 3 ) & 0x0f; } - if (pr) printk( " pic head param: 0x%x", + if (pr) printk( " pic head param: 0x%x", pic->picture_header_parameter); return pct; -} +} #endif #if 0 /* needs 4 byte input */ static int read_gop_header(u8 *headr, struct mpg_picture *pic, int pr) { - if (pr) printk("GOP header: "); + if (pr) printk("GOP header: "); - pic->time_code = (( headr[0] << 17 ) | ( headr[1] << 9) | + pic->time_code = (( headr[0] << 17 ) | ( headr[1] << 9) | ( headr[2] << 1 ) | (headr[3] &0x01)) & 0x1ffffff; if (pr) printk(" time: %d:%d.%d ", (headr[0]>>2)& 0x1F, @@ -129,14 +129,14 @@ static int read_gop_header(u8 *headr, struct mpg_picture *pic, int pr) } else { pic->closed_gop = 0; } - if (pr) printk("closed: %d", pic->closed_gop); + if (pr) printk("closed: %d", pic->closed_gop); if ( ( headr[3] & 0x20 ) != 0 ){ pic->broken_link = 1; } else { pic->broken_link = 0; } - if (pr) printk(" broken: %d\n", pic->broken_link); + if (pr) printk(" broken: %d\n", pic->broken_link); return 0; } @@ -153,39 +153,39 @@ static int read_sequence_header(u8 *headr, struct dvb_video_info *vi, int pr) vi->horizontal_size = ((headr[1] &0xF0) >> 4) | (headr[0] << 4); vi->vertical_size = ((headr[1] &0x0F) << 8) | (headr[2]); - + sw = (int)((headr[3]&0xF0) >> 4) ; switch( sw ){ case 1: if (pr) printk("Videostream: ASPECT: 1:1"); - vi->aspect_ratio = 100; + vi->aspect_ratio = 100; break; case 2: if (pr) printk("Videostream: ASPECT: 4:3"); - vi->aspect_ratio = 133; + vi->aspect_ratio = 133; break; case 3: if (pr) printk("Videostream: ASPECT: 16:9"); - vi->aspect_ratio = 177; + vi->aspect_ratio = 177; break; case 4: if (pr) printk("Videostream: ASPECT: 2.21:1"); - vi->aspect_ratio = 221; + vi->aspect_ratio = 221; break; case 5 ... 15: if (pr) printk("Videostream: ASPECT: reserved"); - vi->aspect_ratio = 0; + vi->aspect_ratio = 0; break; default: - vi->aspect_ratio = 0; + vi->aspect_ratio = 0; return -1; } @@ -240,7 +240,7 @@ static int read_sequence_header(u8 *headr, struct dvb_video_info *vi, int pr) } vi->bit_rate = (headr[4] << 10) | (headr[5] << 2) | (headr[6] & 0x03); - + vi->vbv_buffer_size = (( headr[6] & 0xF8) >> 3 ) | (( headr[7] & 0x1F )<< 5); @@ -303,7 +303,7 @@ static int get_ainfo(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr) else { c++; } - } + } if (!found) return -1; @@ -333,8 +333,8 @@ static int get_ainfo(u8 *mbuf, int count, struct dvb_audio_info *ai, int pr) if (ai->frequency == 3) printk(" Freq: reserved\n"); else - printk(" Freq: %d kHz\n",ai->frequency); - + printk(" Freq: %d kHz\n",ai->frequency); + } ai->off = c; return 0; @@ -349,7 +349,7 @@ int dvb_filter_get_ac3info(u8 *mbuf, int count, struct dvb_audio_info *ai, int p int c = 0; u8 frame = 0; int fr = 0; - + while ( !found && c < count){ u8 *b = mbuf+c; @@ -358,7 +358,7 @@ int dvb_filter_get_ac3info(u8 *mbuf, int count, struct dvb_audio_info *ai, int p else { c++; } - } + } if (!found) return -1; if (pr) @@ -402,7 +402,7 @@ static u8 *skip_pes_header(u8 **bufp) int skip = 0; static const int mpeg1_skip_table[16] = { - 1, 0xffff, 5, 10, 0xffff, 0xffff, 0xffff, 0xffff, + 1, 0xffff, 5, 10, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff }; @@ -479,9 +479,9 @@ static void initialize_mpg_picture(struct mpg_picture *pic) pic->picture_display_extension_flag[0] = 0; pic->picture_display_extension_flag[1] = 0; - pic->sequence_header_flag = 0; - pic->gop_flag = 0; - pic->sequence_end_flag = 0; + pic->sequence_header_flag = 0; + pic->gop_flag = 0; + pic->sequence_end_flag = 0; } #endif @@ -553,7 +553,7 @@ static void init_mpg_picture( struct mpg_picture *pic, int chan, int32_t field_t } #endif -void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid, +void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid, dvb_filter_pes2ts_cb_t *cb, void *priv) { unsigned char *buf=p2ts->buf; @@ -572,11 +572,11 @@ int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes, { unsigned char *buf=p2ts->buf; int ret=0, rest; - + //len=6+((pes[4]<<8)|pes[5]); if (payload_start) - buf[1]|=0x40; + buf[1]|=0x40; else buf[1]&=~0x40; while (len>=184) { @@ -601,4 +601,3 @@ int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes, return p2ts->cb(p2ts->priv, buf); } EXPORT_SYMBOL(dvb_filter_pes2ts); - diff --git a/drivers/media/dvb/dvb-core/dvb_filter.h b/drivers/media/dvb/dvb-core/dvb_filter.h index e55f80ca85af..b0848f7836b7 100644 --- a/drivers/media/dvb/dvb-core/dvb_filter.h +++ b/drivers/media/dvb/dvb-core/dvb_filter.h @@ -34,8 +34,8 @@ struct dvb_filter_pes2ts { void *priv; }; -void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid, - dvb_filter_pes2ts_cb_t *cb, void *priv); +void dvb_filter_pes2ts_init(struct dvb_filter_pes2ts *p2ts, unsigned short pid, + dvb_filter_pes2ts_cb_t *cb, void *priv); int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes, int len, int payload_start); @@ -70,8 +70,8 @@ int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes, #define QUANT_MATRIX_EXTENSION 0x03 #define PICTURE_DISPLAY_EXTENSION 0x07 -#define I_FRAME 0x01 -#define B_FRAME 0x02 +#define I_FRAME 0x01 +#define B_FRAME 0x02 #define P_FRAME 0x03 /* Initialize sequence_data */ @@ -92,7 +92,7 @@ int dvb_filter_pes2ts(struct dvb_filter_pes2ts *p2ts, unsigned char *pes, #define PES_CRC_FLAG 0x02 #define PES_EXT_FLAG 0x01 -//pts_dts flags +//pts_dts flags #define PTS_ONLY 0x80 #define PTS_DTS 0xC0 @@ -165,7 +165,7 @@ struct dvb_video_info { s16 vbv_delay; u32 CSPF; u32 off; -}; +}; #define OFF_SIZE 4 #define FIRST_FIELD 0 @@ -181,10 +181,10 @@ struct mpg_picture { int low_delay; int closed_gop; int broken_link; - int sequence_header_flag; - int gop_flag; + int sequence_header_flag; + int gop_flag; int sequence_end_flag; - + u8 profile_and_level; s32 picture_coding_parameter; u32 matrix[32]; @@ -211,26 +211,26 @@ struct mpg_picture { int forward_bank; int backward_bank; int compress; - s16 frame_centre_horizontal_offset[OFF_SIZE]; + s16 frame_centre_horizontal_offset[OFF_SIZE]; /* [0-2] 1st field, [3] 2nd field */ s16 frame_centre_vertical_offset[OFF_SIZE]; /* [0-2] 1st field, [3] 2nd field */ - s16 temporal_reference[2]; + s16 temporal_reference[2]; /* [0] 1st field, [1] 2nd field */ s8 picture_coding_type[2]; - /* [0] 1st field, [1] 2nd field */ + /* [0] 1st field, [1] 2nd field */ s8 picture_structure[2]; - /* [0] 1st field, [1] 2nd field */ + /* [0] 1st field, [1] 2nd field */ s8 picture_display_extension_flag[2]; - /* [0] 1st field, [1] 2nd field */ - /* picture_display_extenion() 0:no 1:exit*/ + /* [0] 1st field, [1] 2nd field */ + /* picture_display_extenion() 0:no 1:exit*/ s8 pts_flag[2]; - /* [0] 1st field, [1] 2nd field */ + /* [0] 1st field, [1] 2nd field */ }; struct dvb_audio_info { - int layer ; + int layer; u32 bit_rate; u32 frequency; u32 mode; diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index 2f1cf834817a..60c888eb2920 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c @@ -3,9 +3,9 @@ * * * Copyright (C) 1999-2001 Ralph Metzler - * Marcus Metzler - * Holger Waechtler - * for convergence integrated media GmbH + * Marcus Metzler + * Holger Waechtler + * for convergence integrated media GmbH * * Copyright (C) 2004 Andrew de Quincey (tuning thread cleanup) * @@ -16,7 +16,7 @@ * * This program is distributed in the hope that it will be useful, * 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. * * You should have received a copy of the GNU General Public License @@ -161,39 +161,39 @@ static int dvb_frontend_get_event(struct dvb_frontend *fe, dprintk ("%s\n", __FUNCTION__); if (events->overflow) { - events->overflow = 0; - return -EOVERFLOW; - } + events->overflow = 0; + return -EOVERFLOW; + } - if (events->eventw == events->eventr) { + if (events->eventw == events->eventr) { int ret; - if (flags & O_NONBLOCK) - return -EWOULDBLOCK; + if (flags & O_NONBLOCK) + return -EWOULDBLOCK; up(&fepriv->sem); - ret = wait_event_interruptible (events->wait_queue, - events->eventw != events->eventr); + ret = wait_event_interruptible (events->wait_queue, + events->eventw != events->eventr); if (down_interruptible (&fepriv->sem)) return -ERESTARTSYS; - if (ret < 0) - return ret; - } + if (ret < 0) + return ret; + } - if (down_interruptible (&events->sem)) + if (down_interruptible (&events->sem)) return -ERESTARTSYS; - memcpy (event, &events->events[events->eventr], + memcpy (event, &events->events[events->eventr], sizeof(struct dvb_frontend_event)); - events->eventr = (events->eventr + 1) % MAX_EVENT; + events->eventr = (events->eventr + 1) % MAX_EVENT; - up (&events->sem); + up (&events->sem); - return 0; + return 0; } static void dvb_frontend_init(struct dvb_frontend *fe) @@ -206,26 +206,26 @@ static void dvb_frontend_init(struct dvb_frontend *fe) fe->ops->init(fe); } -static void update_delay (int *quality, int *delay, int min_delay, int locked) +static void update_delay(int *quality, int *delay, int min_delay, int locked) { - int q2; + int q2; - dprintk ("%s\n", __FUNCTION__); + dprintk ("%s\n", __FUNCTION__); - if (locked) - (*quality) = (*quality * 220 + 36*256) / 256; - else - (*quality) = (*quality * 220 + 0) / 256; + if (locked) + (*quality) = (*quality * 220 + 36*256) / 256; + else + (*quality) = (*quality * 220 + 0) / 256; - q2 = *quality - 128; - q2 *= q2; + q2 = *quality - 128; + q2 *= q2; *delay = min_delay + q2 * HZ / (128*128); } /** * Performs automatic twiddling of frontend parameters. - * + * * @param fe The frontend concerned. * @param check_wrapped Checks if an iteration has completed. DO NOT SET ON THE FIRST ATTEMPT * @returns Number of complete iterations that have been performed. @@ -270,26 +270,26 @@ static int dvb_frontend_autotune(struct dvb_frontend *fe, int check_wrapped) case 2: if (fepriv->lnb_drift == 0) break; - + fepriv->lnb_drift = -fepriv->lnb_drift; ready = 1; break; - + case 3: if (fepriv->lnb_drift == 0) break; if (!autoinversion) break; - + fepriv->inversion = (fepriv->inversion == INVERSION_OFF) ? INVERSION_ON : INVERSION_OFF; fepriv->lnb_drift = -fepriv->lnb_drift; ready = 1; break; - + default: fepriv->auto_step++; fepriv->auto_sub_step = -1; /* it'll be incremented to 0 in a moment */ break; } - + if (!ready) fepriv->auto_sub_step++; } @@ -298,13 +298,13 @@ static int dvb_frontend_autotune(struct dvb_frontend *fe, int check_wrapped) if ((fepriv->auto_step == fepriv->started_auto_step) && (fepriv->auto_sub_step == 0) && check_wrapped) { return 1; - } + } dprintk("%s: drift:%i inversion:%i auto_step:%i " "auto_sub_step:%i started_auto_step:%i\n", __FUNCTION__, fepriv->lnb_drift, fepriv->inversion, fepriv->auto_step, fepriv->auto_sub_step, fepriv->started_auto_step); - + /* set the frontend itself */ fepriv->parameters.frequency += fepriv->lnb_drift; if (autoinversion) @@ -355,7 +355,7 @@ static void dvb_frontend_wakeup(struct dvb_frontend *fe) /* * FIXME: use linux/kthread.h */ -static int dvb_frontend_thread (void *data) +static int dvb_frontend_thread(void *data) { struct dvb_frontend *fe = (struct dvb_frontend *) data; struct dvb_frontend_private *fepriv = (struct dvb_frontend_private*) fe->frontend_priv; @@ -365,17 +365,17 @@ static int dvb_frontend_thread (void *data) fe_status_t s; int check_wrapped = 0; - dprintk ("%s\n", __FUNCTION__); + dprintk("%s\n", __FUNCTION__); snprintf (name, sizeof(name), "kdvb-fe-%i", fe->dvb->num); - lock_kernel (); - daemonize (name); - sigfillset (¤t->blocked); - unlock_kernel (); + lock_kernel(); + daemonize(name); + sigfillset(¤t->blocked); + unlock_kernel(); fepriv->status = 0; - dvb_frontend_init (fe); + dvb_frontend_init(fe); fepriv->wakeup = 0; while (1) { @@ -384,7 +384,7 @@ static int dvb_frontend_thread (void *data) timeout = wait_event_interruptible_timeout(fepriv->wait_queue, dvb_frontend_should_wakeup(fe), delay); - if (0 != dvb_frontend_is_exiting (fe)) { + if (0 != dvb_frontend_is_exiting(fe)) { /* got signal or quitting */ break; } @@ -409,7 +409,7 @@ static int dvb_frontend_thread (void *data) if (fe->ops->read_status) fe->ops->read_status(fe, &s); if (s != fepriv->status) { - dvb_frontend_add_event (fe, s); + dvb_frontend_add_event(fe, s); fepriv->status = s; } } @@ -447,16 +447,16 @@ static int dvb_frontend_thread (void *data) if ((fepriv->state & FESTATE_LOSTLOCK) && (fe->ops->info.caps & FE_CAN_RECOVER) && (fepriv->max_drift == 0)) { update_delay(&quality, &delay, fepriv->min_delay, s & FE_HAS_LOCK); - continue; - } - + continue; + } + /* don't do anything if we're in the DISEQC state, since this * might be someone with a motorized dish controlled by DISEQC. * If its actually a re-tune, there will be a SET_FRONTEND soon enough. */ if (fepriv->state & FESTATE_DISEQC) { update_delay(&quality, &delay, fepriv->min_delay, s & FE_HAS_LOCK); continue; - } + } /* if we're in the RETUNE state, set everything up for a brand * new scan, keeping the current inversion setting, as the next @@ -495,7 +495,7 @@ static int dvb_frontend_thread (void *data) /* slow zigzag */ if (fepriv->state & FESTATE_SEARCHING_SLOW) { update_delay(&quality, &delay, fepriv->min_delay, s & FE_HAS_LOCK); - + /* Note: don't bother checking for wrapping; we stay in this * state until we get a lock */ dvb_frontend_autotune(fe, 0); @@ -567,7 +567,7 @@ static int dvb_frontend_start(struct dvb_frontend *fe) if (!fepriv->exit) return 0; else - dvb_frontend_stop (fe); + dvb_frontend_stop (fe); } if (signal_pending(current)) @@ -592,8 +592,7 @@ static int dvb_frontend_start(struct dvb_frontend *fe) return 0; } - -static int dvb_frontend_ioctl (struct inode *inode, struct file *file, +static int dvb_frontend_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *parg) { struct dvb_device *dvbdev = file->private_data; @@ -712,14 +711,14 @@ static int dvb_frontend_ioctl (struct inode *inode, struct file *file, case FE_SET_FRONTEND: { struct dvb_frontend_tune_settings fetunesettings; - + memcpy (&fepriv->parameters, parg, sizeof (struct dvb_frontend_parameters)); memset(&fetunesettings, 0, sizeof(struct dvb_frontend_tune_settings)); memcpy(&fetunesettings.parameters, parg, sizeof (struct dvb_frontend_parameters)); - + /* force auto frequency inversion if requested */ if (dvb_force_auto_inversion) { fepriv->parameters.inversion = INVERSION_AUTO; @@ -745,14 +744,14 @@ static int dvb_frontend_ioctl (struct inode *inode, struct file *file, fepriv->min_delay = HZ/20; fepriv->step_size = fepriv->parameters.u.qpsk.symbol_rate / 16000; fepriv->max_drift = fepriv->parameters.u.qpsk.symbol_rate / 2000; - break; - + break; + case FE_QAM: fepriv->min_delay = HZ/20; fepriv->step_size = 0; /* no zigzag */ fepriv->max_drift = 0; break; - + case FE_OFDM: fepriv->min_delay = HZ/20; fepriv->step_size = fe->ops->info.frequency_stepsize * 2; @@ -768,7 +767,7 @@ static int dvb_frontend_ioctl (struct inode *inode, struct file *file, fepriv->state = FESTATE_RETUNE; dvb_frontend_wakeup(fe); - dvb_frontend_add_event (fe, 0); + dvb_frontend_add_event(fe, 0); fepriv->status = 0; err = 0; break; @@ -790,8 +789,7 @@ static int dvb_frontend_ioctl (struct inode *inode, struct file *file, return err; } - -static unsigned int dvb_frontend_poll (struct file *file, struct poll_table_struct *wait) +static unsigned int dvb_frontend_poll(struct file *file, struct poll_table_struct *wait) { struct dvb_device *dvbdev = file->private_data; struct dvb_frontend *fe = dvbdev->priv; @@ -807,8 +805,7 @@ static unsigned int dvb_frontend_poll (struct file *file, struct poll_table_stru return 0; } - -static int dvb_frontend_open (struct inode *inode, struct file *file) +static int dvb_frontend_open(struct inode *inode, struct file *file) { struct dvb_device *dvbdev = file->private_data; struct dvb_frontend *fe = dvbdev->priv; @@ -828,12 +825,11 @@ static int dvb_frontend_open (struct inode *inode, struct file *file) /* empty event queue */ fepriv->events.eventr = fepriv->events.eventw = 0; } - + return ret; } - -static int dvb_frontend_release (struct inode *inode, struct file *file) +static int dvb_frontend_release(struct inode *inode, struct file *file) { struct dvb_device *dvbdev = file->private_data; struct dvb_frontend *fe = dvbdev->priv; @@ -847,7 +843,6 @@ static int dvb_frontend_release (struct inode *inode, struct file *file) return dvb_generic_release (inode, file); } - static struct file_operations dvb_frontend_fops = { .owner = THIS_MODULE, .ioctl = dvb_generic_ioctl, @@ -907,7 +902,7 @@ int dvb_unregister_frontend(struct dvb_frontend* fe) down (&frontend_mutex); dvb_unregister_device (fepriv->dvbdev); - dvb_frontend_stop (fe); + dvb_frontend_stop (fe); if (fe->ops->release) fe->ops->release(fe); else diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.h b/drivers/media/dvb/dvb-core/dvb_frontend.h index e2ec9ba3aaf8..d2b021792791 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.h +++ b/drivers/media/dvb/dvb-core/dvb_frontend.h @@ -1,4 +1,4 @@ -/* +/* * dvb_frontend.h * * Copyright (C) 2001 convergence integrated media GmbH diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c index c8d909805967..2a4d70a5e9fa 100644 --- a/drivers/media/dvb/dvb-core/dvb_net.c +++ b/drivers/media/dvb/dvb-core/dvb_net.c @@ -1,4 +1,4 @@ -/* +/* * dvb_net.c * * Copyright (C) 2001 Convergence integrated media GmbH @@ -9,8 +9,8 @@ * Copyright (C) 2003, 2004 gcs - Global Communication & Services GmbH. * and Department of Scientific Computing * Paris Lodron University of Salzburg. - * Hilmar Linder <hlinder@cosy.sbg.ac.at> - * and Wolfram Stering <wstering@cosy.sbg.ac.at> + * Hilmar Linder <hlinder@cosy.sbg.ac.at> + * and Wolfram Stering <wstering@cosy.sbg.ac.at> * * ULE Decaps according to draft-ietf-ipdvb-ule-03.txt. * @@ -18,12 +18,12 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 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. @@ -122,10 +122,10 @@ static void hexdump( const unsigned char *buf, unsigned short len ) struct dvb_net_priv { int in_use; - struct net_device_stats stats; + struct net_device_stats stats; u16 pid; struct dvb_net *host; - struct dmx_demux *demux; + struct dmx_demux *demux; struct dmx_section_feed *secfeed; struct dmx_section_filter *secfilter; struct dmx_ts_feed *tsfeed; @@ -156,7 +156,7 @@ struct dvb_net_priv { /** - * Determine the packet's protocol ID. The rule here is that we + * Determine the packet's protocol ID. The rule here is that we * assume 802.3 if the type field is short enough to be a length. * This is normal practice and works for any 'now in use' protocol. * @@ -168,7 +168,7 @@ static unsigned short dvb_net_eth_type_trans(struct sk_buff *skb, { struct ethhdr *eth; unsigned char *rawp; - + skb->mac.raw=skb->data; skb_pull(skb,dev->hard_header_len); #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,8) @@ -176,19 +176,19 @@ static unsigned short dvb_net_eth_type_trans(struct sk_buff *skb, #else eth = eth_hdr(skb); #endif - + if (*eth->h_dest & 1) { if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0) skb->pkt_type=PACKET_BROADCAST; else skb->pkt_type=PACKET_MULTICAST; } - + if (ntohs(eth->h_proto) >= 1536) return eth->h_proto; - + rawp = skb->data; - + /** * This is a magic hack to spot IPX packets. Older Novell breaks * the protocol design and runs IPX over 802.3 without an 802.2 LLC @@ -197,7 +197,7 @@ static unsigned short dvb_net_eth_type_trans(struct sk_buff *skb, */ if (*(unsigned short *)rawp == 0xFFFF) return htons(ETH_P_802_3); - + /** * Real 802.2 LLC */ @@ -236,7 +236,7 @@ int ule_bridged_sndu( struct dvb_net_priv *p ) /** Handle ULE extension headers. * Function is called after a successful CRC32 verification of an ULE SNDU to complete its decoding. * Returns: >= 0: nr. of bytes consumed by next extension header - * -1: Mandatory extension header that is not recognized or TEST SNDU; discard. + * -1: Mandatory extension header that is not recognized or TEST SNDU; discard. */ static int handle_one_ule_extension( struct dvb_net_priv *p ) { @@ -345,7 +345,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len ) if (ule_dump) { hexdump( ule_where, TS_SZ ); ule_dump = 0; - } + } ule_where += TS_SZ; #endif @@ -586,9 +586,9 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len ) ule_crc = iov_crc32(ule_crc, iov, 3); expected_crc = *((u8 *)priv->ule_skb->tail - 4) << 24 | - *((u8 *)priv->ule_skb->tail - 3) << 16 | - *((u8 *)priv->ule_skb->tail - 2) << 8 | - *((u8 *)priv->ule_skb->tail - 1); + *((u8 *)priv->ule_skb->tail - 3) << 16 | + *((u8 *)priv->ule_skb->tail - 2) << 8 | + *((u8 *)priv->ule_skb->tail - 1); if (ule_crc != expected_crc) { printk(KERN_WARNING "%lu: CRC32 check FAILED: %#lx / %#lx, SNDU len %d type %#x, ts_remain %d, next 2: %x.\n", priv->ts_count, ule_crc, expected_crc, priv->ule_sndu_len, priv->ule_sndu_type, ts_remain, ts_remain > 2 ? *(unsigned short *)from_where : 0); @@ -790,12 +790,12 @@ static void dvb_net_sec(struct net_device *dev, u8 *pkt, int pkt_len) eth[13] = 0x00; skb->protocol = dvb_net_eth_type_trans(skb, dev); - + stats->rx_packets++; stats->rx_bytes+=skb->len; netif_rx(skb); } - + static int dvb_net_sec_callback(const u8 *buffer1, size_t buffer1_len, const u8 *buffer2, size_t buffer2_len, struct dmx_section_filter *filter, @@ -873,7 +873,7 @@ static int dvb_net_feed_start(struct net_device *dev) struct dvb_net_priv *priv = (struct dvb_net_priv*) dev->priv; struct dmx_demux *demux = priv->demux; unsigned char *mac = (unsigned char *) dev->dev_addr; - + dprintk("%s: rx_mode %i\n", __FUNCTION__, priv->rx_mode); if (priv->tsfeed || priv->secfeed || priv->secfilter || priv->multi_secfilter[0]) printk("%s: BUG %d\n", __FUNCTION__, __LINE__); @@ -883,51 +883,51 @@ static int dvb_net_feed_start(struct net_device *dev) priv->tsfeed = NULL; if (priv->feedtype == DVB_NET_FEEDTYPE_MPE) { - dprintk("%s: alloc secfeed\n", __FUNCTION__); - ret=demux->allocate_section_feed(demux, &priv->secfeed, + dprintk("%s: alloc secfeed\n", __FUNCTION__); + ret=demux->allocate_section_feed(demux, &priv->secfeed, dvb_net_sec_callback); - if (ret<0) { - printk("%s: could not allocate section feed\n", dev->name); - return ret; - } + if (ret<0) { + printk("%s: could not allocate section feed\n", dev->name); + return ret; + } - ret = priv->secfeed->set(priv->secfeed, priv->pid, 32768, 0, 1); + ret = priv->secfeed->set(priv->secfeed, priv->pid, 32768, 0, 1); - if (ret<0) { - printk("%s: could not set section feed\n", dev->name); - priv->demux->release_section_feed(priv->demux, priv->secfeed); - priv->secfeed=NULL; - return ret; - } + if (ret<0) { + printk("%s: could not set section feed\n", dev->name); + priv->demux->release_section_feed(priv->demux, priv->secfeed); + priv->secfeed=NULL; + return ret; + } - if (priv->rx_mode != RX_MODE_PROMISC) { - dprintk("%s: set secfilter\n", __FUNCTION__); + if (priv->rx_mode != RX_MODE_PROMISC) { + dprintk("%s: set secfilter\n", __FUNCTION__); dvb_net_filter_sec_set(dev, &priv->secfilter, mac, mask_normal); - } + } - switch (priv->rx_mode) { - case RX_MODE_MULTI: - for (i = 0; i < priv->multi_num; i++) { - dprintk("%s: set multi_secfilter[%d]\n", __FUNCTION__, i); + switch (priv->rx_mode) { + case RX_MODE_MULTI: + for (i = 0; i < priv->multi_num; i++) { + dprintk("%s: set multi_secfilter[%d]\n", __FUNCTION__, i); dvb_net_filter_sec_set(dev, &priv->multi_secfilter[i], - priv->multi_macs[i], mask_normal); - } - break; - case RX_MODE_ALL_MULTI: - priv->multi_num=1; - dprintk("%s: set multi_secfilter[0]\n", __FUNCTION__); + priv->multi_macs[i], mask_normal); + } + break; + case RX_MODE_ALL_MULTI: + priv->multi_num=1; + dprintk("%s: set multi_secfilter[0]\n", __FUNCTION__); dvb_net_filter_sec_set(dev, &priv->multi_secfilter[0], - mac_allmulti, mask_allmulti); - break; - case RX_MODE_PROMISC: - priv->multi_num=0; - dprintk("%s: set secfilter\n", __FUNCTION__); + mac_allmulti, mask_allmulti); + break; + case RX_MODE_PROMISC: + priv->multi_num=0; + dprintk("%s: set secfilter\n", __FUNCTION__); dvb_net_filter_sec_set(dev, &priv->secfilter, mac, mask_promisc); - break; - } - - dprintk("%s: start filtering\n", __FUNCTION__); - priv->secfeed->start_filtering(priv->secfeed); + break; + } + + dprintk("%s: start filtering\n", __FUNCTION__); + priv->secfeed->start_filtering(priv->secfeed); } else if (priv->feedtype == DVB_NET_FEEDTYPE_ULE) { struct timespec timeout = { 0, 30000000 }; // 30 msec @@ -970,33 +970,33 @@ static int dvb_net_feed_stop(struct net_device *dev) dprintk("%s\n", __FUNCTION__); if (priv->feedtype == DVB_NET_FEEDTYPE_MPE) { - if (priv->secfeed) { - if (priv->secfeed->is_filtering) { - dprintk("%s: stop secfeed\n", __FUNCTION__); - priv->secfeed->stop_filtering(priv->secfeed); - } + if (priv->secfeed) { + if (priv->secfeed->is_filtering) { + dprintk("%s: stop secfeed\n", __FUNCTION__); + priv->secfeed->stop_filtering(priv->secfeed); + } - if (priv->secfilter) { - dprintk("%s: release secfilter\n", __FUNCTION__); - priv->secfeed->release_filter(priv->secfeed, - priv->secfilter); - priv->secfilter=NULL; - } + if (priv->secfilter) { + dprintk("%s: release secfilter\n", __FUNCTION__); + priv->secfeed->release_filter(priv->secfeed, + priv->secfilter); + priv->secfilter=NULL; + } - for (i=0; i<priv->multi_num; i++) { - if (priv->multi_secfilter[i]) { + for (i=0; i<priv->multi_num; i++) { + if (priv->multi_secfilter[i]) { dprintk("%s: release multi_filter[%d]\n", __FUNCTION__, i); - priv->secfeed->release_filter(priv->secfeed, - priv->multi_secfilter[i]); - priv->multi_secfilter[i]=NULL; - } - } + priv->secfeed->release_filter(priv->secfeed, + priv->multi_secfilter[i]); + priv->multi_secfilter[i] = NULL; + } + } - priv->demux->release_section_feed(priv->demux, priv->secfeed); - priv->secfeed=NULL; - } else - printk("%s: no feed to stop\n", dev->name); + priv->demux->release_section_feed(priv->demux, priv->secfeed); + priv->secfeed = NULL; + } else + printk("%s: no feed to stop\n", dev->name); } else if (priv->feedtype == DVB_NET_FEEDTYPE_ULE) { if (priv->tsfeed) { if (priv->tsfeed->is_filtering) { @@ -1036,8 +1036,8 @@ static void wq_set_multicast_list (void *data) dvb_net_feed_stop(dev); priv->rx_mode = RX_MODE_UNI; - - if(dev->flags & IFF_PROMISC) { + + if (dev->flags & IFF_PROMISC) { dprintk("%s: promiscuous mode\n", dev->name); priv->rx_mode = RX_MODE_PROMISC; } else if ((dev->flags & IFF_ALLMULTI)) { @@ -1053,15 +1053,15 @@ static void wq_set_multicast_list (void *data) priv->rx_mode = RX_MODE_MULTI; priv->multi_num = 0; - for (mci = 0, mc=dev->mc_list; + for (mci = 0, mc=dev->mc_list; mci < dev->mc_count; mc = mc->next, mci++) { dvb_set_mc_filter(dev, mc); } } - dvb_net_feed_start(dev); - } + dvb_net_feed_start(dev); +} static void dvb_net_set_multicast_list (struct net_device *dev) @@ -1119,7 +1119,6 @@ static struct net_device_stats * dvb_net_get_stats(struct net_device *dev) return &((struct dvb_net_priv*) dev->priv)->stats; } - static void dvb_net_setup(struct net_device *dev) { ether_setup(dev); @@ -1133,7 +1132,6 @@ static void dvb_net_setup(struct net_device *dev) dev->mtu = 4096; dev->mc_count = 0; dev->hard_header_cache = NULL; - dev->flags |= IFF_NOARP; } @@ -1154,11 +1152,11 @@ static int get_if(struct dvb_net *dvbnet) static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid, u8 feedtype) { - struct net_device *net; + struct net_device *net; struct dvb_net_priv *priv; int result; int if_num; - + if (feedtype != DVB_NET_FEEDTYPE_MPE && feedtype != DVB_NET_FEEDTYPE_ULE) return -EINVAL; if ((if_num = get_if(dvbnet)) < 0) @@ -1167,7 +1165,7 @@ static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid, u8 feedtype) net = alloc_netdev(sizeof(struct dvb_net_priv), "dvb", dvb_net_setup); if (!net) return -ENOMEM; - + if (dvbnet->dvbdev->id) snprintf(net->name, IFNAMSIZ, "dvb%d%u%d", dvbnet->dvbdev->adapter->num, dvbnet->dvbdev->id, if_num); @@ -1176,14 +1174,14 @@ static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid, u8 feedtype) snprintf(net->name, IFNAMSIZ, "dvb%d_%d", dvbnet->dvbdev->adapter->num, if_num); - net->addr_len = 6; + net->addr_len = 6; memcpy(net->dev_addr, dvbnet->dvbdev->adapter->proposed_mac, 6); dvbnet->device[if_num] = net; - + priv = net->priv; - priv->demux = dvbnet->demux; - priv->pid = pid; + priv->demux = dvbnet->demux; + priv->pid = pid; priv->rx_mode = RX_MODE_UNI; priv->need_pusi = 1; priv->tscc = 0; @@ -1193,8 +1191,8 @@ static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid, u8 feedtype) INIT_WORK(&priv->set_multicast_list_wq, wq_set_multicast_list, net); INIT_WORK(&priv->restart_net_feed_wq, wq_restart_net_feed, net); - net->base_addr = pid; - + net->base_addr = pid; + if ((result = register_netdev(net)) < 0) { dvbnet->device[if_num] = NULL; free_netdev(net); @@ -1202,10 +1200,9 @@ static int dvb_net_add_if(struct dvb_net *dvbnet, u16 pid, u8 feedtype) } printk("dvb_net: created network interface %s\n", net->name); - return if_num; + return if_num; } - static int dvb_net_remove_if(struct dvb_net *dvbnet, unsigned int num) { struct net_device *net = dvbnet->device[num]; @@ -1220,7 +1217,7 @@ static int dvb_net_remove_if(struct dvb_net *dvbnet, unsigned int num) dvb_net_stop(net); flush_scheduled_work(); printk("dvb_net: removed network interface %s\n", net->name); - unregister_netdev(net); + unregister_netdev(net); dvbnet->state[num]=0; dvbnet->device[num] = NULL; free_netdev(net); @@ -1228,7 +1225,6 @@ static int dvb_net_remove_if(struct dvb_net *dvbnet, unsigned int num) return 0; } - static int dvb_net_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *parg) { @@ -1237,13 +1233,13 @@ static int dvb_net_do_ioctl(struct inode *inode, struct file *file, if (((file->f_flags&O_ACCMODE)==O_RDONLY)) return -EPERM; - + switch (cmd) { case NET_ADD_IF: { struct dvb_net_if *dvbnetif=(struct dvb_net_if *)parg; int result; - + if (!capable(CAP_SYS_ADMIN)) return -EPERM; @@ -1269,6 +1265,7 @@ static int dvb_net_do_ioctl(struct inode *inode, struct file *file, return -EINVAL; netdev = dvbnet->device[dvbnetif->if_num]; + priv_data=(struct dvb_net_priv*)netdev->priv; dvbnetif->pid=priv_data->pid; dvbnetif->feedtype=priv_data->feedtype; @@ -1316,9 +1313,10 @@ static int dvb_net_do_ioctl(struct inode *inode, struct file *file, if (dvbnetif->if_num >= DVB_NET_DEVICES_MAX || !dvbnet->state[dvbnetif->if_num]) - return -EINVAL; + return -EINVAL; netdev = dvbnet->device[dvbnetif->if_num]; + priv_data=(struct dvb_net_priv*)netdev->priv; dvbnetif->pid=priv_data->pid; break; @@ -1369,7 +1367,7 @@ int dvb_net_init (struct dvb_adapter *adap, struct dvb_net *dvbnet, struct dmx_demux *dmx) { int i; - + dvbnet->demux = dmx; for (i=0; i<DVB_NET_DEVICES_MAX; i++) diff --git a/drivers/media/dvb/dvb-core/dvb_net.h b/drivers/media/dvb/dvb-core/dvb_net.h index 5b701efe8e4d..f14e4ca38570 100644 --- a/drivers/media/dvb/dvb-core/dvb_net.h +++ b/drivers/media/dvb/dvb-core/dvb_net.h @@ -1,4 +1,4 @@ -/* +/* * dvb_net.h * * Copyright (C) 2001 Ralph Metzler for convergence integrated media GmbH @@ -44,4 +44,3 @@ void dvb_net_release(struct dvb_net *); int dvb_net_init(struct dvb_adapter *, struct dvb_net *, struct dmx_demux *); #endif - diff --git a/drivers/media/dvb/dvb-core/dvb_ringbuffer.c b/drivers/media/dvb/dvb-core/dvb_ringbuffer.c index fd04a1f3fb14..fb6d94a69d71 100644 --- a/drivers/media/dvb/dvb-core/dvb_ringbuffer.c +++ b/drivers/media/dvb/dvb-core/dvb_ringbuffer.c @@ -2,9 +2,9 @@ * * dvb_ringbuffer.c: ring buffer implementation for the dvb driver * - * Copyright (C) 2003 Oliver Endriss + * Copyright (C) 2003 Oliver Endriss * Copyright (C) 2004 Andrew de Quincey - * + * * based on code originally found in av7110.c & dvb_ci.c: * Copyright (C) 1999-2003 Ralph Metzler * & Marcus Metzler for convergence integrated media GmbH @@ -13,7 +13,7 @@ * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -63,7 +63,7 @@ int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf) ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf) { ssize_t free; - + free = rbuf->pread - rbuf->pwrite; if (free <= 0) free += rbuf->size; @@ -75,7 +75,7 @@ ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf) ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf) { ssize_t avail; - + avail = rbuf->pwrite - rbuf->pread; if (avail < 0) avail += rbuf->size; @@ -137,19 +137,19 @@ ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf, size_t { size_t todo = len; size_t split; - + split = (rbuf->pwrite + len > rbuf->size) ? rbuf->size - rbuf->pwrite : 0; if (split > 0) { - memcpy(rbuf->data+rbuf->pwrite, buf, split); + memcpy(rbuf->data+rbuf->pwrite, buf, split); buf += split; todo -= split; rbuf->pwrite = 0; } - memcpy(rbuf->data+rbuf->pwrite, buf, todo); + memcpy(rbuf->data+rbuf->pwrite, buf, todo); rbuf->pwrite = (rbuf->pwrite + todo) % rbuf->size; - return len; + return len; } ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf, size_t len) diff --git a/drivers/media/dvb/dvb-core/dvb_ringbuffer.h b/drivers/media/dvb/dvb-core/dvb_ringbuffer.h index c1ffa271f583..d18e9c4ba9ea 100644 --- a/drivers/media/dvb/dvb-core/dvb_ringbuffer.h +++ b/drivers/media/dvb/dvb-core/dvb_ringbuffer.h @@ -2,9 +2,9 @@ * * dvb_ringbuffer.h: ring buffer implementation for the dvb driver * - * Copyright (C) 2003 Oliver Endriss + * Copyright (C) 2003 Oliver Endriss * Copyright (C) 2004 Andrew de Quincey - * + * * based on code originally found in av7110.c & dvb_ci.c: * Copyright (C) 1999-2003 Ralph Metzler & Marcus Metzler * for convergence integrated media GmbH @@ -13,12 +13,12 @@ * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. - * + * * You should have received a copy of the GNU Lesser 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. @@ -52,7 +52,7 @@ struct dvb_ringbuffer { ** ** *** write <buflen> bytes *** ** free = dvb_ringbuffer_free(rbuf); -** if (free >= buflen) +** if (free >= buflen) ** count = dvb_ringbuffer_write(rbuf, buffer, buflen); ** else ** ... @@ -64,7 +64,7 @@ struct dvb_ringbuffer { ** else ** ... ** -** (2) If there is exactly one reader and one writer, there is no need +** (2) If there is exactly one reader and one writer, there is no need ** to lock read or write operations. ** Two or more readers must be locked against each other. ** Flushing the buffer counts as a read operation. @@ -99,13 +99,13 @@ extern void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf); /* advance read ptr by <num> bytes */ #define DVB_RINGBUFFER_SKIP(rbuf,num) \ (rbuf)->pread=((rbuf)->pread+(num))%(rbuf)->size - + /* -** read <len> bytes from ring buffer into <buf> +** read <len> bytes from ring buffer into <buf> ** <usermem> specifies whether <buf> resides in user space ** returns number of bytes transferred or -EFAULT */ -extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf, +extern ssize_t dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf, size_t len, int usermem); diff --git a/drivers/media/dvb/dvb-core/dvbdev.c b/drivers/media/dvb/dvb-core/dvbdev.c index 4032239b39d0..57cf77cf6774 100644 --- a/drivers/media/dvb/dvb-core/dvbdev.c +++ b/drivers/media/dvb/dvb-core/dvbdev.c @@ -1,4 +1,4 @@ -/* +/* * dvbdev.c * * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> @@ -51,7 +51,6 @@ static const char * const dnames[] = { "net", "osd" }; - #define DVB_MAX_IDS 6 #define nums2minor(num,type,id) ((num << 6) | (id << 4) | type) #define MAX_DVB_MINORS (DVB_MAX_IDS*64) @@ -82,7 +81,7 @@ static struct dvb_device* dvbdev_find_device (int minor) static int dvb_device_open(struct inode *inode, struct file *file) { struct dvb_device *dvbdev; - + dvbdev = dvbdev_find_device (iminor(inode)); if (dvbdev && dvbdev->fops) { @@ -111,7 +110,6 @@ static struct file_operations dvb_device_fops = .open = dvb_device_open, }; - static struct cdev dvb_device_cdev = { .kobj = {.name = "dvb", }, .owner = THIS_MODULE, @@ -166,7 +164,7 @@ int dvb_generic_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { struct dvb_device *dvbdev = file->private_data; - + if (!dvbdev) return -ENODEV; @@ -198,7 +196,7 @@ skip: } -int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev, +int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev, const struct dvb_device *template, void *priv, int type) { struct dvb_device *dvbdev; @@ -222,7 +220,7 @@ int dvb_register_device(struct dvb_adapter *adap, struct dvb_device **pdvbdev, } up (&dvbdev_register_lock); - + memcpy(dvbdev, template, sizeof(struct dvb_device)); dvbdev->type = type; dvbdev->id = id; @@ -254,15 +252,15 @@ void dvb_unregister_device(struct dvb_device *dvbdev) if (!dvbdev) return; - devfs_remove("dvb/adapter%d/%s%d", dvbdev->adapter->num, - dnames[dvbdev->type], dvbdev->id); + devfs_remove("dvb/adapter%d/%s%d", dvbdev->adapter->num, + dnames[dvbdev->type], dvbdev->id); class_simple_device_remove(MKDEV(DVB_MAJOR, nums2minor(dvbdev->adapter->num, dvbdev->type, dvbdev->id))); - list_del(&dvbdev->list_head); - kfree(dvbdev); - } + list_del (&dvbdev->list_head); + kfree (dvbdev); +} EXPORT_SYMBOL(dvb_unregister_device); @@ -309,9 +307,8 @@ int dvb_register_adapter(struct dvb_adapter **padap, const char *name, struct mo INIT_LIST_HEAD (&adap->device_list); printk ("DVB: registering new adapter (%s).\n", name); - - devfs_mk_dir("dvb/adapter%d", num); + devfs_mk_dir("dvb/adapter%d", num); adap->num = num; adap->name = name; adap->module = module; @@ -451,4 +448,3 @@ module_exit(exit_dvbdev); MODULE_DESCRIPTION("DVB Core Driver"); MODULE_AUTHOR("Marcus Metzler, Ralph Metzler, Holger Waechtler"); MODULE_LICENSE("GPL"); - diff --git a/drivers/media/dvb/dvb-core/dvbdev.h b/drivers/media/dvb/dvb-core/dvbdev.h index 333ada77ce7b..184edba3caa7 100644 --- a/drivers/media/dvb/dvb-core/dvbdev.h +++ b/drivers/media/dvb/dvb-core/dvbdev.h @@ -1,4 +1,4 @@ -/* +/* * dvbdev.h * * Copyright (C) 2000 Ralph Metzler & Marcus Metzler @@ -58,9 +58,6 @@ struct dvb_adapter { struct dvb_device { struct list_head list_head; struct file_operations *fops; - - - struct dvb_adapter *adapter; int type; u32 id; @@ -83,7 +80,7 @@ extern int dvb_register_adapter (struct dvb_adapter **padap, const char *name, s extern int dvb_unregister_adapter (struct dvb_adapter *adap); extern int dvb_register_device (struct dvb_adapter *adap, - struct dvb_device **pdvbdev, + struct dvb_device **pdvbdev, const struct dvb_device *template, void *priv, int type); @@ -105,4 +102,3 @@ extern int dvb_usercopy(struct inode *inode, struct file *file, unsigned int cmd, void *arg)); #endif /* #ifndef _DVBDEV_H_ */ - diff --git a/drivers/media/dvb/frontends/at76c651.c b/drivers/media/dvb/frontends/at76c651.c index 4b6c539a0d67..861876791876 100644 --- a/drivers/media/dvb/frontends/at76c651.c +++ b/drivers/media/dvb/frontends/at76c651.c @@ -1,6 +1,6 @@ /* * at76c651.c - * + * * Atmel DVB-C Frontend Driver (at76c651/tua6010xs) * * Copyright (C) 2001 fnbrd <fnbrd@gmx.de> @@ -150,7 +150,7 @@ static int at76c651_set_auto_config(struct at76c651_state *state) if (state->revision == 0x11) { at76c651_writereg(state, 0x2E, 0x38); at76c651_writereg(state, 0x2F, 0x13); -} + } at76c651_disable_interrupts(state); @@ -255,16 +255,8 @@ static int at76c651_set_inversion(struct at76c651_state* state, fe_spectral_inve return at76c651_writereg(state, 0x60, feciqinv); } - - - - - - - - static int at76c651_set_parameters(struct dvb_frontend* fe, - struct dvb_frontend_parameters *p) + struct dvb_frontend_parameters *p) { int ret; struct at76c651_state* state = (struct at76c651_state*) fe->demodulator_priv; @@ -295,54 +287,50 @@ static int at76c651_set_defaults(struct dvb_frontend* fe) at76c651_writereg(state, 0x0c, 0xc3); state->config->pll_init(fe); at76c651_writereg(state, 0x0c, 0xc2); -} + } return 0; } static int at76c651_read_status(struct dvb_frontend* fe, fe_status_t* status) - { +{ struct at76c651_state* state = (struct at76c651_state*) fe->demodulator_priv; - u8 sync; + u8 sync; - /* - * Bits: FEC, CAR, EQU, TIM, AGC2, AGC1, ADC, PLL (PLL=0) - */ + /* + * Bits: FEC, CAR, EQU, TIM, AGC2, AGC1, ADC, PLL (PLL=0) + */ sync = at76c651_readreg(state, 0x80); - *status = 0; - - if (sync & (0x04 | 0x10)) /* AGC1 || TIM */ - *status |= FE_HAS_SIGNAL; - - if (sync & 0x10) /* TIM */ - *status |= FE_HAS_CARRIER; - - if (sync & 0x80) /* FEC */ - *status |= FE_HAS_VITERBI; - - if (sync & 0x40) /* CAR */ - *status |= FE_HAS_SYNC; - - if ((sync & 0xF0) == 0xF0) /* TIM && EQU && CAR && FEC */ - *status |= FE_HAS_LOCK; + *status = 0; + + if (sync & (0x04 | 0x10)) /* AGC1 || TIM */ + *status |= FE_HAS_SIGNAL; + if (sync & 0x10) /* TIM */ + *status |= FE_HAS_CARRIER; + if (sync & 0x80) /* FEC */ + *status |= FE_HAS_VITERBI; + if (sync & 0x40) /* CAR */ + *status |= FE_HAS_SYNC; + if ((sync & 0xF0) == 0xF0) /* TIM && EQU && CAR && FEC */ + *status |= FE_HAS_LOCK; return 0; - } +} static int at76c651_read_ber(struct dvb_frontend* fe, u32* ber) - { +{ struct at76c651_state* state = (struct at76c651_state*) fe->demodulator_priv; *ber = (at76c651_readreg(state, 0x81) & 0x0F) << 16; *ber |= at76c651_readreg(state, 0x82) << 8; *ber |= at76c651_readreg(state, 0x83); - *ber *= 10; + *ber *= 10; return 0; - } +} static int at76c651_read_signal_strength(struct dvb_frontend* fe, u16* strength) - { +{ struct at76c651_state* state = (struct at76c651_state*) fe->demodulator_priv; u8 gain = ~at76c651_readreg(state, 0x91); @@ -359,12 +347,11 @@ static int at76c651_read_snr(struct dvb_frontend* fe, u16* snr) ((at76c651_readreg(state, 0x8F) << 8) | at76c651_readreg(state, 0x90)); - return 0; } static int at76c651_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) - { +{ struct at76c651_state* state = (struct at76c651_state*) fe->demodulator_priv; *ucblocks = at76c651_readreg(state, 0x82); @@ -378,13 +365,13 @@ static int at76c651_get_tune_settings(struct dvb_frontend* fe, struct dvb_fronte fesettings->step_size = 0; fesettings->max_drift = 0; return 0; - } +} static void at76c651_release(struct dvb_frontend* fe) { struct at76c651_state* state = (struct at76c651_state*) fe->demodulator_priv; - kfree(state); - } + kfree(state); +} static struct dvb_frontend_ops at76c651_ops; diff --git a/drivers/media/dvb/frontends/cx22700.c b/drivers/media/dvb/frontends/cx22700.c index cddfe05a8686..663002da331f 100644 --- a/drivers/media/dvb/frontends/cx22700.c +++ b/drivers/media/dvb/frontends/cx22700.c @@ -230,16 +230,6 @@ static int cx22700_get_tps (struct cx22700_state* state, struct dvb_ofdm_paramet return 0; } - - - - - - - - - - static int cx22700_init (struct dvb_frontend* fe) { struct cx22700_state* state = (struct cx22700_state*) fe->demodulator_priv; @@ -409,11 +399,11 @@ error: static struct dvb_frontend_ops cx22700_ops = { .info = { - .name = "Conexant CX22700 DVB-T", - .type = FE_OFDM, - .frequency_min = 470000000, - .frequency_max = 860000000, - .frequency_stepsize = 166667, + .name = "Conexant CX22700 DVB-T", + .type = FE_OFDM, + .frequency_min = 470000000, + .frequency_max = 860000000, + .frequency_stepsize = 166667, .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | diff --git a/drivers/media/dvb/frontends/cx22702.c b/drivers/media/dvb/frontends/cx22702.c index 15ae90316c1f..7bcff1c62da6 100644 --- a/drivers/media/dvb/frontends/cx22702.c +++ b/drivers/media/dvb/frontends/cx22702.c @@ -186,7 +186,7 @@ static int cx22702_get_tps (struct cx22702_state *state, struct dvb_ofdm_paramet case 1: p->guard_interval = GUARD_INTERVAL_1_16; break; case 2: p->guard_interval = GUARD_INTERVAL_1_8; break; case 3: p->guard_interval = GUARD_INTERVAL_1_4; break; -} + } switch( val&0x03 ) { case 0: p->transmission_mode = TRANSMISSION_MODE_2K; break; case 1: p->transmission_mode = TRANSMISSION_MODE_8K; break; @@ -195,18 +195,6 @@ static int cx22702_get_tps (struct cx22702_state *state, struct dvb_ofdm_paramet return 0; } - - - - - - - - - - - - /* Talk to the demod, set the FEC, GUARD, QAM settings etc */ static int cx22702_set_tps (struct dvb_frontend* fe, struct dvb_frontend_parameters *p) { @@ -259,7 +247,7 @@ static int cx22702_set_tps (struct dvb_frontend* fe, struct dvb_frontend_paramet return 0; } - /* manually programmed values */ + /* manually programmed values */ val=0; switch(p->u.ofdm.constellation) { case QPSK: val = (val&0xe7); break; @@ -332,7 +320,6 @@ static int cx22702_set_tps (struct dvb_frontend* fe, struct dvb_frontend_paramet return 0; } - /* Reset the demod hardware and reset all of the configuration registers to a default state. */ static int cx22702_init (struct dvb_frontend* fe) @@ -364,48 +351,48 @@ static int cx22702_read_status(struct dvb_frontend* fe, fe_status_t* status) u8 reg0A; u8 reg23; - *status = 0; + *status = 0; reg0A = cx22702_readreg (state, 0x0A); reg23 = cx22702_readreg (state, 0x23); - dprintk ("%s: status demod=0x%02x agc=0x%02x\n" - ,__FUNCTION__,reg0A,reg23); + dprintk ("%s: status demod=0x%02x agc=0x%02x\n" + ,__FUNCTION__,reg0A,reg23); - if(reg0A & 0x10) { - *status |= FE_HAS_LOCK; - *status |= FE_HAS_VITERBI; - *status |= FE_HAS_SYNC; - } + if(reg0A & 0x10) { + *status |= FE_HAS_LOCK; + *status |= FE_HAS_VITERBI; + *status |= FE_HAS_SYNC; + } - if(reg0A & 0x20) - *status |= FE_HAS_CARRIER; + if(reg0A & 0x20) + *status |= FE_HAS_CARRIER; - if(reg23 < 0xf0) - *status |= FE_HAS_SIGNAL; + if(reg23 < 0xf0) + *status |= FE_HAS_SIGNAL; return 0; - } +} static int cx22702_read_ber(struct dvb_frontend* fe, u32* ber) - { +{ struct cx22702_state* state = (struct cx22702_state*) fe->demodulator_priv; if(cx22702_readreg (state, 0xE4) & 0x02) { - /* Realtime statistics */ + /* Realtime statistics */ *ber = (cx22702_readreg (state, 0xDE) & 0x7F) << 7 | (cx22702_readreg (state, 0xDF)&0x7F); - } else { + } else { /* Averagtine statistics */ *ber = (cx22702_readreg (state, 0xDE) & 0x7F) << 7 | cx22702_readreg (state, 0xDF); - } + } return 0; - } +} static int cx22702_read_signal_strength(struct dvb_frontend* fe, u16* signal_strength) - { +{ struct cx22702_state* state = (struct cx22702_state*) fe->demodulator_priv; *signal_strength = cx22702_readreg (state, 0x23); @@ -460,8 +447,8 @@ static int cx22702_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_par static void cx22702_release(struct dvb_frontend* fe) { struct cx22702_state* state = (struct cx22702_state*) fe->demodulator_priv; - kfree(state); - } + kfree(state); +} static struct dvb_frontend_ops cx22702_ops; diff --git a/drivers/media/dvb/frontends/cx24110.c b/drivers/media/dvb/frontends/cx24110.c index f8d5ec9ea11f..4bbffaae275c 100644 --- a/drivers/media/dvb/frontends/cx24110.c +++ b/drivers/media/dvb/frontends/cx24110.c @@ -131,7 +131,6 @@ static int cx24110_writereg (struct cx24110_state* state, int reg, int data) return 0; } - static int cx24110_readreg (struct cx24110_state* state, u8 reg) { int ret; @@ -181,7 +180,6 @@ static int cx24110_set_inversion (struct cx24110_state* state, fe_spectral_inver return 0; } - static int cx24110_set_fec (struct cx24110_state* state, fe_code_rate_t fec) { /* fixme (low): error handling */ @@ -227,7 +225,6 @@ static int cx24110_set_fec (struct cx24110_state* state, fe_code_rate_t fec) return 0; } - static fe_code_rate_t cx24110_get_fec (struct cx24110_state* state) { int i; @@ -244,7 +241,6 @@ static fe_code_rate_t cx24110_get_fec (struct cx24110_state* state) } } - static int cx24110_set_symbolrate (struct cx24110_state* state, u32 srate) { /* fixme (low): add error handling */ @@ -317,17 +313,6 @@ dprintk("cx24110 debug: entering %s(%d)\n",__FUNCTION__,srate); } - - - - - - - - - - - int cx24110_pll_write (struct dvb_frontend* fe, u32 data) { struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; @@ -369,8 +354,6 @@ int cx24110_pll_write (struct dvb_frontend* fe, u32 data) return 0; } - - static int cx24110_initfe(struct dvb_frontend* fe) { struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; @@ -388,7 +371,6 @@ static int cx24110_initfe(struct dvb_frontend* fe) return 0; } - static int cx24110_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltage) { struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; @@ -404,7 +386,7 @@ static int cx24110_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltag } static int cx24110_send_diseqc_msg(struct dvb_frontend* fe, - struct dvb_diseqc_master_cmd *cmd) + struct dvb_diseqc_master_cmd *cmd) { int i, rv; struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; @@ -427,33 +409,33 @@ static int cx24110_read_status(struct dvb_frontend* fe, fe_status_t* status) int sync = cx24110_readreg (state, 0x55); - *status = 0; + *status = 0; - if (sync & 0x10) - *status |= FE_HAS_SIGNAL; + if (sync & 0x10) + *status |= FE_HAS_SIGNAL; - if (sync & 0x08) - *status |= FE_HAS_CARRIER; + if (sync & 0x08) + *status |= FE_HAS_CARRIER; sync = cx24110_readreg (state, 0x08); - if (sync & 0x40) - *status |= FE_HAS_VITERBI; + if (sync & 0x40) + *status |= FE_HAS_VITERBI; - if (sync & 0x20) - *status |= FE_HAS_SYNC; + if (sync & 0x20) + *status |= FE_HAS_SYNC; - if ((sync & 0x60) == 0x60) - *status |= FE_HAS_LOCK; + if ((sync & 0x60) == 0x60) + *status |= FE_HAS_LOCK; return 0; - } +} static int cx24110_read_ber(struct dvb_frontend* fe, u32* ber) - { +{ struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; -/* fixme (maybe): value range is 16 bit. Scale? */ + /* fixme (maybe): value range is 16 bit. Scale? */ if(cx24110_readreg(state,0x24)&0x10) { /* the Viterbi error counter has finished one counting window */ cx24110_writereg(state,0x24,0x04); /* select the ber reg */ @@ -465,10 +447,10 @@ static int cx24110_read_ber(struct dvb_frontend* fe, u32* ber) *ber = state->lastber; return 0; - } +} static int cx24110_read_signal_strength(struct dvb_frontend* fe, u16* signal_strength) - { +{ struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; /* no provision in hardware. Read the frontend AGC accumulator. No idea how to scale this, but I know it is 2s complement */ @@ -476,13 +458,13 @@ static int cx24110_read_signal_strength(struct dvb_frontend* fe, u16* signal_str *signal_strength = (signal << 8) | signal; return 0; - } +} static int cx24110_read_snr(struct dvb_frontend* fe, u16* snr) - { +{ struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; -/* no provision in hardware. Can be computed from the Es/N0 estimator, but I don't know how. */ + /* no provision in hardware. Can be computed from the Es/N0 estimator, but I don't know how. */ if(cx24110_readreg(state,0x6a)&0x80) { /* the Es/N0 error counter has finished one counting window */ state->lastesn0=cx24110_readreg(state,0x69)| @@ -492,10 +474,10 @@ static int cx24110_read_snr(struct dvb_frontend* fe, u16* snr) *snr = state->lastesn0; return 0; - } +} static int cx24110_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) - { +{ struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; u32 lastbyer; @@ -517,7 +499,7 @@ static int cx24110_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) } static int cx24110_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) - { +{ struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; state->config->pll_set(fe, p); @@ -527,38 +509,38 @@ static int cx24110_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_par cx24110_writereg(state,0x04,0x05); /* start aquisition */ return 0; - } +} static int cx24110_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) - { - struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; - s32 afc; unsigned sclk; +{ + struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; + s32 afc; unsigned sclk; /* cannot read back tuner settings (freq). Need to have some private storage */ sclk = cx24110_readreg (state, 0x07) & 0x03; /* ok, real AFC (FEDR) freq. is afc/2^24*fsamp, fsamp=45/60/80/90MHz. * Need 64 bit arithmetic. Is thiss possible in the kernel? */ - if (sclk==0) sclk=90999000L/2L; - else if (sclk==1) sclk=60666000L; - else if (sclk==2) sclk=80888000L; - else sclk=90999000L; - sclk>>=8; + if (sclk==0) sclk=90999000L/2L; + else if (sclk==1) sclk=60666000L; + else if (sclk==2) sclk=80888000L; + else sclk=90999000L; + sclk>>=8; afc = sclk*(cx24110_readreg (state, 0x44)&0x1f)+ ((sclk*cx24110_readreg (state, 0x45))>>8)+ ((sclk*cx24110_readreg (state, 0x46))>>16); - p->frequency += afc; + p->frequency += afc; p->inversion = (cx24110_readreg (state, 0x22) & 0x10) ? - INVERSION_ON : INVERSION_OFF; + INVERSION_ON : INVERSION_OFF; p->u.qpsk.fec_inner = cx24110_get_fec (state); - return 0; + return 0; } static int cx24110_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone) { - struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; + struct cx24110_state *state = (struct cx24110_state*) fe->demodulator_priv; return cx24110_writereg(state,0x76,(cx24110_readreg(state,0x76)&~0x10)|(((tone==SEC_TONE_ON))?0x10:0)); } @@ -566,7 +548,7 @@ static int cx24110_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone) static void cx24110_release(struct dvb_frontend* fe) { struct cx24110_state* state = (struct cx24110_state*) fe->demodulator_priv; - kfree(state); + kfree(state); } static struct dvb_frontend_ops cx24110_ops; @@ -587,7 +569,7 @@ struct dvb_frontend* cx24110_attach(const struct cx24110_config* config, memcpy(&state->ops, &cx24110_ops, sizeof(struct dvb_frontend_ops)); state->lastber = 0; state->lastbler = 0; - state->lastesn0 = 0; + state->lastesn0 = 0; /* check if the demod is there */ ret = cx24110_readreg(state, 0x00); diff --git a/drivers/media/dvb/frontends/dib3000mb.c b/drivers/media/dvb/frontends/dib3000mb.c index 041349789c31..9a3ec4394814 100644 --- a/drivers/media/dvb/frontends/dib3000mb.c +++ b/drivers/media/dvb/frontends/dib3000mb.c @@ -54,12 +54,12 @@ static int dib3000mb_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *fep); static int dib3000mb_set_frontend(struct dvb_frontend* fe, - struct dvb_frontend_parameters *fep, int tuner) + struct dvb_frontend_parameters *fep, int tuner) { struct dib3000_state* state = (struct dib3000_state*) fe->demodulator_priv; struct dvb_ofdm_parameters *ofdm = &fep->u.ofdm; fe_code_rate_t fe_cr = FEC_NONE; - int search_state,seq; + int search_state, seq; if (tuner) { dib3000mb_tuner_pass_ctrl(fe,1,state->config.pll_addr(fe)); @@ -70,18 +70,18 @@ static int dib3000mb_set_frontend(struct dvb_frontend* fe, switch (ofdm->bandwidth) { case BANDWIDTH_8_MHZ: deb_setf("8 MHz\n"); - wr_foreach(dib3000mb_reg_timing_freq,dib3000mb_timing_freq[2]); - wr_foreach(dib3000mb_reg_bandwidth,dib3000mb_bandwidth_8mhz); + wr_foreach(dib3000mb_reg_timing_freq, dib3000mb_timing_freq[2]); + wr_foreach(dib3000mb_reg_bandwidth, dib3000mb_bandwidth_8mhz); break; case BANDWIDTH_7_MHZ: deb_setf("7 MHz\n"); - wr_foreach(dib3000mb_reg_timing_freq,dib3000mb_timing_freq[1]); - wr_foreach(dib3000mb_reg_bandwidth,dib3000mb_bandwidth_7mhz); + wr_foreach(dib3000mb_reg_timing_freq, dib3000mb_timing_freq[1]); + wr_foreach(dib3000mb_reg_bandwidth, dib3000mb_bandwidth_7mhz); break; case BANDWIDTH_6_MHZ: deb_setf("6 MHz\n"); - wr_foreach(dib3000mb_reg_timing_freq,dib3000mb_timing_freq[0]); - wr_foreach(dib3000mb_reg_bandwidth,dib3000mb_bandwidth_6mhz); + wr_foreach(dib3000mb_reg_timing_freq, dib3000mb_timing_freq[0]); + wr_foreach(dib3000mb_reg_bandwidth, dib3000mb_bandwidth_6mhz); break; case BANDWIDTH_AUTO: return -EOPNOTSUPP; @@ -90,7 +90,7 @@ static int dib3000mb_set_frontend(struct dvb_frontend* fe, return -EINVAL; } } - wr(DIB3000MB_REG_LOCK1_MASK,DIB3000MB_LOCK1_SEARCH_4); + wr(DIB3000MB_REG_LOCK1_MASK, DIB3000MB_LOCK1_SEARCH_4); deb_setf("transmission mode: "); switch (ofdm->transmission_mode) { @@ -170,25 +170,25 @@ static int dib3000mb_set_frontend(struct dvb_frontend* fe, default: return -EINVAL; } - deb_setf("hierachy: "); + deb_setf("hierachy: "); switch (ofdm->hierarchy_information) { case HIERARCHY_NONE: deb_setf("none "); /* fall through */ case HIERARCHY_1: - deb_setf("alpha=1\n"); + deb_setf("alpha=1\n"); wr(DIB3000MB_REG_VIT_ALPHA, DIB3000_ALPHA_1); break; case HIERARCHY_2: - deb_setf("alpha=2\n"); + deb_setf("alpha=2\n"); wr(DIB3000MB_REG_VIT_ALPHA, DIB3000_ALPHA_2); break; case HIERARCHY_4: - deb_setf("alpha=4\n"); + deb_setf("alpha=4\n"); wr(DIB3000MB_REG_VIT_ALPHA, DIB3000_ALPHA_4); break; case HIERARCHY_AUTO: - deb_setf("alpha=auto\n"); + deb_setf("alpha=auto\n"); break; default: return -EINVAL; @@ -243,39 +243,39 @@ static int dib3000mb_set_frontend(struct dvb_frontend* fe, [ofdm->guard_interval == GUARD_INTERVAL_AUTO] [fep->inversion == INVERSION_AUTO]; - deb_setf("seq? %d\n",seq); + deb_setf("seq? %d\n", seq); - wr(DIB3000MB_REG_SEQ,seq); + wr(DIB3000MB_REG_SEQ, seq); - wr(DIB3000MB_REG_ISI,seq ? DIB3000MB_ISI_INHIBIT : DIB3000MB_ISI_ACTIVATE); + wr(DIB3000MB_REG_ISI, seq ? DIB3000MB_ISI_INHIBIT : DIB3000MB_ISI_ACTIVATE); if (ofdm->transmission_mode == TRANSMISSION_MODE_2K) { if (ofdm->guard_interval == GUARD_INTERVAL_1_8) { - wr(DIB3000MB_REG_SYNC_IMPROVEMENT,DIB3000MB_SYNC_IMPROVE_2K_1_8); + wr(DIB3000MB_REG_SYNC_IMPROVEMENT, DIB3000MB_SYNC_IMPROVE_2K_1_8); } else { - wr(DIB3000MB_REG_SYNC_IMPROVEMENT,DIB3000MB_SYNC_IMPROVE_DEFAULT); + wr(DIB3000MB_REG_SYNC_IMPROVEMENT, DIB3000MB_SYNC_IMPROVE_DEFAULT); } - wr(DIB3000MB_REG_UNK_121,DIB3000MB_UNK_121_2K); + wr(DIB3000MB_REG_UNK_121, DIB3000MB_UNK_121_2K); } else { - wr(DIB3000MB_REG_UNK_121,DIB3000MB_UNK_121_DEFAULT); + wr(DIB3000MB_REG_UNK_121, DIB3000MB_UNK_121_DEFAULT); } - wr(DIB3000MB_REG_MOBILE_ALGO,DIB3000MB_MOBILE_ALGO_OFF); - wr(DIB3000MB_REG_MOBILE_MODE_QAM,DIB3000MB_MOBILE_MODE_QAM_OFF); - wr(DIB3000MB_REG_MOBILE_MODE,DIB3000MB_MOBILE_MODE_OFF); + wr(DIB3000MB_REG_MOBILE_ALGO, DIB3000MB_MOBILE_ALGO_OFF); + wr(DIB3000MB_REG_MOBILE_MODE_QAM, DIB3000MB_MOBILE_MODE_QAM_OFF); + wr(DIB3000MB_REG_MOBILE_MODE, DIB3000MB_MOBILE_MODE_OFF); - wr_foreach(dib3000mb_reg_agc_bandwidth,dib3000mb_agc_bandwidth_high); + wr_foreach(dib3000mb_reg_agc_bandwidth, dib3000mb_agc_bandwidth_high); - wr(DIB3000MB_REG_ISI,DIB3000MB_ISI_ACTIVATE); + wr(DIB3000MB_REG_ISI, DIB3000MB_ISI_ACTIVATE); - wr(DIB3000MB_REG_RESTART,DIB3000MB_RESTART_AGC+DIB3000MB_RESTART_CTRL); - wr(DIB3000MB_REG_RESTART,DIB3000MB_RESTART_OFF); + wr(DIB3000MB_REG_RESTART, DIB3000MB_RESTART_AGC + DIB3000MB_RESTART_CTRL); + wr(DIB3000MB_REG_RESTART, DIB3000MB_RESTART_OFF); /* wait for AGC lock */ msleep(70); - wr_foreach(dib3000mb_reg_agc_bandwidth,dib3000mb_agc_bandwidth_low); + wr_foreach(dib3000mb_reg_agc_bandwidth, dib3000mb_agc_bandwidth_low); /* something has to be auto searched */ if (ofdm->constellation == QAM_AUTO || @@ -284,12 +284,12 @@ static int dib3000mb_set_frontend(struct dvb_frontend* fe, fep->inversion == INVERSION_AUTO) { int as_count=0; - deb_setf("autosearch enabled.\n"); + deb_setf("autosearch enabled.\n"); - wr(DIB3000MB_REG_ISI,DIB3000MB_ISI_INHIBIT); + wr(DIB3000MB_REG_ISI, DIB3000MB_ISI_INHIBIT); - wr(DIB3000MB_REG_RESTART,DIB3000MB_RESTART_AUTO_SEARCH); - wr(DIB3000MB_REG_RESTART,DIB3000MB_RESTART_OFF); + wr(DIB3000MB_REG_RESTART, DIB3000MB_RESTART_AUTO_SEARCH); + wr(DIB3000MB_REG_RESTART, DIB3000MB_RESTART_OFF); while ((search_state = dib3000_search_status( @@ -308,8 +308,8 @@ static int dib3000mb_set_frontend(struct dvb_frontend* fe, } } else { - wr(DIB3000MB_REG_RESTART,DIB3000MB_RESTART_CTRL); - wr(DIB3000MB_REG_RESTART,DIB3000MB_RESTART_OFF); + wr(DIB3000MB_REG_RESTART, DIB3000MB_RESTART_CTRL); + wr(DIB3000MB_REG_RESTART, DIB3000MB_RESTART_OFF); } return 0; @@ -319,74 +319,74 @@ static int dib3000mb_fe_init(struct dvb_frontend* fe, int mobile_mode) { struct dib3000_state* state = (struct dib3000_state*) fe->demodulator_priv; - wr(DIB3000MB_REG_POWER_CONTROL,DIB3000MB_POWER_UP); + wr(DIB3000MB_REG_POWER_CONTROL, DIB3000MB_POWER_UP); wr(DIB3000MB_REG_RESTART, DIB3000MB_RESTART_AGC); - wr(DIB3000MB_REG_RESET_DEVICE,DIB3000MB_RESET_DEVICE); - wr(DIB3000MB_REG_RESET_DEVICE,DIB3000MB_RESET_DEVICE_RST); + wr(DIB3000MB_REG_RESET_DEVICE, DIB3000MB_RESET_DEVICE); + wr(DIB3000MB_REG_RESET_DEVICE, DIB3000MB_RESET_DEVICE_RST); - wr(DIB3000MB_REG_CLOCK,DIB3000MB_CLOCK_DEFAULT); + wr(DIB3000MB_REG_CLOCK, DIB3000MB_CLOCK_DEFAULT); - wr(DIB3000MB_REG_ELECT_OUT_MODE,DIB3000MB_ELECT_OUT_MODE_ON); + wr(DIB3000MB_REG_ELECT_OUT_MODE, DIB3000MB_ELECT_OUT_MODE_ON); - wr(DIB3000MB_REG_DDS_FREQ_MSB,DIB3000MB_DDS_FREQ_MSB); - wr(DIB3000MB_REG_DDS_FREQ_LSB,DIB3000MB_DDS_FREQ_LSB); + wr(DIB3000MB_REG_DDS_FREQ_MSB, DIB3000MB_DDS_FREQ_MSB); + wr(DIB3000MB_REG_DDS_FREQ_LSB, DIB3000MB_DDS_FREQ_LSB); - wr_foreach(dib3000mb_reg_timing_freq,dib3000mb_timing_freq[2]); + wr_foreach(dib3000mb_reg_timing_freq, dib3000mb_timing_freq[2]); wr_foreach(dib3000mb_reg_impulse_noise, dib3000mb_impulse_noise_values[DIB3000MB_IMPNOISE_OFF]); - wr_foreach(dib3000mb_reg_agc_gain,dib3000mb_default_agc_gain); + wr_foreach(dib3000mb_reg_agc_gain, dib3000mb_default_agc_gain); - wr(DIB3000MB_REG_PHASE_NOISE,DIB3000MB_PHASE_NOISE_DEFAULT); + wr(DIB3000MB_REG_PHASE_NOISE, DIB3000MB_PHASE_NOISE_DEFAULT); wr_foreach(dib3000mb_reg_phase_noise, dib3000mb_default_noise_phase); - wr_foreach(dib3000mb_reg_lock_duration,dib3000mb_default_lock_duration); + wr_foreach(dib3000mb_reg_lock_duration, dib3000mb_default_lock_duration); - wr_foreach(dib3000mb_reg_agc_bandwidth,dib3000mb_agc_bandwidth_low); + wr_foreach(dib3000mb_reg_agc_bandwidth, dib3000mb_agc_bandwidth_low); - wr(DIB3000MB_REG_LOCK0_MASK,DIB3000MB_LOCK0_DEFAULT); - wr(DIB3000MB_REG_LOCK1_MASK,DIB3000MB_LOCK1_SEARCH_4); - wr(DIB3000MB_REG_LOCK2_MASK,DIB3000MB_LOCK2_DEFAULT); + wr(DIB3000MB_REG_LOCK0_MASK, DIB3000MB_LOCK0_DEFAULT); + wr(DIB3000MB_REG_LOCK1_MASK, DIB3000MB_LOCK1_SEARCH_4); + wr(DIB3000MB_REG_LOCK2_MASK, DIB3000MB_LOCK2_DEFAULT); wr(DIB3000MB_REG_SEQ, dib3000_seq[1][1][1]); - wr_foreach(dib3000mb_reg_bandwidth,dib3000mb_bandwidth_8mhz); - - wr(DIB3000MB_REG_UNK_68,DIB3000MB_UNK_68); - wr(DIB3000MB_REG_UNK_69,DIB3000MB_UNK_69); - wr(DIB3000MB_REG_UNK_71,DIB3000MB_UNK_71); - wr(DIB3000MB_REG_UNK_77,DIB3000MB_UNK_77); - wr(DIB3000MB_REG_UNK_78,DIB3000MB_UNK_78); - wr(DIB3000MB_REG_ISI,DIB3000MB_ISI_INHIBIT); - wr(DIB3000MB_REG_UNK_92,DIB3000MB_UNK_92); - wr(DIB3000MB_REG_UNK_96,DIB3000MB_UNK_96); - wr(DIB3000MB_REG_UNK_97,DIB3000MB_UNK_97); - wr(DIB3000MB_REG_UNK_106,DIB3000MB_UNK_106); - wr(DIB3000MB_REG_UNK_107,DIB3000MB_UNK_107); - wr(DIB3000MB_REG_UNK_108,DIB3000MB_UNK_108); - wr(DIB3000MB_REG_UNK_122,DIB3000MB_UNK_122); - wr(DIB3000MB_REG_MOBILE_MODE_QAM,DIB3000MB_MOBILE_MODE_QAM_OFF); - wr(DIB3000MB_REG_BERLEN,DIB3000MB_BERLEN_DEFAULT); - - wr_foreach(dib3000mb_reg_filter_coeffs,dib3000mb_filter_coeffs); - - wr(DIB3000MB_REG_MOBILE_ALGO,DIB3000MB_MOBILE_ALGO_ON); - wr(DIB3000MB_REG_MULTI_DEMOD_MSB,DIB3000MB_MULTI_DEMOD_MSB); - wr(DIB3000MB_REG_MULTI_DEMOD_LSB,DIB3000MB_MULTI_DEMOD_LSB); - - wr(DIB3000MB_REG_OUTPUT_MODE,DIB3000MB_OUTPUT_MODE_SLAVE); - - wr(DIB3000MB_REG_FIFO_142,DIB3000MB_FIFO_142); - wr(DIB3000MB_REG_MPEG2_OUT_MODE,DIB3000MB_MPEG2_OUT_MODE_188); + wr_foreach(dib3000mb_reg_bandwidth, dib3000mb_bandwidth_8mhz); + + wr(DIB3000MB_REG_UNK_68, DIB3000MB_UNK_68); + wr(DIB3000MB_REG_UNK_69, DIB3000MB_UNK_69); + wr(DIB3000MB_REG_UNK_71, DIB3000MB_UNK_71); + wr(DIB3000MB_REG_UNK_77, DIB3000MB_UNK_77); + wr(DIB3000MB_REG_UNK_78, DIB3000MB_UNK_78); + wr(DIB3000MB_REG_ISI, DIB3000MB_ISI_INHIBIT); + wr(DIB3000MB_REG_UNK_92, DIB3000MB_UNK_92); + wr(DIB3000MB_REG_UNK_96, DIB3000MB_UNK_96); + wr(DIB3000MB_REG_UNK_97, DIB3000MB_UNK_97); + wr(DIB3000MB_REG_UNK_106, DIB3000MB_UNK_106); + wr(DIB3000MB_REG_UNK_107, DIB3000MB_UNK_107); + wr(DIB3000MB_REG_UNK_108, DIB3000MB_UNK_108); + wr(DIB3000MB_REG_UNK_122, DIB3000MB_UNK_122); + wr(DIB3000MB_REG_MOBILE_MODE_QAM, DIB3000MB_MOBILE_MODE_QAM_OFF); + wr(DIB3000MB_REG_BERLEN, DIB3000MB_BERLEN_DEFAULT); + + wr_foreach(dib3000mb_reg_filter_coeffs, dib3000mb_filter_coeffs); + + wr(DIB3000MB_REG_MOBILE_ALGO, DIB3000MB_MOBILE_ALGO_ON); + wr(DIB3000MB_REG_MULTI_DEMOD_MSB, DIB3000MB_MULTI_DEMOD_MSB); + wr(DIB3000MB_REG_MULTI_DEMOD_LSB, DIB3000MB_MULTI_DEMOD_LSB); + + wr(DIB3000MB_REG_OUTPUT_MODE, DIB3000MB_OUTPUT_MODE_SLAVE); + + wr(DIB3000MB_REG_FIFO_142, DIB3000MB_FIFO_142); + wr(DIB3000MB_REG_MPEG2_OUT_MODE, DIB3000MB_MPEG2_OUT_MODE_188); wr(DIB3000MB_REG_PID_PARSE, DIB3000MB_PID_PARSE_ACTIVATE); - wr(DIB3000MB_REG_FIFO,DIB3000MB_FIFO_INHIBIT); - wr(DIB3000MB_REG_FIFO_146,DIB3000MB_FIFO_146); - wr(DIB3000MB_REG_FIFO_147,DIB3000MB_FIFO_147); + wr(DIB3000MB_REG_FIFO, DIB3000MB_FIFO_INHIBIT); + wr(DIB3000MB_REG_FIFO_146, DIB3000MB_FIFO_146); + wr(DIB3000MB_REG_FIFO_147, DIB3000MB_FIFO_147); - wr(DIB3000MB_REG_DATA_IN_DIVERSITY,DIB3000MB_DATA_DIVERSITY_IN_OFF); + wr(DIB3000MB_REG_DATA_IN_DIVERSITY, DIB3000MB_DATA_DIVERSITY_IN_OFF); if (state->config.pll_init) { dib3000mb_tuner_pass_ctrl(fe,1,state->config.pll_addr(fe)); @@ -451,7 +451,7 @@ static int dib3000mb_get_frontend(struct dvb_frontend* fe, default: err("Unexpected constellation returned by TPS (%d)", tps_val); break; - } + } deb_getf("TPS: %d\n", tps_val); if (rd(DIB3000MB_REG_TPS_HRCH)) { @@ -582,7 +582,7 @@ static int dib3000mb_read_status(struct dvb_frontend* fe, fe_status_t *stat) rd(DIB3000MB_REG_TPS_3), rd(DIB3000MB_REG_TPS_4), rd(DIB3000MB_REG_TPS_5)); - + deb_info("autoval: tps: %d, qam: %d, hrch: %d, alpha: %d, hp: %d, lp: %d, guard: %d, fft: %d cell: %d\n", rd(DIB3000MB_REG_TPS_LOCK), rd(DIB3000MB_REG_TPS_QAM), @@ -602,7 +602,7 @@ static int dib3000mb_read_ber(struct dvb_frontend* fe, u32 *ber) { struct dib3000_state* state = (struct dib3000_state*) fe->demodulator_priv; - *ber = ((rd(DIB3000MB_REG_BER_MSB) << 16) | rd(DIB3000MB_REG_BER_LSB) ); + *ber = ((rd(DIB3000MB_REG_BER_MSB) << 16) | rd(DIB3000MB_REG_BER_LSB)); return 0; } /* @@ -619,20 +619,20 @@ static int dib3000mb_read_signal_strength(struct dvb_frontend* fe, u16 *strength { struct dib3000_state* state = (struct dib3000_state*) fe->demodulator_priv; -/* TODO log10 - u16 sigpow = rd(DIB3000MB_REG_SIGNAL_POWER), +/* TODO log10 + u16 sigpow = rd(DIB3000MB_REG_SIGNAL_POWER), n_agc_power = rd(DIB3000MB_REG_AGC_POWER), rf_power = rd(DIB3000MB_REG_RF_POWER); double rf_power_dBm, ad_power_dBm, minar_power_dBm; - + if (n_agc_power == 0 ) n_agc_power = 1 ; ad_power_dBm = 10 * log10 ( (float)n_agc_power / (float)(1<<16) ); minor_power_dBm = ad_power_dBm - DIB3000MB_AGC_REF_dBm; - rf_power_dBm = (-DIB3000MB_GAIN_SLOPE_dBm * (float)rf_power / (float)(1<<16) + + rf_power_dBm = (-DIB3000MB_GAIN_SLOPE_dBm * (float)rf_power / (float)(1<<16) + DIB3000MB_GAIN_DELTA_dBm) + minor_power_dBm; - // relative rf_power + // relative rf_power *strength = (u16) ((rf_power_dBm + 100) / 100 * 0xffff); */ *strength = rd(DIB3000MB_REG_SIGNAL_POWER) * 0xffff / 0x170; @@ -640,7 +640,7 @@ static int dib3000mb_read_signal_strength(struct dvb_frontend* fe, u16 *strength } /* - * Amaury: + * Amaury: * snr is the signal quality measured in dB. * snr = 10*log10(signal power / noise power) * the best quality is near 35dB (cable transmission & good modulator) @@ -664,7 +664,7 @@ static int dib3000mb_read_snr(struct dvb_frontend* fe, u16 *snr) snr_dBm = 10.0 * log10( (float) (sigpow<<8) / (float)icipow ) ; else if (sigpow > 0) snr_dBm = 35; - + *snr = (u16) ((snr_dBm / 35) * 0xffff); */ *snr = (sigpow << 8) / ((icipow > 0) ? icipow : 1); @@ -683,7 +683,7 @@ static int dib3000mb_sleep(struct dvb_frontend* fe) { struct dib3000_state* state = (struct dib3000_state*) fe->demodulator_priv; - wr(DIB3000MB_REG_POWER_CONTROL,DIB3000MB_POWER_DOWN); + wr(DIB3000MB_REG_POWER_CONTROL, DIB3000MB_POWER_DOWN); return 0; } @@ -691,8 +691,8 @@ static int dib3000mb_fe_get_tune_settings(struct dvb_frontend* fe, struct dvb_fr { tune->min_delay_ms = 800; tune->step_size = 166667; - tune->max_drift = 166667*2; - + tune->max_drift = 166667 * 2; + return 0; } @@ -717,7 +717,7 @@ static int dib3000mb_pid_control(struct dvb_frontend *fe,int index, int pid,int { struct dib3000_state *state = fe->demodulator_priv; pid = (onoff ? pid | DIB3000_ACTIVATE_PID_FILTERING : 0); - wr(index+DIB3000MB_REG_FIRST_PID,pid); + wr(index+DIB3000MB_REG_FIRST_PID,pid); return 0; } @@ -732,14 +732,14 @@ static int dib3000mb_fifo_control(struct dvb_frontend *fe, int onoff) wr(DIB3000MB_REG_FIFO, DIB3000MB_FIFO_INHIBIT); } return 0; - } +} static int dib3000mb_pid_parse(struct dvb_frontend *fe, int onoff) { //struct dib3000_state *state = fe->demodulator_priv; /* switch it off and on */ return 0; - } +} static int dib3000mb_tuner_pass_ctrl(struct dvb_frontend *fe, int onoff, u8 pll_addr) { @@ -790,17 +790,17 @@ struct dvb_frontend* dib3000mb_attach(const struct dib3000_config* config, error: if (state) - kfree(state); + kfree(state); return NULL; - } +} static struct dvb_frontend_ops dib3000mb_ops = { .info = { .name = "DiBcom 3000-MB DVB-T", - .type = FE_OFDM, - .frequency_min = 44250000, - .frequency_max = 867250000, + .type = FE_OFDM, + .frequency_min = 44250000, + .frequency_max = 867250000, .frequency_stepsize = 62500, .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | diff --git a/drivers/media/dvb/frontends/dib3000mc.c b/drivers/media/dvb/frontends/dib3000mc.c index 26e640cd43c3..1d4b988a43b2 100644 --- a/drivers/media/dvb/frontends/dib3000mc.c +++ b/drivers/media/dvb/frontends/dib3000mc.c @@ -189,13 +189,13 @@ static int dib3000mc_init_auto_scan(struct dib3000_state *state, fe_bandwidth_t static int dib3000mc_set_adp_cfg(struct dib3000_state *state, fe_modulation_t con) { switch (con) { - case QAM_64: + case QAM_64: wr_foreach(dib3000mc_reg_adp_cfg,dib3000mc_adp_cfg[2]); break; - case QAM_16: + case QAM_16: wr_foreach(dib3000mc_reg_adp_cfg,dib3000mc_adp_cfg[1]); break; - case QPSK: + case QPSK: wr_foreach(dib3000mc_reg_adp_cfg,dib3000mc_adp_cfg[0]); break; case QAM_AUTO: @@ -223,13 +223,13 @@ static int dib3000mc_set_general_cfg(struct dib3000_state *state, struct dvb_fro switch (ofdm->guard_interval) { case GUARD_INTERVAL_1_32: guard = DIB3000_GUARD_TIME_1_32; break; case GUARD_INTERVAL_1_16: guard = DIB3000_GUARD_TIME_1_16; break; - case GUARD_INTERVAL_1_8: guard = DIB3000_GUARD_TIME_1_8; break; - case GUARD_INTERVAL_1_4: guard = DIB3000_GUARD_TIME_1_4; break; + case GUARD_INTERVAL_1_8: guard = DIB3000_GUARD_TIME_1_8; break; + case GUARD_INTERVAL_1_4: guard = DIB3000_GUARD_TIME_1_4; break; case GUARD_INTERVAL_AUTO: break; default: return -EINVAL; } switch (ofdm->constellation) { - case QPSK: qam = DIB3000_CONSTELLATION_QPSK; break; + case QPSK: qam = DIB3000_CONSTELLATION_QPSK; break; case QAM_16: qam = DIB3000_CONSTELLATION_16QAM; break; case QAM_64: qam = DIB3000_CONSTELLATION_64QAM; break; case QAM_AUTO: break; @@ -244,13 +244,13 @@ static int dib3000mc_set_general_cfg(struct dib3000_state *state, struct dvb_fro default: return -EINVAL; } if (ofdm->hierarchy_information == HIERARCHY_NONE) { - hrch = DIB3000_HRCH_OFF; + hrch = DIB3000_HRCH_OFF; sel_hp = DIB3000_SELECT_HP; - fe_cr = ofdm->code_rate_HP; + fe_cr = ofdm->code_rate_HP; } else if (ofdm->hierarchy_information != HIERARCHY_AUTO) { - hrch = DIB3000_HRCH_ON; + hrch = DIB3000_HRCH_ON; sel_hp = DIB3000_SELECT_LP; - fe_cr = ofdm->code_rate_LP; + fe_cr = ofdm->code_rate_LP; } switch (fe_cr) { case FEC_1_2: cr = DIB3000_FEC_1_2; break; @@ -286,10 +286,10 @@ static int dib3000mc_set_general_cfg(struct dib3000_state *state, struct dvb_fro deb_setf("seq? %d\n", seq); wr(DIB3000MC_REG_SEQ_TPS,DIB3000MC_SEQ_TPS(seq,1)); *auto_val = ofdm->constellation == QAM_AUTO || - ofdm->hierarchy_information == HIERARCHY_AUTO || - ofdm->guard_interval == GUARD_INTERVAL_AUTO || - ofdm->transmission_mode == TRANSMISSION_MODE_AUTO || - fe_cr == FEC_AUTO || + ofdm->hierarchy_information == HIERARCHY_AUTO || + ofdm->guard_interval == GUARD_INTERVAL_AUTO || + ofdm->transmission_mode == TRANSMISSION_MODE_AUTO || + fe_cr == FEC_AUTO || fep->inversion == INVERSION_AUTO; return 0; } @@ -334,7 +334,7 @@ static int dib3000mc_get_frontend(struct dvb_frontend* fe, fep->frequency = state->last_tuned_freq; fep->u.ofdm.bandwidth= state->last_tuned_bw; - + tps_val = rd(DIB3000MC_REG_TUNING_PARM); switch (DIB3000MC_TP_QAM(tps_val)) { @@ -353,7 +353,7 @@ static int dib3000mc_get_frontend(struct dvb_frontend* fe, default: err("Unexpected constellation returned by TPS (%d)", tps_val); break; - } + } if (DIB3000MC_TP_HRCH(tps_val)) { deb_getf("HRCH ON "); @@ -462,12 +462,12 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe, struct dvb_ofdm_parameters *ofdm = &fep->u.ofdm; int search_state,auto_val; u16 val; - + if (tuner) { /* initial call from dvb */ dib3000mc_tuner_pass_ctrl(fe,1,state->config.pll_addr(fe)); state->config.pll_set(fe,fep,NULL); dib3000mc_tuner_pass_ctrl(fe,0,state->config.pll_addr(fe)); - + state->last_tuned_freq = fep->frequency; // if (!scanboost) { dib3000mc_set_timing(state,0,ofdm->transmission_mode,ofdm->bandwidth); @@ -477,7 +477,7 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe, wr_foreach(dib3000mc_reg_agc_bandwidth,dib3000mc_agc_bandwidth); wr(DIB3000MC_REG_RESTART,DIB3000MC_RESTART_AGC); wr(DIB3000MC_REG_RESTART,DIB3000MC_RESTART_OFF); - + /* Default cfg isi offset adp */ wr_foreach(dib3000mc_reg_offset,dib3000mc_offset[0]); @@ -495,7 +495,7 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe, auto_val = 0; dib3000mc_set_general_cfg(state,fep,&auto_val); dib3000mc_set_impulse_noise(state,0,ofdm->constellation,ofdm->bandwidth); - + val = rd(DIB3000MC_REG_DEMOD_PARM); wr(DIB3000MC_REG_DEMOD_PARM,val|DIB3000MC_DEMOD_RST_DEMOD_ON); wr(DIB3000MC_REG_DEMOD_PARM,val); @@ -507,17 +507,17 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe, int as_count=0; deb_setf("autosearch enabled.\n"); - + val = rd(DIB3000MC_REG_DEMOD_PARM); wr(DIB3000MC_REG_DEMOD_PARM,val | DIB3000MC_DEMOD_RST_AUTO_SRCH_ON); wr(DIB3000MC_REG_DEMOD_PARM,val); while ((search_state = dib3000_search_status( - rd(DIB3000MC_REG_AS_IRQ),1)) < 0 && as_count++ < 100) + rd(DIB3000MC_REG_AS_IRQ),1)) < 0 && as_count++ < 100) msleep(10); - + deb_info("search_state after autosearch %d after %d checks\n",search_state,as_count); - + if (search_state == 1) { struct dvb_frontend_parameters feps; if (dib3000mc_get_frontend(fe, &feps) == 0) { @@ -529,33 +529,33 @@ static int dib3000mc_set_frontend(struct dvb_frontend* fe, dib3000mc_set_impulse_noise(state,0,ofdm->transmission_mode,ofdm->bandwidth); wr(DIB3000MC_REG_ISI,DIB3000MC_ISI_DEFAULT|DIB3000MC_ISI_ACTIVATE); dib3000mc_set_adp_cfg(state,ofdm->constellation); - + /* set_offset_cfg */ wr_foreach(dib3000mc_reg_offset, dib3000mc_offset[(ofdm->transmission_mode == TRANSMISSION_MODE_8K)+1]); } } else { /* second call, after autosearch (fka: set_WithKnownParams) */ // dib3000mc_set_timing(state,1,ofdm->transmission_mode,ofdm->bandwidth); - + auto_val = 0; dib3000mc_set_general_cfg(state,fep,&auto_val); if (auto_val) deb_info("auto_val is true, even though an auto search was already performed.\n"); dib3000mc_set_impulse_noise(state,0,ofdm->constellation,ofdm->bandwidth); - + val = rd(DIB3000MC_REG_DEMOD_PARM); wr(DIB3000MC_REG_DEMOD_PARM,val | DIB3000MC_DEMOD_RST_AUTO_SRCH_ON); wr(DIB3000MC_REG_DEMOD_PARM,val); - + msleep(30); - + wr(DIB3000MC_REG_ISI,DIB3000MC_ISI_DEFAULT|DIB3000MC_ISI_ACTIVATE); dib3000mc_set_adp_cfg(state,ofdm->constellation); wr_foreach(dib3000mc_reg_offset, dib3000mc_offset[(ofdm->transmission_mode == TRANSMISSION_MODE_8K)+1]); - - + + } return 0; } @@ -569,26 +569,26 @@ static int dib3000mc_fe_init(struct dvb_frontend* fe, int mobile_mode) state = fe->demodulator_priv; state->timing_offset = 0; state->timing_offset_comp_done = 0; - + wr(DIB3000MC_REG_RESTART,DIB3000MC_RESTART_CONFIG); wr(DIB3000MC_REG_RESTART,DIB3000MC_RESTART_OFF); wr(DIB3000MC_REG_CLK_CFG_1,DIB3000MC_CLK_CFG_1_POWER_UP); wr(DIB3000MC_REG_CLK_CFG_2,DIB3000MC_CLK_CFG_2_PUP_MOBILE); wr(DIB3000MC_REG_CLK_CFG_3,DIB3000MC_CLK_CFG_3_POWER_UP); wr(DIB3000MC_REG_CLK_CFG_7,DIB3000MC_CLK_CFG_7_INIT); - + wr(DIB3000MC_REG_RST_UNC,DIB3000MC_RST_UNC_OFF); wr(DIB3000MC_REG_UNK_19,DIB3000MC_UNK_19); wr(33,5); wr(36,81); - wr(DIB3000MC_REG_UNK_88,DIB3000MC_UNK_88); - + wr(DIB3000MC_REG_UNK_88,DIB3000MC_UNK_88); + wr(DIB3000MC_REG_UNK_99,DIB3000MC_UNK_99); wr(DIB3000MC_REG_UNK_111,DIB3000MC_UNK_111_PH_N_MODE_0); /* phase noise algo off */ /* mobile mode - portable reception */ - wr_foreach(dib3000mc_reg_mobile_mode,dib3000mc_mobile_mode[1]); + wr_foreach(dib3000mc_reg_mobile_mode,dib3000mc_mobile_mode[1]); /* TUNER_PANASONIC_ENV57H12D5: */ wr_foreach(dib3000mc_reg_agc_bandwidth,dib3000mc_agc_bandwidth); @@ -601,24 +601,24 @@ static int dib3000mc_fe_init(struct dvb_frontend* fe, int mobile_mode) wr(DIB3000MC_REG_UNK_2,DIB3000MC_UNK_2); wr(DIB3000MC_REG_UNK_3,DIB3000MC_UNK_3); wr(DIB3000MC_REG_SEQ_TPS,DIB3000MC_SEQ_TPS_DEFAULT); - + wr_foreach(dib3000mc_reg_bandwidth,dib3000mc_bandwidth_8mhz); wr_foreach(dib3000mc_reg_bandwidth_general,dib3000mc_bandwidth_general); - + wr(DIB3000MC_REG_UNK_4,DIB3000MC_UNK_4); wr(DIB3000MC_REG_SET_DDS_FREQ_MSB,DIB3000MC_DDS_FREQ_MSB_INV_OFF); wr(DIB3000MC_REG_SET_DDS_FREQ_LSB,DIB3000MC_DDS_FREQ_LSB); - dib3000mc_set_timing(state,0,TRANSMISSION_MODE_8K,BANDWIDTH_8_MHZ); + dib3000mc_set_timing(state,0,TRANSMISSION_MODE_8K,BANDWIDTH_8_MHZ); // wr_foreach(dib3000mc_reg_timing_freq,dib3000mc_timing_freq[3]); - + wr(DIB3000MC_REG_UNK_120,DIB3000MC_UNK_120); wr(DIB3000MC_REG_UNK_134,DIB3000MC_UNK_134); wr(DIB3000MC_REG_FEC_CFG,DIB3000MC_FEC_CFG); - + wr(DIB3000MC_REG_DIVERSITY3,DIB3000MC_DIVERSITY3_IN_OFF); - + dib3000mc_set_impulse_noise(state,0,TRANSMISSION_MODE_8K,BANDWIDTH_8_MHZ); /* output mode control, just the MPEG2_SLAVE */ @@ -634,13 +634,13 @@ static int dib3000mc_fe_init(struct dvb_frontend* fe, int mobile_mode) rd(DIB3000MC_REG_OUTMODE))); wr(DIB3000MC_REG_SMO_MODE, - DIB3000MC_SMO_MODE_DEFAULT | + DIB3000MC_SMO_MODE_DEFAULT | DIB3000MC_SMO_MODE_188); wr(DIB3000MC_REG_FIFO_THRESHOLD,DIB3000MC_FIFO_THRESHOLD_DEFAULT); wr(DIB3000MC_REG_ELEC_OUT,DIB3000MC_ELEC_OUT_DIV_OUT_ON); */ - + /* diversity */ wr(DIB3000MC_REG_DIVERSITY1,DIB3000MC_DIVERSITY1_DEFAULT); wr(DIB3000MC_REG_DIVERSITY2,DIB3000MC_DIVERSITY2_DEFAULT); @@ -756,7 +756,7 @@ static int dib3000mc_set_frontend_and_tuner(struct dvb_frontend* fe, struct dvb_ static void dib3000mc_release(struct dvb_frontend* fe) { - struct dib3000_state *state = (struct dib3000_state*) fe->demodulator_priv; + struct dib3000_state *state = (struct dib3000_state *) fe->demodulator_priv; kfree(state); } @@ -765,7 +765,7 @@ static int dib3000mc_pid_control(struct dvb_frontend *fe,int index, int pid,int { struct dib3000_state *state = fe->demodulator_priv; pid = (onoff ? pid | DIB3000_ACTIVATE_PID_FILTERING : 0); - wr(index+DIB3000MC_REG_FIRST_PID,pid); + wr(index+DIB3000MC_REG_FIRST_PID,pid); return 0; } @@ -773,9 +773,9 @@ static int dib3000mc_fifo_control(struct dvb_frontend *fe, int onoff) { struct dib3000_state *state = (struct dib3000_state*) fe->demodulator_priv; u16 tmp = rd(DIB3000MC_REG_SMO_MODE); - + deb_xfer("%s fifo\n",onoff ? "enabling" : "disabling"); - + if (onoff) { deb_xfer("%d %x\n",tmp & DIB3000MC_SMO_MODE_FIFO_UNFLUSH,tmp & DIB3000MC_SMO_MODE_FIFO_UNFLUSH); wr(DIB3000MC_REG_SMO_MODE,tmp & DIB3000MC_SMO_MODE_FIFO_UNFLUSH); @@ -790,9 +790,9 @@ static int dib3000mc_pid_parse(struct dvb_frontend *fe, int onoff) { struct dib3000_state *state = fe->demodulator_priv; u16 tmp = rd(DIB3000MC_REG_SMO_MODE); - + deb_xfer("%s pid parsing\n",onoff ? "enabling" : "disabling"); - + if (onoff) { deb_xfer("%d %x\n",tmp | DIB3000MC_SMO_MODE_PID_PARSE,tmp | DIB3000MC_SMO_MODE_PID_PARSE); wr(DIB3000MC_REG_SMO_MODE,tmp | DIB3000MC_SMO_MODE_PID_PARSE); @@ -814,7 +814,7 @@ static int dib3000mc_tuner_pass_ctrl(struct dvb_frontend *fe, int onoff, u8 pll_ return 0; } -static int dib3000mc_demod_init(struct dib3000_state *state) +static int dib3000mc_demod_init(struct dib3000_state *state) { u16 default_addr = 0x0a; /* first init */ @@ -822,13 +822,13 @@ static int dib3000mc_demod_init(struct dib3000_state *state) deb_info("initializing the demod the first time. Setting demod addr to 0x%x\n",default_addr); wr(DIB3000MC_REG_ELEC_OUT,DIB3000MC_ELEC_OUT_DIV_OUT_ON); wr(DIB3000MC_REG_OUTMODE,DIB3000MC_OM_PAR_CONT_CLK); - + wr(DIB3000MC_REG_RST_I2C_ADDR, DIB3000MC_DEMOD_ADDR(default_addr) | DIB3000MC_DEMOD_ADDR_ON); - + state->config.demod_address = default_addr; - + wr(DIB3000MC_REG_RST_I2C_ADDR, DIB3000MC_DEMOD_ADDR(default_addr)); } else @@ -896,9 +896,9 @@ static struct dvb_frontend_ops dib3000mc_ops = { .info = { .name = "DiBcom 3000-MC/P DVB-T", - .type = FE_OFDM, - .frequency_min = 44250000, - .frequency_max = 867250000, + .type = FE_OFDM, + .frequency_min = 44250000, + .frequency_max = 867250000, .frequency_stepsize = 62500, .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | diff --git a/drivers/media/dvb/frontends/dib3000mc_priv.h b/drivers/media/dvb/frontends/dib3000mc_priv.h index 569e521e81ff..2b2342b758ea 100644 --- a/drivers/media/dvb/frontends/dib3000mc_priv.h +++ b/drivers/media/dvb/frontends/dib3000mc_priv.h @@ -187,7 +187,7 @@ static u16 dib3000mc_reg_agc_bandwidth_general[] = { 50,51,52,53,54 }; static u16 dib3000mc_agc_bandwidth_general[] = { 0x8000, 0x91ca, 0x01ba, 0x0087, 0x0087 }; -#define DIB3000MC_REG_IMP_NOISE_55 ( 55) +#define DIB3000MC_REG_IMP_NOISE_55 ( 55) #define DIB3000MC_IMP_NEW_ALGO(w) (w | (1<<10)) /* Impulse noise params */ @@ -209,14 +209,14 @@ static u16 dib3000mc_fft_modes[][29] = { { 0x38, 0x6d9, 0x3f28, 0x7a7, 0x3a74, 0x196, 0x32a, 0x48c, 0x3ffe, 0x7f3, 0x2d94, 0x76, 0x53d, 0x3ff8, 0x7e3, 0x3320, 0x76, 0x5b3, - 0x3feb, 0x7d2, 0x365e, 0x76, 0x48c, - 0x3ffe, 0x5b3, 0x3feb, 0x76, 0x0, 0xd + 0x3feb, 0x7d2, 0x365e, 0x76, 0x48c, + 0x3ffe, 0x5b3, 0x3feb, 0x76, 0x0, 0xd }, /* fft mode 0 */ { 0x3b, 0x6d9, 0x3f28, 0x7a7, 0x3a74, 0x196, 0x32a, 0x48c, 0x3ffe, 0x7f3, 0x2d94, 0x76, 0x53d, 0x3ff8, 0x7e3, 0x3320, 0x76, 0x5b3, - 0x3feb, 0x7d2, 0x365e, 0x76, 0x48c, - 0x3ffe, 0x5b3, 0x3feb, 0x0, 0x8200, 0xd + 0x3feb, 0x7d2, 0x365e, 0x76, 0x48c, + 0x3ffe, 0x5b3, 0x3feb, 0x0, 0x8200, 0xd }, /* fft mode 1 */ }; @@ -299,7 +299,7 @@ static u16 dib3000mc_mobile_mode[][5] = { * |||| +---- fifo_ctrl (1 = inhibit (flushed), 0 = active (unflushed)) * |||+------ pid_parse (1 = enabled, 0 = disabled) * ||+------- outp_188 (1 = TS packet size 188, 0 = packet size 204) - * |+-------- unk + * |+-------- unk * +--------- unk */ diff --git a/drivers/media/dvb/frontends/dvb_dummy_fe.c b/drivers/media/dvb/frontends/dvb_dummy_fe.c index b17a19526b4e..375d6f3b4401 100644 --- a/drivers/media/dvb/frontends/dvb_dummy_fe.c +++ b/drivers/media/dvb/frontends/dvb_dummy_fe.c @@ -1,5 +1,5 @@ -/* - * Driver for Dummy Frontend +/* + * Driver for Dummy Frontend * * Written by Emard <emard@softhome.net> * @@ -17,7 +17,7 @@ * 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 <linux/module.h> #include <linux/moduleparam.h> @@ -27,52 +27,50 @@ #include "dvb_dummy_fe.h" - struct dvb_dummy_fe_state { - struct dvb_frontend_ops ops; - struct dvb_frontend frontend; }; + static int dvb_dummy_fe_read_status(struct dvb_frontend* fe, fe_status_t* status) - { - *status = FE_HAS_SIGNAL - | FE_HAS_CARRIER - | FE_HAS_VITERBI - | FE_HAS_SYNC - | FE_HAS_LOCK; +{ + *status = FE_HAS_SIGNAL + | FE_HAS_CARRIER + | FE_HAS_VITERBI + | FE_HAS_SYNC + | FE_HAS_LOCK; return 0; - } +} static int dvb_dummy_fe_read_ber(struct dvb_frontend* fe, u32* ber) - { - *ber = 0; +{ + *ber = 0; return 0; - } +} static int dvb_dummy_fe_read_signal_strength(struct dvb_frontend* fe, u16* strength) - { +{ *strength = 0; return 0; - } +} static int dvb_dummy_fe_read_snr(struct dvb_frontend* fe, u16* snr) - { +{ *snr = 0; return 0; - } +} static int dvb_dummy_fe_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) { *ucblocks = 0; - return 0; + return 0; } static int dvb_dummy_fe_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) { - return 0; + return 0; } static int dvb_dummy_fe_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) @@ -82,18 +80,18 @@ static int dvb_dummy_fe_set_frontend(struct dvb_frontend* fe, struct dvb_fronten static int dvb_dummy_fe_sleep(struct dvb_frontend* fe) { - return 0; + return 0; } static int dvb_dummy_fe_init(struct dvb_frontend* fe) { return 0; - } +} static int dvb_dummy_fe_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone) { - return 0; -} + return 0; +} static int dvb_dummy_fe_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t voltage) { @@ -179,9 +177,9 @@ static struct dvb_frontend_ops dvb_dummy_fe_ofdm_ops = { .info = { .name = "Dummy DVB-T", - .type = FE_OFDM, - .frequency_min = 0, - .frequency_max = 863250000, + .type = FE_OFDM, + .frequency_min = 0, + .frequency_max = 863250000, .frequency_stepsize = 62500, .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_4_5 | FE_CAN_FEC_5_6 | FE_CAN_FEC_6_7 | @@ -211,12 +209,12 @@ static struct dvb_frontend_ops dvb_dummy_fe_qam_ops = { .info = { .name = "Dummy DVB-C", - .type = FE_QAM, + .type = FE_QAM, .frequency_stepsize = 62500, - .frequency_min = 51000000, - .frequency_max = 858000000, - .symbol_rate_min = (57840000/2)/64, /* SACLK/64 == (XIN/2)/64 */ - .symbol_rate_max = (57840000/2)/4, /* SACLK/4 */ + .frequency_min = 51000000, + .frequency_max = 858000000, + .symbol_rate_min = (57840000/2)/64, /* SACLK/64 == (XIN/2)/64 */ + .symbol_rate_max = (57840000/2)/4, /* SACLK/4 */ .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | FE_CAN_QAM_128 | FE_CAN_QAM_256 | FE_CAN_FEC_AUTO | FE_CAN_INVERSION_AUTO @@ -240,14 +238,14 @@ static struct dvb_frontend_ops dvb_dummy_fe_qam_ops = { static struct dvb_frontend_ops dvb_dummy_fe_qpsk_ops = { .info = { - .name = "Dummy DVB-S", - .type = FE_QPSK, - .frequency_min = 950000, - .frequency_max = 2150000, - .frequency_stepsize = 250, /* kHz for QPSK frontends */ - .frequency_tolerance = 29500, - .symbol_rate_min = 1000000, - .symbol_rate_max = 45000000, + .name = "Dummy DVB-S", + .type = FE_QPSK, + .frequency_min = 950000, + .frequency_max = 2150000, + .frequency_stepsize = 250, /* kHz for QPSK frontends */ + .frequency_tolerance = 29500, + .symbol_rate_min = 1000000, + .symbol_rate_max = 45000000, .caps = FE_CAN_INVERSION_AUTO | FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | @@ -269,7 +267,7 @@ static struct dvb_frontend_ops dvb_dummy_fe_qpsk_ops = { .read_ucblocks = dvb_dummy_fe_read_ucblocks, .set_voltage = dvb_dummy_fe_set_voltage, - .set_tone = dvb_dummy_fe_set_tone, + .set_tone = dvb_dummy_fe_set_tone, }; MODULE_DESCRIPTION("DVB DUMMY Frontend"); diff --git a/drivers/media/dvb/frontends/l64781.c b/drivers/media/dvb/frontends/l64781.c index af4cb09b03a2..385b04ee00a8 100644 --- a/drivers/media/dvb/frontends/l64781.c +++ b/drivers/media/dvb/frontends/l64781.c @@ -32,17 +32,13 @@ struct l64781_state { - struct i2c_adapter* i2c; - struct dvb_frontend_ops ops; - const struct l64781_config* config; - struct dvb_frontend frontend; /* private demodulator data */ - int first:1; + int first:1; }; #define dprintk(args...) \ @@ -544,7 +540,7 @@ struct dvb_frontend* l64781_attach(const struct l64781_config* config, /* Responds to all reads with 0 */ if (l64781_readreg(state, 0x1a) != 0) { - dprintk("Read 1 returned unexpcted value\n"); + dprintk("Read 1 returned unexpcted value\n"); goto error; } @@ -553,7 +549,7 @@ struct dvb_frontend* l64781_attach(const struct l64781_config* config, /* Responds with register default value */ if (l64781_readreg(state, 0x1a) != 0xa1) { - dprintk("Read 2 returned unexpcted value\n"); + dprintk("Read 2 returned unexpcted value\n"); goto error; } @@ -581,10 +577,10 @@ static struct dvb_frontend_ops l64781_ops = { .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 | - FE_CAN_MUTE_TS + FE_CAN_MUTE_TS }, - .release = l64781_release, + .release = l64781_release, .init = l64781_init, .sleep = l64781_sleep, diff --git a/drivers/media/dvb/frontends/mt312.c b/drivers/media/dvb/frontends/mt312.c index a5dcc8766313..9880b3742d05 100644 --- a/drivers/media/dvb/frontends/mt312.c +++ b/drivers/media/dvb/frontends/mt312.c @@ -1,4 +1,4 @@ -/* +/* Driver for Zarlink VP310/MT312 Satellite Channel Decoder Copyright (C) 2003 Andreas Oberritter <obi@linuxtv.org> @@ -36,14 +36,10 @@ struct mt312_state { - struct i2c_adapter* i2c; - struct dvb_frontend_ops ops; - /* configuration settings */ const struct mt312_config* config; - struct dvb_frontend frontend; u8 id; @@ -128,7 +124,7 @@ static int mt312_write(struct mt312_state* state, const enum mt312_reg_addr reg, } static inline int mt312_readreg(struct mt312_state* state, - const enum mt312_reg_addr reg, u8 * val) + const enum mt312_reg_addr reg, u8 *val) { return mt312_read(state, reg, val, 1); } @@ -181,7 +177,7 @@ static int mt312_get_symbol_rate(struct mt312_state* state, u32 *sr) return ret; if ((ret = mt312_read(state, MONITOR_H, buf, sizeof(buf))) < 0) - return ret; + return ret; monitor = (buf[0] << 8) | buf[1]; @@ -206,7 +202,7 @@ static int mt312_get_symbol_rate(struct mt312_state* state, u32 *sr) dprintk(KERN_DEBUG "*sr(manual) = %lu\n", (((MT312_PLL_CLK * 8192) / (sym_rat_op + 8192)) * 2) - dec_ratio); -} + } return 0; } @@ -226,21 +222,7 @@ static int mt312_get_code_rate(struct mt312_state* state, fe_code_rate_t *cr) *cr = fec_tab[(fec_status >> 4) & 0x07]; return 0; - } - - - - - - - - - - - - - - +} static int mt312_initfe(struct dvb_frontend* fe) { @@ -525,7 +507,7 @@ static int mt312_set_frontend(struct dvb_frontend* fe, state->frequency = 90; if ((ret = mt312_initfe(fe)) < 0) return ret; - } + } } else { @@ -533,7 +515,7 @@ static int mt312_set_frontend(struct dvb_frontend* fe, state->frequency = 60; if ((ret = mt312_initfe(fe)) < 0) return ret; - } + } } break; @@ -614,12 +596,12 @@ static int mt312_sleep(struct dvb_frontend* fe) } static int mt312_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings) - { - fesettings->min_delay_ms = 50; - fesettings->step_size = 0; - fesettings->max_drift = 0; - return 0; - } +{ + fesettings->min_delay_ms = 50; + fesettings->step_size = 0; + fesettings->max_drift = 0; + return 0; +} static void mt312_release(struct dvb_frontend* fe) { @@ -653,7 +635,7 @@ struct dvb_frontend* vp310_attach(const struct mt312_config* config, } /* create dvb_frontend */ - state->frequency = 90; + state->frequency = 90; state->frontend.ops = &state->ops; state->frontend.demodulator_priv = state; return &state->frontend; @@ -685,7 +667,7 @@ struct dvb_frontend* mt312_attach(const struct mt312_config* config, goto error; if (state->id != ID_MT312) { goto error; -} + } /* create dvb_frontend */ state->frequency = 60; @@ -716,7 +698,7 @@ static struct dvb_frontend_ops vp310_mt312_ops = { FE_CAN_RECOVER }, - .release = mt312_release, + .release = mt312_release, .init = mt312_initfe, .sleep = mt312_sleep, diff --git a/drivers/media/dvb/frontends/mt312.h b/drivers/media/dvb/frontends/mt312.h index 1f58f0c9d110..b3a53a73a117 100644 --- a/drivers/media/dvb/frontends/mt312.h +++ b/drivers/media/dvb/frontends/mt312.h @@ -1,4 +1,4 @@ -/* +/* Driver for Zarlink MT312 Satellite Channel Decoder Copyright (C) 2003 Andreas Oberritter <obi@linuxtv.org> diff --git a/drivers/media/dvb/frontends/mt352.c b/drivers/media/dvb/frontends/mt352.c index 46d9587a36ce..06125c54eff7 100644 --- a/drivers/media/dvb/frontends/mt352.c +++ b/drivers/media/dvb/frontends/mt352.c @@ -53,9 +53,9 @@ struct mt352_state { static int debug; #define dprintk(args...) \ -do { \ + do { \ if (debug) printk(KERN_DEBUG "mt352: " args); \ -} while (0) + } while (0) static int mt352_single_write(struct dvb_frontend *fe, u8 reg, u8 val) { @@ -483,8 +483,8 @@ static int mt352_read_ber(struct dvb_frontend* fe, u32* ber) (mt352_read_register (state, RS_ERR_CNT_1) << 8) | (mt352_read_register (state, RS_ERR_CNT_0)); - return 0; - } + return 0; +} static int mt352_read_signal_strength(struct dvb_frontend* fe, u16* strength) { @@ -515,7 +515,7 @@ static int mt352_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) (mt352_read_register (state, RS_UBC_0)); return 0; - } +} static int mt352_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fe_tune_settings) { diff --git a/drivers/media/dvb/frontends/nxt2002.c b/drivers/media/dvb/frontends/nxt2002.c index a5a3ab9f6ec0..984163af5f7b 100644 --- a/drivers/media/dvb/frontends/nxt2002.c +++ b/drivers/media/dvb/frontends/nxt2002.c @@ -1,5 +1,5 @@ /* - Support for B2C2/BBTI Technisat Air2PC - ATSC + Support for B2C2/BBTI Technisat Air2PC - ATSC Copyright (C) 2004 Taylor Jacob <rtjacob@earthlink.net> @@ -59,7 +59,7 @@ static int i2c_writebytes (struct nxt2002_state* state, u8 reg, u8 *buf, u8 len) u8 buf2 [256],x; int err; struct i2c_msg msg = { .addr = state->config->demod_address, .flags = 0, .buf = buf2, .len = len + 1 }; - + buf2[0] = reg; for (x = 0 ; x < len ; x++) buf2[x+1] = buf[x]; @@ -91,12 +91,12 @@ static u8 i2c_readbytes (struct nxt2002_state* state, u8 reg, u8* buf, u8 len) return 0; } -static u16 nxt2002_crc(u16 crc, u8 c) +static u16 nxt2002_crc(u16 crc, u8 c) { u8 i; u16 input = (u16) c & 0xFF; - + input<<=8; for(i=0 ;i<8 ;i++) { if((crc ^ input) & 0x8000) @@ -130,7 +130,7 @@ static int nxt2002_writereg_multibyte (struct nxt2002_state* state, u8 reg, u8* if ((buf & 0x02) == 0) return 0; - + dprintk("Error writing multireg register %02X\n",reg); return 0; @@ -162,16 +162,16 @@ static void nxt2002_microcontroller_stop (struct nxt2002_state* state) buf[0] = 0x80; i2c_writebytes(state,0x22,buf,1); - while (counter < 20) { + while (counter < 20) { i2c_readbytes(state,0x31,buf,1); - if (buf[0] & 0x40) + if (buf[0] & 0x40) return; msleep(10); counter++; } dprintk("Timeout waiting for micro to stop.. This is ok after firmware upload\n"); - return; + return; } static void nxt2002_microcontroller_start (struct nxt2002_state* state) @@ -211,7 +211,7 @@ static int nxt2002_writetuner (struct nxt2002_state* state, u8* data) /* write UC Opmode to begin transfer */ buf = 0x80; i2c_writebytes(state,0x21,&buf,1); - + while (count < 20) { i2c_readbytes(state,0x21,&buf,1); if ((buf & 0x80)== 0x00) @@ -243,7 +243,7 @@ static int nxt2002_load_firmware (struct dvb_frontend* fe, const struct firmware struct nxt2002_state* state = (struct nxt2002_state*) fe->demodulator_priv; u8 buf[256],written = 0,chunkpos = 0; - u16 rambase,position,crc = 0; + u16 rambase,position,crc = 0; dprintk("%s\n", __FUNCTION__); dprintk("Firmware is %zu bytes\n",fw->size); @@ -251,7 +251,6 @@ static int nxt2002_load_firmware (struct dvb_frontend* fe, const struct firmware /* Get the RAM base for this nxt2002 */ i2c_readbytes(state,0x10,buf,1); - if (buf[0] & 0x10) rambase = 0x1000; else @@ -263,7 +262,6 @@ static int nxt2002_load_firmware (struct dvb_frontend* fe, const struct firmware buf[0] = 0x80; i2c_writebytes(state,0x2B,buf,1); - for (position = 0; position < fw->size ; position++) { if (written == 0) { crc = 0; @@ -274,7 +272,7 @@ static int nxt2002_load_firmware (struct dvb_frontend* fe, const struct firmware /* write starting address */ i2c_writebytes(state,0x29,buf,3); } - written++; + written++; chunkpos++; if ((written % 4) == 0) @@ -282,7 +280,6 @@ static int nxt2002_load_firmware (struct dvb_frontend* fe, const struct firmware crc = nxt2002_crc(crc,fw->data[position]); - if ((written == 255) || (position+1 == fw->size)) { /* write remaining bytes of firmware */ i2c_writebytes(state, chunkpos+4-(written %4), @@ -290,7 +287,7 @@ static int nxt2002_load_firmware (struct dvb_frontend* fe, const struct firmware written %4); buf[0] = crc << 8; buf[1] = crc & 0xFF; - + /* write crc */ i2c_writebytes(state,0x2C,buf,2); @@ -309,24 +306,23 @@ static int nxt2002_load_firmware (struct dvb_frontend* fe, const struct firmware return 0; }; - static int nxt2002_setup_frontend_parameters (struct dvb_frontend* fe, struct dvb_frontend_parameters *p) { struct nxt2002_state* state = (struct nxt2002_state*) fe->demodulator_priv; u32 freq = 0; - u16 tunerfreq = 0; + u16 tunerfreq = 0; u8 buf[4]; - freq = 44000 + ( p->frequency / 1000 ); + freq = 44000 + ( p->frequency / 1000 ); dprintk("freq = %d p->frequency = %d\n",freq,p->frequency); tunerfreq = freq * 24/4000; - + buf[0] = (tunerfreq >> 8) & 0x7F; buf[1] = (tunerfreq & 0xFF); - + if (p->frequency <= 214000000) { buf[2] = 0x84 + (0x06 << 3); buf[3] = (p->frequency <= 172000000) ? 0x01 : 0x02; @@ -337,7 +333,7 @@ static int nxt2002_setup_frontend_parameters (struct dvb_frontend* fe, buf[2] = 0x84 + (0x0E << 3); buf[3] = 0x08; } else { - buf[2] = 0x84 + (0x0F << 3); + buf[2] = 0x84 + (0x0F << 3); buf[3] = 0x02; } @@ -348,7 +344,7 @@ static int nxt2002_setup_frontend_parameters (struct dvb_frontend* fe, nxt2002_agc_reset(state); /* set target power level */ - buf[0] = 0x70; + buf[0] = 0x70; i2c_writebytes(state,0x42,buf,1); /* configure sdm */ @@ -361,7 +357,7 @@ static int nxt2002_setup_frontend_parameters (struct dvb_frontend* fe, nxt2002_writereg_multibyte(state,0x58,buf,2); /* write sdmx input */ - buf[0] = 0x60; + buf[0] = 0x60; buf[1] = 0x00; nxt2002_writereg_multibyte(state,0x5C,buf,2); @@ -391,7 +387,7 @@ static int nxt2002_setup_frontend_parameters (struct dvb_frontend* fe, i2c_writebytes(state,0x41,buf,1); /* write agc ucgp0 */ - buf[0] = 0x00; + buf[0] = 0x00; i2c_writebytes(state,0x30,buf,1); /* write agc control reg */ @@ -410,7 +406,7 @@ static int nxt2002_setup_frontend_parameters (struct dvb_frontend* fe, nxt2002_microcontroller_start(state); - /* adjacent channel detection should be done here, but I don't + /* adjacent channel detection should be done here, but I don't have any stations with this need so I cannot test it */ return 0; @@ -427,7 +423,7 @@ static int nxt2002_read_status(struct dvb_frontend* fe, fe_status_t* status) *status |= FE_HAS_SIGNAL; *status |= FE_HAS_CARRIER; *status |= FE_HAS_VITERBI; - *status |= FE_HAS_SYNC; + *status |= FE_HAS_SYNC; *status |= FE_HAS_LOCK; } return 0; @@ -438,10 +434,10 @@ static int nxt2002_read_ber(struct dvb_frontend* fe, u32* ber) struct nxt2002_state* state = (struct nxt2002_state*) fe->demodulator_priv; u8 b[3]; - nxt2002_readreg_multibyte(state,0xE6,b,3); + nxt2002_readreg_multibyte(state,0xE6,b,3); *ber = ((b[0] << 8) + b[1]) * 8; - + return 0; } @@ -456,7 +452,7 @@ static int nxt2002_read_signal_strength(struct dvb_frontend* fe, u16* strength) i2c_writebytes(state,0xA1,b,1); /* get multreg val */ - nxt2002_readreg_multibyte(state,0xA6,b,2); + nxt2002_readreg_multibyte(state,0xA6,b,2); temp = (b[0] << 8) | b[1]; *strength = ((0x7FFF - temp) & 0x0FFF) * 16; @@ -477,7 +473,7 @@ static int nxt2002_read_snr(struct dvb_frontend* fe, u16* snr) i2c_writebytes(state,0xA1,b,1); /* get multreg val from 0xA6 */ - nxt2002_readreg_multibyte(state,0xA6,b,2); + nxt2002_readreg_multibyte(state,0xA6,b,2); temp = (b[0] << 8) | b[1]; temp2 = 0x7FFF - temp; @@ -503,9 +499,8 @@ static int nxt2002_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) { struct nxt2002_state* state = (struct nxt2002_state*) fe->demodulator_priv; u8 b[3]; - - nxt2002_readreg_multibyte(state,0xE6,b,3); + nxt2002_readreg_multibyte(state,0xE6,b,3); *ucblocks = b[2]; return 0; @@ -542,7 +537,7 @@ static int nxt2002_init(struct dvb_frontend* fe) /* Put the micro into reset */ nxt2002_microcontroller_stop(state); - + /* ensure transfer is complete */ buf[0]=0; i2c_writebytes(state,0x2B,buf,1); @@ -557,11 +552,11 @@ static int nxt2002_init(struct dvb_frontend* fe) i2c_writebytes(state,0x08,buf,1); /* write agc sdm configure */ - buf[0] = 0xF1; + buf[0] = 0xF1; i2c_writebytes(state,0x57,buf,1); /* write mod output format */ - buf[0] = 0x20; + buf[0] = 0x20; i2c_writebytes(state,0x09,buf,1); /* write fec mpeg mode */ @@ -614,11 +609,11 @@ struct dvb_frontend* nxt2002_attach(const struct nxt2002_config* config, /* Check the first 5 registers to ensure this a revision we can handle */ i2c_readbytes(state, 0x00, buf, 5); - if (buf[0] != 0x04) goto error; /* device id */ - if (buf[1] != 0x02) goto error; /* fab id */ - if (buf[2] != 0x11) goto error; /* month */ - if (buf[3] != 0x20) goto error; /* year msb */ - if (buf[4] != 0x00) goto error; /* year lsb */ + if (buf[0] != 0x04) goto error; /* device id */ + if (buf[1] != 0x02) goto error; /* fab id */ + if (buf[2] != 0x11) goto error; /* month */ + if (buf[3] != 0x20) goto error; /* year msb */ + if (buf[4] != 0x00) goto error; /* year lsb */ /* create dvb_frontend */ state->frontend.ops = &state->ops; @@ -638,10 +633,10 @@ static struct dvb_frontend_ops nxt2002_ops = { .frequency_min = 54000000, .frequency_max = 803000000, /* stepsize is just a guess */ - .frequency_stepsize = 166666, + .frequency_stepsize = 166666, .caps = FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 | FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO | - FE_CAN_8VSB + FE_CAN_8VSB }, .release = nxt2002_release, diff --git a/drivers/media/dvb/frontends/nxt2002.h b/drivers/media/dvb/frontends/nxt2002.h index a177d5e6bafe..462301f577ee 100644 --- a/drivers/media/dvb/frontends/nxt2002.h +++ b/drivers/media/dvb/frontends/nxt2002.h @@ -18,6 +18,6 @@ struct nxt2002_config }; extern struct dvb_frontend* nxt2002_attach(const struct nxt2002_config* config, - struct i2c_adapter* i2c); + struct i2c_adapter* i2c); #endif // NXT2002_H diff --git a/drivers/media/dvb/frontends/nxt6000.c b/drivers/media/dvb/frontends/nxt6000.c index a55fd99a6383..9708d4732e17 100644 --- a/drivers/media/dvb/frontends/nxt6000.c +++ b/drivers/media/dvb/frontends/nxt6000.c @@ -1,6 +1,6 @@ -/* +/* NxtWave Communications - NXT6000 demodulator driver - + Copyright (C) 2002-2003 Florian Schirmer <jolt@tuxbox.org> Copyright (C) 2003 Paul Andreassen <paul@andreassen.com.au> @@ -17,8 +17,7 @@ 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 <linux/init.h> #include <linux/kernel.h> @@ -33,16 +32,11 @@ struct nxt6000_state { - - struct i2c_adapter *i2c; - + struct i2c_adapter* i2c; struct dvb_frontend_ops ops; - /* configuration settings */ const struct nxt6000_config* config; - struct dvb_frontend frontend; - }; static int debug = 0; @@ -50,10 +44,10 @@ static int debug = 0; static int nxt6000_writereg(struct nxt6000_state* state, u8 reg, u8 data) { - u8 buf[] = {reg, data}; + u8 buf[] = { reg, data }; struct i2c_msg msg = {.addr = state->config->demod_address,.flags = 0,.buf = buf,.len = 2 }; int ret; - + if ((ret = i2c_transfer(state->i2c, &msg, 1)) != 1) dprintk("nxt6000: nxt6000_write error (reg: 0x%02X, data: 0x%02X, ret: %d)\n", reg, data, ret); @@ -63,18 +57,18 @@ static int nxt6000_writereg(struct nxt6000_state* state, u8 reg, u8 data) static u8 nxt6000_readreg(struct nxt6000_state* state, u8 reg) { int ret; - u8 b0[] = {reg}; - u8 b1[] = {0}; + u8 b0[] = { reg }; + u8 b1[] = { 0 }; struct i2c_msg msgs[] = { {.addr = state->config->demod_address,.flags = 0,.buf = b0,.len = 1}, {.addr = state->config->demod_address,.flags = I2C_M_RD,.buf = b1,.len = 1} }; ret = i2c_transfer(state->i2c, msgs, 2); - + if (ret != 2) dprintk("nxt6000: nxt6000_read error (reg: 0x%02X, ret: %d)\n", reg, ret); - + return b1[0]; } @@ -83,7 +77,7 @@ static void nxt6000_reset(struct nxt6000_state* state) u8 val; val = nxt6000_readreg(state, OFDM_COR_CTL); - + nxt6000_writereg(state, OFDM_COR_CTL, val & ~COREACT); nxt6000_writereg(state, OFDM_COR_CTL, val | COREACT); } @@ -93,71 +87,65 @@ static int nxt6000_set_bandwidth(struct nxt6000_state* state, fe_bandwidth_t ban u16 nominal_rate; int result; - switch(bandwidth) { - - case BANDWIDTH_6_MHZ: - - nominal_rate = 0x55B7; - - break; - - case BANDWIDTH_7_MHZ: + switch (bandwidth) { - nominal_rate = 0x6400; - - break; + case BANDWIDTH_6_MHZ: + nominal_rate = 0x55B7; + break; - case BANDWIDTH_8_MHZ: + case BANDWIDTH_7_MHZ: + nominal_rate = 0x6400; + break; - nominal_rate = 0x7249; - - break; + case BANDWIDTH_8_MHZ: + nominal_rate = 0x7249; + break; - default: - return -EINVAL; + default: + return -EINVAL; } if ((result = nxt6000_writereg(state, OFDM_TRL_NOMINALRATE_1, nominal_rate & 0xFF)) < 0) return result; - + return nxt6000_writereg(state, OFDM_TRL_NOMINALRATE_2, (nominal_rate >> 8) & 0xFF); } static int nxt6000_set_guard_interval(struct nxt6000_state* state, fe_guard_interval_t guard_interval) { - switch(guard_interval) { - - case GUARD_INTERVAL_1_32: + switch (guard_interval) { + + case GUARD_INTERVAL_1_32: return nxt6000_writereg(state, OFDM_COR_MODEGUARD, 0x00 | (nxt6000_readreg(state, OFDM_COR_MODEGUARD) & ~0x03)); - case GUARD_INTERVAL_1_16: + case GUARD_INTERVAL_1_16: return nxt6000_writereg(state, OFDM_COR_MODEGUARD, 0x01 | (nxt6000_readreg(state, OFDM_COR_MODEGUARD) & ~0x03)); - case GUARD_INTERVAL_AUTO: - case GUARD_INTERVAL_1_8: + case GUARD_INTERVAL_AUTO: + case GUARD_INTERVAL_1_8: return nxt6000_writereg(state, OFDM_COR_MODEGUARD, 0x02 | (nxt6000_readreg(state, OFDM_COR_MODEGUARD) & ~0x03)); - case GUARD_INTERVAL_1_4: + case GUARD_INTERVAL_1_4: return nxt6000_writereg(state, OFDM_COR_MODEGUARD, 0x03 | (nxt6000_readreg(state, OFDM_COR_MODEGUARD) & ~0x03)); - - default: - return -EINVAL; + + default: + return -EINVAL; } } static int nxt6000_set_inversion(struct nxt6000_state* state, fe_spectral_inversion_t inversion) { - switch(inversion) { - - case INVERSION_OFF: + switch (inversion) { + + case INVERSION_OFF: return nxt6000_writereg(state, OFDM_ITB_CTL, 0x00); - - case INVERSION_ON: + + case INVERSION_ON: return nxt6000_writereg(state, OFDM_ITB_CTL, ITBINV); - default: - return -EINVAL; - + default: + return -EINVAL; + } } @@ -165,31 +153,31 @@ static int nxt6000_set_transmission_mode(struct nxt6000_state* state, fe_transmi { int result; - switch(transmission_mode) { + switch (transmission_mode) { - case TRANSMISSION_MODE_2K: + case TRANSMISSION_MODE_2K: if ((result = nxt6000_writereg(state, EN_DMD_RACQ, 0x00 | (nxt6000_readreg(state, EN_DMD_RACQ) & ~0x03))) < 0) - return result; - + return result; + return nxt6000_writereg(state, OFDM_COR_MODEGUARD, (0x00 << 2) | (nxt6000_readreg(state, OFDM_COR_MODEGUARD) & ~0x04)); - case TRANSMISSION_MODE_8K: - case TRANSMISSION_MODE_AUTO: + case TRANSMISSION_MODE_8K: + case TRANSMISSION_MODE_AUTO: if ((result = nxt6000_writereg(state, EN_DMD_RACQ, 0x02 | (nxt6000_readreg(state, EN_DMD_RACQ) & ~0x03))) < 0) - return result; + return result; return nxt6000_writereg(state, OFDM_COR_MODEGUARD, (0x01 << 2) | (nxt6000_readreg(state, OFDM_COR_MODEGUARD) & ~0x04)); - default: - return -EINVAL; - + default: + return -EINVAL; + } } static void nxt6000_setup(struct dvb_frontend* fe) { struct nxt6000_state* state = (struct nxt6000_state*) fe->demodulator_priv; - + nxt6000_writereg(state, RS_COR_SYNC_PARAM, SYNC_PARAM); nxt6000_writereg(state, BER_CTRL, /*(1 << 2) | */ (0x01 << 1) | 0x01); nxt6000_writereg(state, VIT_COR_CTL, VIT_COR_RESYNC); @@ -214,7 +202,7 @@ static void nxt6000_setup(struct dvb_frontend* fe) nxt6000_writereg(state, SUB_DIAG_MODE_SEL, 0); nxt6000_writereg(state, TS_FORMAT, 0); - + if (state->config->pll_init) { nxt6000_writereg(state, ENABLE_TUNER_IIC, 0x01); /* open i2c bus switch */ state->config->pll_init(fe); @@ -241,7 +229,7 @@ static void nxt6000_dump_status(struct nxt6000_state *state) printk("NXT6000 status:"); val = nxt6000_readreg(state, RS_COR_STAT); - + printk(" DATA DESCR LOCK: %d,", val & 0x01); printk(" DATA SYNC LOCK: %d,", (val >> 1) & 0x01); @@ -249,91 +237,73 @@ static void nxt6000_dump_status(struct nxt6000_state *state) printk(" VITERBI LOCK: %d,", (val >> 7) & 0x01); - switch((val >> 4) & 0x07) { - - case 0x00: - - printk(" VITERBI CODERATE: 1/2,"); - - break; - - case 0x01: - - printk(" VITERBI CODERATE: 2/3,"); - - break; - - case 0x02: - - printk(" VITERBI CODERATE: 3/4,"); - - break; - - case 0x03: - printk(" VITERBI CODERATE: 5/6,"); - break; - - case 0x04: - printk(" VITERBI CODERATE: 7/8,"); - break; - - default: - - printk(" VITERBI CODERATE: Reserved,"); - + switch ((val >> 4) & 0x07) { + + case 0x00: + printk(" VITERBI CODERATE: 1/2,"); + break; + + case 0x01: + printk(" VITERBI CODERATE: 2/3,"); + break; + + case 0x02: + printk(" VITERBI CODERATE: 3/4,"); + break; + + case 0x03: + printk(" VITERBI CODERATE: 5/6,"); + break; + + case 0x04: + printk(" VITERBI CODERATE: 7/8,"); + break; + + default: + printk(" VITERBI CODERATE: Reserved,"); + } val = nxt6000_readreg(state, OFDM_COR_STAT); - + printk(" CHCTrack: %d,", (val >> 7) & 0x01); printk(" TPSLock: %d,", (val >> 6) & 0x01); printk(" SYRLock: %d,", (val >> 5) & 0x01); printk(" AGCLock: %d,", (val >> 4) & 0x01); - switch(val & 0x0F) { - - case 0x00: - - printk(" CoreState: IDLE,"); - - break; - - case 0x02: - - printk(" CoreState: WAIT_AGC,"); - - break; - - case 0x03: - - printk(" CoreState: WAIT_SYR,"); - - break; - - case 0x04: - printk(" CoreState: WAIT_PPM,"); - break; - - case 0x01: - printk(" CoreState: WAIT_TRL,"); - break; - - case 0x05: - - printk(" CoreState: WAIT_TPS,"); - - break; - - case 0x06: - - printk(" CoreState: MONITOR_TPS,"); - - break; - - default: - - printk(" CoreState: Reserved,"); - + switch (val & 0x0F) { + + case 0x00: + printk(" CoreState: IDLE,"); + break; + + case 0x02: + printk(" CoreState: WAIT_AGC,"); + break; + + case 0x03: + printk(" CoreState: WAIT_SYR,"); + break; + + case 0x04: + printk(" CoreState: WAIT_PPM,"); + break; + + case 0x01: + printk(" CoreState: WAIT_TRL,"); + break; + + case 0x05: + printk(" CoreState: WAIT_TPS,"); + break; + + case 0x06: + printk(" CoreState: MONITOR_TPS,"); + break; + + default: + printk(" CoreState: Reserved,"); + } val = nxt6000_readreg(state, OFDM_SYR_STAT); @@ -341,133 +311,105 @@ static void nxt6000_dump_status(struct nxt6000_state *state) printk(" SYRLock: %d,", (val >> 4) & 0x01); printk(" SYRMode: %s,", (val >> 2) & 0x01 ? "8K" : "2K"); - switch((val >> 4) & 0x03) { - - case 0x00: - - printk(" SYRGuard: 1/32,"); - - break; - - case 0x01: - - printk(" SYRGuard: 1/16,"); - - break; - - case 0x02: - - printk(" SYRGuard: 1/8,"); - - break; - - case 0x03: - printk(" SYRGuard: 1/4,"); - break; + switch ((val >> 4) & 0x03) { + + case 0x00: + printk(" SYRGuard: 1/32,"); + break; + + case 0x01: + printk(" SYRGuard: 1/16,"); + break; + + case 0x02: + printk(" SYRGuard: 1/8,"); + break; + + case 0x03: + printk(" SYRGuard: 1/4,"); + break; } val = nxt6000_readreg(state, OFDM_TPS_RCVD_3); - - switch((val >> 4) & 0x07) { - - case 0x00: - - printk(" TPSLP: 1/2,"); - - break; - - case 0x01: - - printk(" TPSLP: 2/3,"); - - break; - - case 0x02: - - printk(" TPSLP: 3/4,"); - - break; - - case 0x03: - printk(" TPSLP: 5/6,"); - break; - - case 0x04: - printk(" TPSLP: 7/8,"); - break; - - default: - - printk(" TPSLP: Reserved,"); - + + switch ((val >> 4) & 0x07) { + + case 0x00: + printk(" TPSLP: 1/2,"); + break; + + case 0x01: + printk(" TPSLP: 2/3,"); + break; + + case 0x02: + printk(" TPSLP: 3/4,"); + break; + + case 0x03: + printk(" TPSLP: 5/6,"); + break; + + case 0x04: + printk(" TPSLP: 7/8,"); + break; + + default: + printk(" TPSLP: Reserved,"); + } - switch(val & 0x07) { - - case 0x00: - - printk(" TPSHP: 1/2,"); - - break; - - case 0x01: - - printk(" TPSHP: 2/3,"); - - break; - - case 0x02: - - printk(" TPSHP: 3/4,"); - - break; - - case 0x03: - printk(" TPSHP: 5/6,"); - break; - - case 0x04: - printk(" TPSHP: 7/8,"); - break; - - default: - - printk(" TPSHP: Reserved,"); - + switch (val & 0x07) { + + case 0x00: + printk(" TPSHP: 1/2,"); + break; + + case 0x01: + printk(" TPSHP: 2/3,"); + break; + + case 0x02: + printk(" TPSHP: 3/4,"); + break; + + case 0x03: + printk(" TPSHP: 5/6,"); + break; + + case 0x04: + printk(" TPSHP: 7/8,"); + break; + + default: + printk(" TPSHP: Reserved,"); + } val = nxt6000_readreg(state, OFDM_TPS_RCVD_4); - + printk(" TPSMode: %s,", val & 0x01 ? "8K" : "2K"); - - switch((val >> 4) & 0x03) { - - case 0x00: - - printk(" TPSGuard: 1/32,"); - - break; - - case 0x01: - - printk(" TPSGuard: 1/16,"); - - break; - - case 0x02: - - printk(" TPSGuard: 1/8,"); - - break; - - case 0x03: - - printk(" TPSGuard: 1/4,"); - - break; - + + switch ((val >> 4) & 0x03) { + + case 0x00: + printk(" TPSGuard: 1/32,"); + break; + + case 0x01: + printk(" TPSGuard: 1/16,"); + break; + + case 0x02: + printk(" TPSGuard: 1/8,"); + break; + + case 0x03: + printk(" TPSGuard: 1/4,"); + break; + } - + /* Strange magic required to gain access to RF_AGC_STATUS */ nxt6000_readreg(state, RF_AGC_VAL_1); val = nxt6000_readreg(state, RF_AGC_STATUS); @@ -477,87 +419,75 @@ static void nxt6000_dump_status(struct nxt6000_state *state) printk("\n"); } - - - - - - - - - - static int nxt6000_read_status(struct dvb_frontend* fe, fe_status_t* status) { - u8 core_status; + u8 core_status; struct nxt6000_state* state = (struct nxt6000_state*) fe->demodulator_priv; - *status = 0; - + *status = 0; + core_status = nxt6000_readreg(state, OFDM_COR_STAT); - if (core_status & AGCLOCKED) - *status |= FE_HAS_SIGNAL; + if (core_status & AGCLOCKED) + *status |= FE_HAS_SIGNAL; if (nxt6000_readreg(state, OFDM_SYR_STAT) & GI14_SYR_LOCK) - *status |= FE_HAS_CARRIER; + *status |= FE_HAS_CARRIER; if (nxt6000_readreg(state, VIT_SYNC_STATUS) & VITINSYNC) - *status |= FE_HAS_VITERBI; + *status |= FE_HAS_VITERBI; if (nxt6000_readreg(state, RS_COR_STAT) & RSCORESTATUS) - *status |= FE_HAS_SYNC; - - if ((core_status & TPSLOCKED) && (*status == (FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_SYNC))) - *status |= FE_HAS_LOCK; - - if (debug) + *status |= FE_HAS_SYNC; + + if ((core_status & TPSLOCKED) && (*status == (FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_SYNC))) + *status |= FE_HAS_LOCK; + + if (debug) nxt6000_dump_status(state); - return 0; - } - + return 0; +} + static int nxt6000_init(struct dvb_frontend* fe) - { +{ struct nxt6000_state* state = (struct nxt6000_state*) fe->demodulator_priv; nxt6000_reset(state); nxt6000_setup(fe); - - return 0; - } - + + return 0; +} static int nxt6000_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *param) - { +{ struct nxt6000_state* state = (struct nxt6000_state*) fe->demodulator_priv; - int result; + int result; nxt6000_writereg(state, ENABLE_TUNER_IIC, 0x01); /* open i2c bus switch */ state->config->pll_set(fe, param); nxt6000_writereg(state, ENABLE_TUNER_IIC, 0x00); /* close i2c bus switch */ if ((result = nxt6000_set_bandwidth(state, param->u.ofdm.bandwidth)) < 0) - return result; + return result; if ((result = nxt6000_set_guard_interval(state, param->u.ofdm.guard_interval)) < 0) - return result; + return result; if ((result = nxt6000_set_transmission_mode(state, param->u.ofdm.transmission_mode)) < 0) - return result; + return result; if ((result = nxt6000_set_inversion(state, param->inversion)) < 0) - return result; + return result; return 0; -} - +} static void nxt6000_release(struct dvb_frontend* fe) { struct nxt6000_state* state = (struct nxt6000_state*) fe->demodulator_priv; kfree(state); - } - +} + static struct dvb_frontend_ops nxt6000_ops; - + struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config, struct i2c_adapter* i2c) { @@ -583,7 +513,7 @@ struct dvb_frontend* nxt6000_attach(const struct nxt6000_config* config, error: if (state) kfree(state); return NULL; - } +} static struct dvb_frontend_ops nxt6000_ops = { @@ -608,9 +538,9 @@ static struct dvb_frontend_ops nxt6000_ops = { .release = nxt6000_release, .init = nxt6000_init, - + .set_frontend = nxt6000_set_frontend, - + .read_status = nxt6000_read_status, }; diff --git a/drivers/media/dvb/frontends/sp8870.c b/drivers/media/dvb/frontends/sp8870.c index 72338d461ba5..538cb03ee3b5 100644 --- a/drivers/media/dvb/frontends/sp8870.c +++ b/drivers/media/dvb/frontends/sp8870.c @@ -130,7 +130,7 @@ static int sp8870_firmware_upload (struct sp8870_state* state, const struct firm msg.flags = 0; msg.buf = tx_buf; msg.len = tx_len + 2; - if ((err = i2c_transfer (state->i2c, &msg, 1)) != 1) { + if ((err = i2c_transfer (state->i2c, &msg, 1)) != 1) { printk("%s: firmware upload failed!\n", __FUNCTION__); printk ("%s: i2c error (err == %i)\n", __FUNCTION__, err); return err; diff --git a/drivers/media/dvb/frontends/sp887x.c b/drivers/media/dvb/frontends/sp887x.c index 40ae6459251e..f34c010d0e2e 100644 --- a/drivers/media/dvb/frontends/sp887x.c +++ b/drivers/media/dvb/frontends/sp887x.c @@ -20,13 +20,9 @@ struct sp887x_state { - struct i2c_adapter* i2c; - struct dvb_frontend_ops ops; - const struct sp887x_config* config; - struct dvb_frontend frontend; /* demodulator private data */ @@ -315,8 +311,8 @@ static void divide (int n, int d, int *quotient_i, int *quotient_f) } static void sp887x_correct_offsets (struct sp887x_state* state, - struct dvb_frontend_parameters *p, - int actual_freq) + struct dvb_frontend_parameters *p, + int actual_freq) { static const u32 srate_correction [] = { 1879617, 4544878, 8098561 }; int bw_index = p->u.ofdm.bandwidth - BANDWIDTH_8_MHZ; @@ -345,21 +341,8 @@ static void sp887x_correct_offsets (struct sp887x_state* state, sp887x_writereg(state, 0x30a, frequency_shift & 0xfff); } - - - - - - - - - - - - - static int sp887x_setup_frontend_parameters (struct dvb_frontend* fe, - struct dvb_frontend_parameters *p) + struct dvb_frontend_parameters *p) { struct sp887x_state* state = (struct sp887x_state*) fe->demodulator_priv; int actual_freq, err; @@ -421,73 +404,73 @@ static int sp887x_setup_frontend_parameters (struct dvb_frontend* fe, } static int sp887x_read_status(struct dvb_frontend* fe, fe_status_t* status) - { +{ struct sp887x_state* state = (struct sp887x_state*) fe->demodulator_priv; u16 snr12 = sp887x_readreg(state, 0xf16); u16 sync0x200 = sp887x_readreg(state, 0x200); u16 sync0xf17 = sp887x_readreg(state, 0xf17); - *status = 0; + *status = 0; - if (snr12 > 0x00f) - *status |= FE_HAS_SIGNAL; + if (snr12 > 0x00f) + *status |= FE_HAS_SIGNAL; - //if (sync0x200 & 0x004) - // *status |= FE_HAS_SYNC | FE_HAS_CARRIER; + //if (sync0x200 & 0x004) + // *status |= FE_HAS_SYNC | FE_HAS_CARRIER; - //if (sync0x200 & 0x008) - // *status |= FE_HAS_VITERBI; + //if (sync0x200 & 0x008) + // *status |= FE_HAS_VITERBI; - if ((sync0xf17 & 0x00f) == 0x002) { - *status |= FE_HAS_LOCK; - *status |= FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_CARRIER; - } + if ((sync0xf17 & 0x00f) == 0x002) { + *status |= FE_HAS_LOCK; + *status |= FE_HAS_VITERBI | FE_HAS_SYNC | FE_HAS_CARRIER; + } - if (sync0x200 & 0x001) { /* tuner adjustment requested...*/ - int steps = (sync0x200 >> 4) & 0x00f; - if (steps & 0x008) - steps = -steps; - dprintk("sp887x: implement tuner adjustment (%+i steps)!!\n", - steps); - } + if (sync0x200 & 0x001) { /* tuner adjustment requested...*/ + int steps = (sync0x200 >> 4) & 0x00f; + if (steps & 0x008) + steps = -steps; + dprintk("sp887x: implement tuner adjustment (%+i steps)!!\n", + steps); + } return 0; - } +} static int sp887x_read_ber(struct dvb_frontend* fe, u32* ber) - { +{ struct sp887x_state* state = (struct sp887x_state*) fe->demodulator_priv; *ber = (sp887x_readreg(state, 0xc08) & 0x3f) | (sp887x_readreg(state, 0xc07) << 6); sp887x_writereg(state, 0xc08, 0x000); sp887x_writereg(state, 0xc07, 0x000); - if (*ber >= 0x3fff0) - *ber = ~0; + if (*ber >= 0x3fff0) + *ber = ~0; return 0; - } +} static int sp887x_read_signal_strength(struct dvb_frontend* fe, u16* strength) - { +{ struct sp887x_state* state = (struct sp887x_state*) fe->demodulator_priv; u16 snr12 = sp887x_readreg(state, 0xf16); - u32 signal = 3 * (snr12 << 4); + u32 signal = 3 * (snr12 << 4); *strength = (signal < 0xffff) ? signal : 0xffff; return 0; - } +} static int sp887x_read_snr(struct dvb_frontend* fe, u16* snr) - { +{ struct sp887x_state* state = (struct sp887x_state*) fe->demodulator_priv; u16 snr12 = sp887x_readreg(state, 0xf16); *snr = (snr12 << 4) | (snr12 >> 8); - return 0; - } + return 0; +} static int sp887x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) { @@ -497,7 +480,7 @@ static int sp887x_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) if (*ucblocks == 0xfff) *ucblocks = ~0; - return 0; + return 0; } static int sp887x_sleep(struct dvb_frontend* fe) @@ -508,7 +491,7 @@ static int sp887x_sleep(struct dvb_frontend* fe) sp887x_writereg(state, 0xc18, 0x000); return 0; - } +} static int sp887x_init(struct dvb_frontend* fe) { @@ -517,20 +500,20 @@ static int sp887x_init(struct dvb_frontend* fe) int ret; if (!state->initialised) { - /* request the firmware, this will block until someone uploads it */ + /* request the firmware, this will block until someone uploads it */ printk("sp887x: waiting for firmware upload (%s)...\n", SP887X_DEFAULT_FIRMWARE); ret = state->config->request_firmware(fe, &fw, SP887X_DEFAULT_FIRMWARE); - if (ret) { - printk("sp887x: no firmware upload (timeout or file not found?)\n"); + if (ret) { + printk("sp887x: no firmware upload (timeout or file not found?)\n"); return ret; - } + } ret = sp887x_initial_setup(fe, fw); - if (ret) { - printk("sp887x: writing firmware to device failed\n"); + if (ret) { + printk("sp887x: writing firmware to device failed\n"); release_firmware(fw); return ret; - } + } printk("sp887x: firmware upload complete\n"); state->initialised = 1; } diff --git a/drivers/media/dvb/frontends/stv0297.c b/drivers/media/dvb/frontends/stv0297.c index b51a6d2565c5..65255113f1c6 100644 --- a/drivers/media/dvb/frontends/stv0297.c +++ b/drivers/media/dvb/frontends/stv0297.c @@ -29,14 +29,10 @@ #include "stv0297.h" struct stv0297_state { - - struct i2c_adapter* i2c; - - struct dvb_frontend_ops ops; - - const struct stv0297_config* config; - - struct dvb_frontend frontend; + struct i2c_adapter *i2c; + struct dvb_frontend_ops ops; + const struct stv0297_config *config; + struct dvb_frontend frontend; unsigned long base_freq; u8 pwm; @@ -50,164 +46,164 @@ struct stv0297_state { #define STV0297_CLOCK_KHZ 28900 -static u8 init_tab [] = { - 0x00, 0x09, - 0x01, 0x69, - 0x03, 0x00, - 0x04, 0x00, - 0x07, 0x00, - 0x08, 0x00, - 0x20, 0x00, - 0x21, 0x40, - 0x22, 0x00, - 0x23, 0x00, - 0x24, 0x40, - 0x25, 0x88, - 0x30, 0xff, - 0x31, 0x00, - 0x32, 0xff, - 0x33, 0x00, - 0x34, 0x50, - 0x35, 0x7f, - 0x36, 0x00, - 0x37, 0x20, - 0x38, 0x00, - 0x40, 0x1c, - 0x41, 0xff, - 0x42, 0x29, +static u8 init_tab[] = { + 0x00, 0x09, + 0x01, 0x69, + 0x03, 0x00, + 0x04, 0x00, + 0x07, 0x00, + 0x08, 0x00, + 0x20, 0x00, + 0x21, 0x40, + 0x22, 0x00, + 0x23, 0x00, + 0x24, 0x40, + 0x25, 0x88, + 0x30, 0xff, + 0x31, 0x00, + 0x32, 0xff, + 0x33, 0x00, + 0x34, 0x50, + 0x35, 0x7f, + 0x36, 0x00, + 0x37, 0x20, + 0x38, 0x00, + 0x40, 0x1c, + 0x41, 0xff, + 0x42, 0x29, 0x43, 0x00, - 0x44, 0xff, - 0x45, 0x00, - 0x46, 0x00, - 0x49, 0x04, - 0x4a, 0xff, - 0x4b, 0x7f, - 0x52, 0x30, - 0x55, 0xae, - 0x56, 0x47, - 0x57, 0xe1, - 0x58, 0x3a, - 0x5a, 0x1e, - 0x5b, 0x34, - 0x60, 0x00, - 0x63, 0x00, - 0x64, 0x00, - 0x65, 0x00, - 0x66, 0x00, - 0x67, 0x00, - 0x68, 0x00, - 0x69, 0x00, - 0x6a, 0x02, - 0x6b, 0x00, - 0x70, 0xff, - 0x71, 0x00, - 0x72, 0x00, - 0x73, 0x00, - 0x74, 0x0c, - 0x80, 0x00, - 0x81, 0x00, - 0x82, 0x00, - 0x83, 0x00, - 0x84, 0x04, - 0x85, 0x80, - 0x86, 0x24, - 0x87, 0x78, - 0x88, 0x00, - 0x89, 0x00, - 0x90, 0x01, - 0x91, 0x01, - 0xa0, 0x00, - 0xa1, 0x00, - 0xa2, 0x00, - 0xb0, 0x91, - 0xb1, 0x0b, - 0xc0, 0x53, - 0xc1, 0x70, - 0xc2, 0x12, - 0xd0, 0x00, - 0xd1, 0x00, - 0xd2, 0x00, - 0xd3, 0x00, - 0xd4, 0x00, - 0xd5, 0x00, - 0xde, 0x00, - 0xdf, 0x00, - 0x61, 0x49, - 0x62, 0x0b, - 0x53, 0x08, - 0x59, 0x08, + 0x44, 0xff, + 0x45, 0x00, + 0x46, 0x00, + 0x49, 0x04, + 0x4a, 0xff, + 0x4b, 0x7f, + 0x52, 0x30, + 0x55, 0xae, + 0x56, 0x47, + 0x57, 0xe1, + 0x58, 0x3a, + 0x5a, 0x1e, + 0x5b, 0x34, + 0x60, 0x00, + 0x63, 0x00, + 0x64, 0x00, + 0x65, 0x00, + 0x66, 0x00, + 0x67, 0x00, + 0x68, 0x00, + 0x69, 0x00, + 0x6a, 0x02, + 0x6b, 0x00, + 0x70, 0xff, + 0x71, 0x00, + 0x72, 0x00, + 0x73, 0x00, + 0x74, 0x0c, + 0x80, 0x00, + 0x81, 0x00, + 0x82, 0x00, + 0x83, 0x00, + 0x84, 0x04, + 0x85, 0x80, + 0x86, 0x24, + 0x87, 0x78, + 0x88, 0x00, + 0x89, 0x00, + 0x90, 0x01, + 0x91, 0x01, + 0xa0, 0x00, + 0xa1, 0x00, + 0xa2, 0x00, + 0xb0, 0x91, + 0xb1, 0x0b, + 0xc0, 0x53, + 0xc1, 0x70, + 0xc2, 0x12, + 0xd0, 0x00, + 0xd1, 0x00, + 0xd2, 0x00, + 0xd3, 0x00, + 0xd4, 0x00, + 0xd5, 0x00, + 0xde, 0x00, + 0xdf, 0x00, + 0x61, 0x49, + 0x62, 0x0b, + 0x53, 0x08, + 0x59, 0x08, }; -static int stv0297_writereg (struct stv0297_state* state, u8 reg, u8 data) +static int stv0297_writereg(struct stv0297_state *state, u8 reg, u8 data) { - int ret; - u8 buf [] = { reg, data }; - struct i2c_msg msg = { .addr = state->config->demod_address, .flags = 0, .buf = buf, .len = 2 }; + int ret; + u8 buf[] = { reg, data }; + struct i2c_msg msg = {.addr = state->config->demod_address,.flags = 0,.buf = buf,.len = 2 }; - ret = i2c_transfer (state->i2c, &msg, 1); + ret = i2c_transfer(state->i2c, &msg, 1); - if (ret != 1) - dprintk("%s: writereg error (reg == 0x%02x, val == 0x%02x, " - "ret == %i)\n", __FUNCTION__, reg, data, ret); + if (ret != 1) + dprintk("%s: writereg error (reg == 0x%02x, val == 0x%02x, " + "ret == %i)\n", __FUNCTION__, reg, data, ret); - return (ret != 1) ? -1 : 0; + return (ret != 1) ? -1 : 0; } -static int stv0297_readreg (struct stv0297_state* state, u8 reg) +static int stv0297_readreg(struct stv0297_state *state, u8 reg) { - int ret; - u8 b0[] = { reg }; - u8 b1[] = { 0 }; + int ret; + u8 b0[] = { reg }; + u8 b1[] = { 0 }; struct i2c_msg msg[] = { {.addr = state->config->demod_address,.flags = 0,.buf = b0,.len = 1}, {.addr = state->config->demod_address,.flags = I2C_M_RD,.buf = b1,.len = 1} }; - // this device needs a STOP between the register and data - if ((ret = i2c_transfer (state->i2c, &msg[0], 1)) != 1) { + // this device needs a STOP between the register and data + if ((ret = i2c_transfer(state->i2c, &msg[0], 1)) != 1) { dprintk("%s: readreg error (reg == 0x%02x, ret == %i)\n", __FUNCTION__, reg, ret); - return -1; - } - if ((ret = i2c_transfer (state->i2c, &msg[1], 1)) != 1) { + return -1; + } + if ((ret = i2c_transfer(state->i2c, &msg[1], 1)) != 1) { dprintk("%s: readreg error (reg == 0x%02x, ret == %i)\n", __FUNCTION__, reg, ret); - return -1; - } + return -1; + } - return b1[0]; + return b1[0]; } -static int stv0297_writereg_mask (struct stv0297_state* state, u8 reg, u8 mask, u8 data) +static int stv0297_writereg_mask(struct stv0297_state *state, u8 reg, u8 mask, u8 data) { - int val; + int val; - val = stv0297_readreg(state, reg); - val &= ~mask; - val |= (data & mask); - stv0297_writereg(state, reg, val); + val = stv0297_readreg(state, reg); + val &= ~mask; + val |= (data & mask); + stv0297_writereg(state, reg, val); - return 0; + return 0; } -static int stv0297_readregs (struct stv0297_state* state, u8 reg1, u8 *b, u8 len) +static int stv0297_readregs(struct stv0297_state *state, u8 reg1, u8 * b, u8 len) { - int ret; + int ret; struct i2c_msg msg[] = { {.addr = state->config->demod_address,.flags = 0,.buf = ®1,.len = 1}, {.addr = state->config->demod_address,.flags = I2C_M_RD,.buf = b,.len = len} }; - // this device needs a STOP between the register and data - if ((ret = i2c_transfer (state->i2c, &msg[0], 1)) != 1) { + // this device needs a STOP between the register and data + if ((ret = i2c_transfer(state->i2c, &msg[0], 1)) != 1) { dprintk("%s: readreg error (reg == 0x%02x, ret == %i)\n", __FUNCTION__, reg1, ret); - return -1; - } - if ((ret = i2c_transfer (state->i2c, &msg[1], 1)) != 1) { + return -1; + } + if ((ret = i2c_transfer(state->i2c, &msg[1], 1)) != 1) { dprintk("%s: readreg error (reg == 0x%02x, ret == %i)\n", __FUNCTION__, reg1, ret); - return -1; - } + return -1; + } - return 0; + return 0; } static u32 stv0297_get_symbolrate(struct stv0297_state *state) @@ -233,10 +229,10 @@ static void stv0297_set_symbolrate(struct stv0297_state *state, u32 srate) tmp = tmp / (STV0297_CLOCK_KHZ / 4); /* 1/4 = 2^-2 */ tmp = tmp * 8192L; /* 8192 = 2^13 */ - stv0297_writereg (state, 0x55,(unsigned char)(tmp & 0xFF)); - stv0297_writereg (state, 0x56,(unsigned char)(tmp>> 8)); - stv0297_writereg (state, 0x57,(unsigned char)(tmp>>16)); - stv0297_writereg (state, 0x58,(unsigned char)(tmp>>24)); + stv0297_writereg(state, 0x55, (unsigned char) (tmp & 0xFF)); + stv0297_writereg(state, 0x56, (unsigned char) (tmp >> 8)); + stv0297_writereg(state, 0x57, (unsigned char) (tmp >> 16)); + stv0297_writereg(state, 0x58, (unsigned char) (tmp >> 24)); } static void stv0297_set_sweeprate(struct stv0297_state *state, short fshift, long symrate) @@ -247,19 +243,19 @@ static void stv0297_set_sweeprate(struct stv0297_state *state, short fshift, lon tmp /= symrate; tmp *= 1024; /* 1024 = 2*10 */ - // adjust - if (tmp >= 0) { - tmp += 500000; - } else { - tmp -= 500000; - } + // adjust + if (tmp >= 0) { + tmp += 500000; + } else { + tmp -= 500000; + } tmp /= 1000000; - stv0297_writereg(state, 0x60, tmp & 0xFF); - stv0297_writereg_mask(state, 0x69, 0xF0, (tmp >> 4) & 0xf0); + stv0297_writereg(state, 0x60, tmp & 0xFF); + stv0297_writereg_mask(state, 0x69, 0xF0, (tmp >> 4) & 0xf0); } -static void stv0297_set_carrieroffset(struct stv0297_state* state, long offset) +static void stv0297_set_carrieroffset(struct stv0297_state *state, long offset) { long tmp; @@ -276,11 +272,11 @@ static void stv0297_set_carrieroffset(struct stv0297_state* state, long offset) } /* -static long stv0297_get_carrieroffset(struct stv0297_state* state) +static long stv0297_get_carrieroffset(struct stv0297_state *state) { s64 tmp; - stv0297_writereg(state,0x6B, 0x00); + stv0297_writereg(state, 0x6B, 0x00); tmp = stv0297_readreg(state, 0x66); tmp |= (stv0297_readreg(state, 0x67) << 8); @@ -294,7 +290,7 @@ static long stv0297_get_carrieroffset(struct stv0297_state* state) } */ -static void stv0297_set_initialdemodfreq(struct stv0297_state* state, long freq) +static void stv0297_set_initialdemodfreq(struct stv0297_state *state, long freq) { s32 tmp; @@ -306,128 +302,116 @@ static void stv0297_set_initialdemodfreq(struct stv0297_state* state, long freq) if (tmp > 0xffff) tmp = 0xffff; - stv0297_writereg_mask(state, 0x25, 0x80, 0x80); - stv0297_writereg(state, 0x21, tmp >> 8); - stv0297_writereg(state, 0x20, tmp); + stv0297_writereg_mask(state, 0x25, 0x80, 0x80); + stv0297_writereg(state, 0x21, tmp >> 8); + stv0297_writereg(state, 0x20, tmp); } -static int stv0297_set_qam(struct stv0297_state* state, fe_modulation_t modulation) +static int stv0297_set_qam(struct stv0297_state *state, fe_modulation_t modulation) { - int val = 0; + int val = 0; - switch(modulation) { - case QAM_16: - val = 0; - break; + switch (modulation) { + case QAM_16: + val = 0; + break; - case QAM_32: - val = 1; - break; + case QAM_32: + val = 1; + break; - case QAM_64: - val = 4; - break; + case QAM_64: + val = 4; + break; - case QAM_128: - val = 2; - break; + case QAM_128: + val = 2; + break; - case QAM_256: - val = 3; - break; + case QAM_256: + val = 3; + break; - default: - return -EINVAL; - } + default: + return -EINVAL; + } - stv0297_writereg_mask(state, 0x00, 0x70, val << 4); + stv0297_writereg_mask(state, 0x00, 0x70, val << 4); - return 0; + return 0; } -static int stv0297_set_inversion(struct stv0297_state* state, fe_spectral_inversion_t inversion) +static int stv0297_set_inversion(struct stv0297_state *state, fe_spectral_inversion_t inversion) { - int val = 0; + int val = 0; - switch(inversion) { - case INVERSION_OFF: - val = 0; - break; + switch (inversion) { + case INVERSION_OFF: + val = 0; + break; - case INVERSION_ON: - val = 1; - break; + case INVERSION_ON: + val = 1; + break; - default: - return -EINVAL; - } + default: + return -EINVAL; + } - stv0297_writereg_mask(state, 0x83, 0x08, val << 3); + stv0297_writereg_mask(state, 0x83, 0x08, val << 3); - return 0; + return 0; } - - - - - - - - - - - - -int stv0297_enable_plli2c(struct dvb_frontend* fe) +int stv0297_enable_plli2c(struct dvb_frontend *fe) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; - stv0297_writereg(state, 0x87, 0x78); - stv0297_writereg(state, 0x86, 0xc8); + stv0297_writereg(state, 0x87, 0x78); + stv0297_writereg(state, 0x86, 0xc8); - return 0; + return 0; } -static int stv0297_init (struct dvb_frontend* fe) +static int stv0297_init(struct dvb_frontend *fe) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; - int i; + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; + int i; /* soft reset */ - stv0297_writereg_mask(state, 0x80, 1, 1); - stv0297_writereg_mask(state, 0x80, 1, 0); + stv0297_writereg_mask(state, 0x80, 1, 1); + stv0297_writereg_mask(state, 0x80, 1, 0); /* reset deinterleaver */ - stv0297_writereg_mask(state, 0x81, 1, 1); - stv0297_writereg_mask(state, 0x81, 1, 0); + stv0297_writereg_mask(state, 0x81, 1, 1); + stv0297_writereg_mask(state, 0x81, 1, 0); /* load init table */ - for (i=0; i<sizeof(init_tab); i+=2) { - stv0297_writereg (state, init_tab[i], init_tab[i+1]); - } + for (i = 0; i < sizeof(init_tab); i += 2) { + stv0297_writereg(state, init_tab[i], init_tab[i + 1]); + } /* set a dummy symbol rate */ - stv0297_set_symbolrate(state, 6900); + stv0297_set_symbolrate(state, 6900); /* invert AGC1 polarity */ - stv0297_writereg_mask(state, 0x88, 0x10, 0x10); + stv0297_writereg_mask(state, 0x88, 0x10, 0x10); /* setup bit error counting */ - stv0297_writereg_mask(state, 0xA0, 0x80, 0x00); - stv0297_writereg_mask(state, 0xA0, 0x10, 0x00); - stv0297_writereg_mask(state, 0xA0, 0x08, 0x00); - stv0297_writereg_mask(state, 0xA0, 0x07, 0x04); + stv0297_writereg_mask(state, 0xA0, 0x80, 0x00); + stv0297_writereg_mask(state, 0xA0, 0x10, 0x00); + stv0297_writereg_mask(state, 0xA0, 0x08, 0x00); + stv0297_writereg_mask(state, 0xA0, 0x07, 0x04); /* min + max PWM */ - stv0297_writereg(state, 0x4a, 0x00); - stv0297_writereg(state, 0x4b, state->pwm); - msleep(200); + stv0297_writereg(state, 0x4a, 0x00); + stv0297_writereg(state, 0x4b, state->pwm); + msleep(200); if (state->config->pll_init) state->config->pll_init(fe); - return 0; + return 0; } static int stv0297_sleep(struct dvb_frontend *fe) @@ -439,121 +423,121 @@ static int stv0297_sleep(struct dvb_frontend *fe) return 0; } -static int stv0297_read_status(struct dvb_frontend* fe, fe_status_t* status) +static int stv0297_read_status(struct dvb_frontend *fe, fe_status_t * status) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; - u8 sync = stv0297_readreg (state, 0xDF); + u8 sync = stv0297_readreg(state, 0xDF); - *status = 0; - if (sync & 0x80) + *status = 0; + if (sync & 0x80) *status |= FE_HAS_SYNC | FE_HAS_SIGNAL | FE_HAS_CARRIER | FE_HAS_VITERBI | FE_HAS_LOCK; - return 0; + return 0; } -static int stv0297_read_ber(struct dvb_frontend* fe, u32* ber) +static int stv0297_read_ber(struct dvb_frontend *fe, u32 * ber) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; - u8 BER[3]; + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; + u8 BER[3]; - stv0297_writereg (state, 0xA0, 0x80); // Start Counting bit errors for 4096 Bytes - mdelay(25); // Hopefully got 4096 Bytes - stv0297_readregs (state, 0xA0, BER, 3); - mdelay(25); - *ber = (BER[2] << 8 | BER[1]) / ( 8 * 4096); + stv0297_writereg(state, 0xA0, 0x80); // Start Counting bit errors for 4096 Bytes + mdelay(25); // Hopefully got 4096 Bytes + stv0297_readregs(state, 0xA0, BER, 3); + mdelay(25); + *ber = (BER[2] << 8 | BER[1]) / (8 * 4096); - return 0; + return 0; } -static int stv0297_read_signal_strength(struct dvb_frontend* fe, u16* strength) +static int stv0297_read_signal_strength(struct dvb_frontend *fe, u16 * strength) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; - u8 STRENGTH[2]; + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; + u8 STRENGTH[2]; - stv0297_readregs (state, 0x41, STRENGTH, 2); - *strength = (STRENGTH[1] & 0x03) << 8 | STRENGTH[0]; + stv0297_readregs(state, 0x41, STRENGTH, 2); + *strength = (STRENGTH[1] & 0x03) << 8 | STRENGTH[0]; - return 0; + return 0; } -static int stv0297_read_snr(struct dvb_frontend* fe, u16* snr) +static int stv0297_read_snr(struct dvb_frontend *fe, u16 * snr) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; - u8 SNR[2]; + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; + u8 SNR[2]; - stv0297_readregs (state, 0x07, SNR, 2); - *snr = SNR[1] << 8 | SNR[0]; + stv0297_readregs(state, 0x07, SNR, 2); + *snr = SNR[1] << 8 | SNR[0]; - return 0; + return 0; } -static int stv0297_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) +static int stv0297_read_ucblocks(struct dvb_frontend *fe, u32 * ucblocks) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; - *ucblocks = (stv0297_readreg (state, 0xD5) << 8) - | stv0297_readreg (state, 0xD4); + *ucblocks = (stv0297_readreg(state, 0xD5) << 8) + | stv0297_readreg(state, 0xD4); - return 0; + return 0; } -static int stv0297_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters * p) +static int stv0297_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; - int u_threshold; - int initial_u; - int blind_u; - int delay; - int sweeprate; - int carrieroffset; - unsigned long starttime; - unsigned long timeout; + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; + int u_threshold; + int initial_u; + int blind_u; + int delay; + int sweeprate; + int carrieroffset; + unsigned long starttime; + unsigned long timeout; fe_spectral_inversion_t inversion; - switch(p->u.qam.modulation) { - case QAM_16: - case QAM_32: - case QAM_64: - delay = 100; - sweeprate = 1500; - break; - - case QAM_128: - delay = 150; - sweeprate = 1000; - break; - - case QAM_256: - delay = 200; - sweeprate = 500; - break; - - default: - return -EINVAL; - } - - // determine inversion dependant parameters + switch (p->u.qam.modulation) { + case QAM_16: + case QAM_32: + case QAM_64: + delay = 100; + sweeprate = 1500; + break; + + case QAM_128: + delay = 150; + sweeprate = 1000; + break; + + case QAM_256: + delay = 200; + sweeprate = 500; + break; + + default: + return -EINVAL; + } + + // determine inversion dependant parameters inversion = p->inversion; if (state->config->invert) inversion = (inversion == INVERSION_ON) ? INVERSION_OFF : INVERSION_ON; - carrieroffset = -330; + carrieroffset = -330; switch (inversion) { - case INVERSION_OFF: - break; + case INVERSION_OFF: + break; - case INVERSION_ON: - sweeprate = -sweeprate; - carrieroffset = -carrieroffset; - break; + case INVERSION_ON: + sweeprate = -sweeprate; + carrieroffset = -carrieroffset; + break; - default: - return -EINVAL; - } + default: + return -EINVAL; + } stv0297_init(fe); - state->config->pll_set(fe, p); + state->config->pll_set(fe, p); /* clear software interrupts */ stv0297_writereg(state, 0x82, 0x0); @@ -562,163 +546,163 @@ static int stv0297_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_par stv0297_set_initialdemodfreq(state, 7250); /* setup AGC */ - stv0297_writereg_mask(state, 0x43, 0x10, 0x00); - stv0297_writereg(state, 0x41, 0x00); - stv0297_writereg_mask(state, 0x42, 0x03, 0x01); - stv0297_writereg_mask(state, 0x36, 0x60, 0x00); - stv0297_writereg_mask(state, 0x36, 0x18, 0x00); - stv0297_writereg_mask(state, 0x71, 0x80, 0x80); - stv0297_writereg(state, 0x72, 0x00); - stv0297_writereg(state, 0x73, 0x00); - stv0297_writereg_mask(state, 0x74, 0x0F, 0x00); - stv0297_writereg_mask(state, 0x43, 0x08, 0x00); - stv0297_writereg_mask(state, 0x71, 0x80, 0x00); + stv0297_writereg_mask(state, 0x43, 0x10, 0x00); + stv0297_writereg(state, 0x41, 0x00); + stv0297_writereg_mask(state, 0x42, 0x03, 0x01); + stv0297_writereg_mask(state, 0x36, 0x60, 0x00); + stv0297_writereg_mask(state, 0x36, 0x18, 0x00); + stv0297_writereg_mask(state, 0x71, 0x80, 0x80); + stv0297_writereg(state, 0x72, 0x00); + stv0297_writereg(state, 0x73, 0x00); + stv0297_writereg_mask(state, 0x74, 0x0F, 0x00); + stv0297_writereg_mask(state, 0x43, 0x08, 0x00); + stv0297_writereg_mask(state, 0x71, 0x80, 0x00); /* setup STL */ - stv0297_writereg_mask(state, 0x5a, 0x20, 0x20); - stv0297_writereg_mask(state, 0x5b, 0x02, 0x02); - stv0297_writereg_mask(state, 0x5b, 0x02, 0x00); - stv0297_writereg_mask(state, 0x5b, 0x01, 0x00); - stv0297_writereg_mask(state, 0x5a, 0x40, 0x40); + stv0297_writereg_mask(state, 0x5a, 0x20, 0x20); + stv0297_writereg_mask(state, 0x5b, 0x02, 0x02); + stv0297_writereg_mask(state, 0x5b, 0x02, 0x00); + stv0297_writereg_mask(state, 0x5b, 0x01, 0x00); + stv0297_writereg_mask(state, 0x5a, 0x40, 0x40); /* disable frequency sweep */ - stv0297_writereg_mask(state, 0x6a, 0x01, 0x00); + stv0297_writereg_mask(state, 0x6a, 0x01, 0x00); /* reset deinterleaver */ - stv0297_writereg_mask(state, 0x81, 0x01, 0x01); - stv0297_writereg_mask(state, 0x81, 0x01, 0x00); + stv0297_writereg_mask(state, 0x81, 0x01, 0x01); + stv0297_writereg_mask(state, 0x81, 0x01, 0x00); /* ??? */ - stv0297_writereg_mask(state, 0x83, 0x20, 0x20); - stv0297_writereg_mask(state, 0x83, 0x20, 0x00); + stv0297_writereg_mask(state, 0x83, 0x20, 0x20); + stv0297_writereg_mask(state, 0x83, 0x20, 0x00); /* reset equaliser */ - u_threshold = stv0297_readreg(state, 0x00) & 0xf; - initial_u = stv0297_readreg(state, 0x01) >> 4; - blind_u = stv0297_readreg(state, 0x01) & 0xf; - stv0297_writereg_mask(state, 0x84, 0x01, 0x01); - stv0297_writereg_mask(state, 0x84, 0x01, 0x00); - stv0297_writereg_mask(state, 0x00, 0x0f, u_threshold); - stv0297_writereg_mask(state, 0x01, 0xf0, initial_u << 4); - stv0297_writereg_mask(state, 0x01, 0x0f, blind_u); + u_threshold = stv0297_readreg(state, 0x00) & 0xf; + initial_u = stv0297_readreg(state, 0x01) >> 4; + blind_u = stv0297_readreg(state, 0x01) & 0xf; + stv0297_writereg_mask(state, 0x84, 0x01, 0x01); + stv0297_writereg_mask(state, 0x84, 0x01, 0x00); + stv0297_writereg_mask(state, 0x00, 0x0f, u_threshold); + stv0297_writereg_mask(state, 0x01, 0xf0, initial_u << 4); + stv0297_writereg_mask(state, 0x01, 0x0f, blind_u); /* data comes from internal A/D */ - stv0297_writereg_mask(state, 0x87, 0x80, 0x00); + stv0297_writereg_mask(state, 0x87, 0x80, 0x00); /* clear phase registers */ - stv0297_writereg(state, 0x63, 0x00); - stv0297_writereg(state, 0x64, 0x00); - stv0297_writereg(state, 0x65, 0x00); - stv0297_writereg(state, 0x66, 0x00); - stv0297_writereg(state, 0x67, 0x00); - stv0297_writereg(state, 0x68, 0x00); - stv0297_writereg_mask(state, 0x69, 0x0f, 0x00); + stv0297_writereg(state, 0x63, 0x00); + stv0297_writereg(state, 0x64, 0x00); + stv0297_writereg(state, 0x65, 0x00); + stv0297_writereg(state, 0x66, 0x00); + stv0297_writereg(state, 0x67, 0x00); + stv0297_writereg(state, 0x68, 0x00); + stv0297_writereg_mask(state, 0x69, 0x0f, 0x00); /* set parameters */ - stv0297_set_qam(state, p->u.qam.modulation); - stv0297_set_symbolrate(state, p->u.qam.symbol_rate/1000); + stv0297_set_qam(state, p->u.qam.modulation); + stv0297_set_symbolrate(state, p->u.qam.symbol_rate / 1000); stv0297_set_sweeprate(state, sweeprate, p->u.qam.symbol_rate / 1000); - stv0297_set_carrieroffset(state, carrieroffset); + stv0297_set_carrieroffset(state, carrieroffset); stv0297_set_inversion(state, inversion); /* kick off lock */ - stv0297_writereg_mask(state, 0x88, 0x08, 0x08); - stv0297_writereg_mask(state, 0x5a, 0x20, 0x00); - stv0297_writereg_mask(state, 0x6a, 0x01, 0x01); - stv0297_writereg_mask(state, 0x43, 0x40, 0x40); - stv0297_writereg_mask(state, 0x5b, 0x30, 0x00); - stv0297_writereg_mask(state, 0x03, 0x0c, 0x0c); - stv0297_writereg_mask(state, 0x03, 0x03, 0x03); - stv0297_writereg_mask(state, 0x43, 0x10, 0x10); + stv0297_writereg_mask(state, 0x88, 0x08, 0x08); + stv0297_writereg_mask(state, 0x5a, 0x20, 0x00); + stv0297_writereg_mask(state, 0x6a, 0x01, 0x01); + stv0297_writereg_mask(state, 0x43, 0x40, 0x40); + stv0297_writereg_mask(state, 0x5b, 0x30, 0x00); + stv0297_writereg_mask(state, 0x03, 0x0c, 0x0c); + stv0297_writereg_mask(state, 0x03, 0x03, 0x03); + stv0297_writereg_mask(state, 0x43, 0x10, 0x10); /* wait for WGAGC lock */ - starttime = jiffies; - timeout = jiffies + (200*HZ)/1000; - while(time_before(jiffies, timeout)) { - msleep(10); + starttime = jiffies; + timeout = jiffies + (200 * HZ) / 1000; + while (time_before(jiffies, timeout)) { + msleep(10); if (stv0297_readreg(state, 0x43) & 0x08) break; - } - if (time_after(jiffies, timeout)) { - goto timeout; - } - msleep(20); + } + if (time_after(jiffies, timeout)) { + goto timeout; + } + msleep(20); /* wait for equaliser partial convergence */ - timeout = jiffies + (50*HZ)/1000; - while(time_before(jiffies, timeout)) { - msleep(10); + timeout = jiffies + (50 * HZ) / 1000; + while (time_before(jiffies, timeout)) { + msleep(10); - if (stv0297_readreg(state, 0x82) & 0x04) { + if (stv0297_readreg(state, 0x82) & 0x04) { break; - } - } + } + } if (time_after(jiffies, timeout)) { - goto timeout; - } + goto timeout; + } /* wait for equaliser full convergence */ - timeout = jiffies + (delay*HZ)/1000; - while(time_before(jiffies, timeout)) { - msleep(10); - - if (stv0297_readreg(state, 0x82) & 0x08) { - break; - } - } - if (time_after(jiffies, timeout)) { - goto timeout; - } + timeout = jiffies + (delay * HZ) / 1000; + while (time_before(jiffies, timeout)) { + msleep(10); + + if (stv0297_readreg(state, 0x82) & 0x08) { + break; + } + } + if (time_after(jiffies, timeout)) { + goto timeout; + } /* disable sweep */ - stv0297_writereg_mask(state, 0x6a, 1, 0); - stv0297_writereg_mask(state, 0x88, 8, 0); + stv0297_writereg_mask(state, 0x6a, 1, 0); + stv0297_writereg_mask(state, 0x88, 8, 0); /* wait for main lock */ - timeout = jiffies + (20*HZ)/1000; - while(time_before(jiffies, timeout)) { - msleep(10); - - if (stv0297_readreg(state, 0xDF) & 0x80) { - break; - } - } - if (time_after(jiffies, timeout)) { - goto timeout; - } - msleep(100); + timeout = jiffies + (20 * HZ) / 1000; + while (time_before(jiffies, timeout)) { + msleep(10); + + if (stv0297_readreg(state, 0xDF) & 0x80) { + break; + } + } + if (time_after(jiffies, timeout)) { + goto timeout; + } + msleep(100); /* is it still locked after that delay? */ - if (!(stv0297_readreg(state, 0xDF) & 0x80)) { - goto timeout; - } + if (!(stv0297_readreg(state, 0xDF) & 0x80)) { + goto timeout; + } /* success!! */ - stv0297_writereg_mask(state, 0x5a, 0x40, 0x00); - state->base_freq = p->frequency; - return 0; + stv0297_writereg_mask(state, 0x5a, 0x40, 0x00); + state->base_freq = p->frequency; + return 0; timeout: - stv0297_writereg_mask(state, 0x6a, 0x01, 0x00); - return 0; + stv0297_writereg_mask(state, 0x6a, 0x01, 0x00); + return 0; } -static int stv0297_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters * p) +static int stv0297_get_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; - int reg_00, reg_83; + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; + int reg_00, reg_83; - reg_00 = stv0297_readreg(state, 0x00); - reg_83 = stv0297_readreg(state, 0x83); + reg_00 = stv0297_readreg(state, 0x00); + reg_83 = stv0297_readreg(state, 0x83); p->frequency = state->base_freq; - p->inversion = (reg_83 & 0x08) ? INVERSION_ON : INVERSION_OFF; + p->inversion = (reg_83 & 0x08) ? INVERSION_ON : INVERSION_OFF; if (state->config->invert) p->inversion = (p->inversion == INVERSION_ON) ? INVERSION_OFF : INVERSION_ON; p->u.qam.symbol_rate = stv0297_get_symbolrate(state) * 1000; p->u.qam.fec_inner = FEC_NONE; - switch((reg_00 >> 4) & 0x7) { + switch ((reg_00 >> 4) & 0x7) { case 0: p->u.qam.modulation = QAM_16; break; @@ -734,77 +718,77 @@ static int stv0297_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_par case 4: p->u.qam.modulation = QAM_64; break; - } + } - return 0; + return 0; } -static void stv0297_release(struct dvb_frontend* fe) +static void stv0297_release(struct dvb_frontend *fe) { - struct stv0297_state* state = (struct stv0297_state*) fe->demodulator_priv; - kfree(state); + struct stv0297_state *state = (struct stv0297_state *) fe->demodulator_priv; + kfree(state); } static struct dvb_frontend_ops stv0297_ops; -struct dvb_frontend* stv0297_attach(const struct stv0297_config* config, +struct dvb_frontend *stv0297_attach(const struct stv0297_config *config, struct i2c_adapter *i2c, int pwm) { - struct stv0297_state* state = NULL; + struct stv0297_state *state = NULL; - /* allocate memory for the internal state */ - state = (struct stv0297_state*) kmalloc(sizeof(struct stv0297_state), GFP_KERNEL); + /* allocate memory for the internal state */ + state = (struct stv0297_state *) kmalloc(sizeof(struct stv0297_state), GFP_KERNEL); if (state == NULL) goto error; - /* setup the state */ - state->config = config; - state->i2c = i2c; - memcpy(&state->ops, &stv0297_ops, sizeof(struct dvb_frontend_ops)); - state->base_freq = 0; - state->pwm = pwm; + /* setup the state */ + state->config = config; + state->i2c = i2c; + memcpy(&state->ops, &stv0297_ops, sizeof(struct dvb_frontend_ops)); + state->base_freq = 0; + state->pwm = pwm; - /* check if the demod is there */ + /* check if the demod is there */ if ((stv0297_readreg(state, 0x80) & 0x70) != 0x20) goto error; - /* create dvb_frontend */ - state->frontend.ops = &state->ops; - state->frontend.demodulator_priv = state; - return &state->frontend; + /* create dvb_frontend */ + state->frontend.ops = &state->ops; + state->frontend.demodulator_priv = state; + return &state->frontend; error: if (state) kfree(state); - return NULL; + return NULL; } static struct dvb_frontend_ops stv0297_ops = { - .info = { - .name = "ST STV0297 DVB-C", - .type = FE_QAM, - .frequency_min = 64000000, - .frequency_max = 1300000000, - .frequency_stepsize = 62500, - .symbol_rate_min = 870000, - .symbol_rate_max = 11700000, - .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | + .info = { + .name = "ST STV0297 DVB-C", + .type = FE_QAM, + .frequency_min = 64000000, + .frequency_max = 1300000000, + .frequency_stepsize = 62500, + .symbol_rate_min = 870000, + .symbol_rate_max = 11700000, + .caps = FE_CAN_QAM_16 | FE_CAN_QAM_32 | FE_CAN_QAM_64 | FE_CAN_QAM_128 | FE_CAN_QAM_256 | FE_CAN_FEC_AUTO}, - .release = stv0297_release, + .release = stv0297_release, - .init = stv0297_init, + .init = stv0297_init, .sleep = stv0297_sleep, - .set_frontend = stv0297_set_frontend, - .get_frontend = stv0297_get_frontend, + .set_frontend = stv0297_set_frontend, + .get_frontend = stv0297_get_frontend, - .read_status = stv0297_read_status, - .read_ber = stv0297_read_ber, - .read_signal_strength = stv0297_read_signal_strength, - .read_snr = stv0297_read_snr, - .read_ucblocks = stv0297_read_ucblocks, + .read_status = stv0297_read_status, + .read_ber = stv0297_read_ber, + .read_signal_strength = stv0297_read_signal_strength, + .read_snr = stv0297_read_snr, + .read_ucblocks = stv0297_read_ucblocks, }; MODULE_DESCRIPTION("ST STV0297 DVB-C Demodulator driver"); diff --git a/drivers/media/dvb/frontends/stv0299.c b/drivers/media/dvb/frontends/stv0299.c index bf5de103142f..a468f8804948 100644 --- a/drivers/media/dvb/frontends/stv0299.c +++ b/drivers/media/dvb/frontends/stv0299.c @@ -5,7 +5,7 @@ <ralph@convergence.de>, <holger@convergence.de>, <js@convergence.de> - + Philips SU1278/SH @@ -15,7 +15,7 @@ LG TDQF-S001F Copyright (C) 2002 Felix Domke <tmbinc@elitedvb.net> - & Andreas Oberritter <obi@linuxtv.org> + & Andreas Oberritter <obi@linuxtv.org> Support for Samsung TBMU24112IMB used on Technisat SkyStar2 rev. 2.6B @@ -40,7 +40,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ +*/ #include <linux/init.h> #include <linux/kernel.h> @@ -54,13 +54,9 @@ #include "stv0299.h" struct stv0299_state { - struct i2c_adapter* i2c; - struct dvb_frontend_ops ops; - const struct stv0299_config* config; - struct dvb_frontend frontend; u8 initialised:1; @@ -88,7 +84,7 @@ static int stv0299_writeregI (struct stv0299_state* state, u8 reg, u8 data) ret = i2c_transfer (state->i2c, &msg, 1); - if (ret != 1) + if (ret != 1) dprintk("%s: writereg error (reg == 0x%02x, val == 0x%02x, " "ret == %i)\n", __FUNCTION__, reg, data, ret); @@ -102,7 +98,6 @@ int stv0299_writereg (struct dvb_frontend* fe, u8 reg, u8 data) return stv0299_writeregI(state, reg, data); } - static u8 stv0299_readreg (struct stv0299_state* state, u8 reg) { int ret; @@ -112,30 +107,28 @@ static u8 stv0299_readreg (struct stv0299_state* state, u8 reg) { .addr = state->config->demod_address, .flags = I2C_M_RD, .buf = b1, .len = 1 } }; ret = i2c_transfer (state->i2c, msg, 2); - - if (ret != 2) + + if (ret != 2) dprintk("%s: readreg error (reg == 0x%02x, ret == %i)\n", __FUNCTION__, reg, ret); return b1[0]; } - static int stv0299_readregs (struct stv0299_state* state, u8 reg1, u8 *b, u8 len) { - int ret; + int ret; struct i2c_msg msg [] = { { .addr = state->config->demod_address, .flags = 0, .buf = ®1, .len = 1 }, { .addr = state->config->demod_address, .flags = I2C_M_RD, .buf = b, .len = len } }; ret = i2c_transfer (state->i2c, msg, 2); - if (ret != 2) - dprintk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret); + if (ret != 2) + dprintk("%s: readreg error (ret == %i)\n", __FUNCTION__, ret); - return ret == 2 ? 0 : ret; + return ret == 2 ? 0 : ret; } - static int stv0299_set_FEC (struct stv0299_state* state, fe_code_rate_t fec) { dprintk ("%s\n", __FUNCTION__); @@ -169,9 +162,8 @@ static int stv0299_set_FEC (struct stv0299_state* state, fe_code_rate_t fec) { return -EINVAL; } + } } -} - static fe_code_rate_t stv0299_get_fec (struct stv0299_state* state) { @@ -190,7 +182,6 @@ static fe_code_rate_t stv0299_get_fec (struct stv0299_state* state) return fec_tab [index]; } - static int stv0299_wait_diseqc_fifo (struct stv0299_state* state, int timeout) { unsigned long start = jiffies; @@ -208,7 +199,6 @@ static int stv0299_wait_diseqc_fifo (struct stv0299_state* state, int timeout) return 0; } - static int stv0299_wait_diseqc_idle (struct stv0299_state* state, int timeout) { unsigned long start = jiffies; @@ -244,7 +234,6 @@ static int stv0299_set_symbolrate (struct dvb_frontend* fe, u32 srate) return state->config->set_symbol_rate(fe, srate, ratio); } - static int stv0299_get_symbolrate (struct stv0299_state* state) { u32 Mclk = state->config->mclk / 4096L; @@ -277,21 +266,8 @@ static int stv0299_get_symbolrate (struct stv0299_state* state) return srate; } - - - - - - - - - - - - - static int stv0299_send_diseqc_msg (struct dvb_frontend* fe, - struct dvb_diseqc_master_cmd *m) + struct dvb_diseqc_master_cmd *m) { struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; u8 val; @@ -321,7 +297,6 @@ static int stv0299_send_diseqc_msg (struct dvb_frontend* fe, return 0; } - static int stv0299_send_diseqc_burst (struct dvb_frontend* fe, fe_sec_mini_cmd_t burst) { struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; @@ -349,7 +324,6 @@ static int stv0299_send_diseqc_burst (struct dvb_frontend* fe, fe_sec_mini_cmd_t return 0; } - static int stv0299_set_tone (struct dvb_frontend* fe, fe_sec_tone_mode_t tone) { struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; @@ -372,7 +346,6 @@ static int stv0299_set_tone (struct dvb_frontend* fe, fe_sec_tone_mode_t tone) } } - static int stv0299_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltage) { struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; @@ -380,7 +353,7 @@ static int stv0299_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltag u8 reg0x0c; dprintk("%s: %s\n", __FUNCTION__, - voltage == SEC_VOLTAGE_13 ? "SEC_VOLTAGE_13" : + voltage == SEC_VOLTAGE_13 ? "SEC_VOLTAGE_13" : voltage == SEC_VOLTAGE_18 ? "SEC_VOLTAGE_18" : "??"); reg0x08 = stv0299_readreg (state, 0x08); @@ -395,7 +368,7 @@ static int stv0299_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltag stv0299_writeregI (state, 0x0c, 0x00); /* LNB power off! */ return stv0299_writeregI (state, 0x08, 0x00); /* LNB power off! */ } - + stv0299_writeregI (state, 0x08, (reg0x08 & 0x3f) | (state->config->lock_output << 6)); switch (voltage) { @@ -412,7 +385,6 @@ static int stv0299_set_voltage (struct dvb_frontend* fe, fe_sec_voltage_t voltag }; } - static int stv0299_send_legacy_dish_cmd(struct dvb_frontend* fe, u32 cmd) { u8 last = 1; @@ -433,9 +405,7 @@ static int stv0299_send_legacy_dish_cmd(struct dvb_frontend* fe, u32 cmd) for (i=0; i<9; i++) { if((cmd & 0x01) != last) { - stv0299_set_voltage(fe, - last ? SEC_VOLTAGE_13 : - SEC_VOLTAGE_18); + stv0299_set_voltage(fe, last ? SEC_VOLTAGE_13 : SEC_VOLTAGE_18); last = (last) ? 0 : 1; } @@ -448,7 +418,6 @@ static int stv0299_send_legacy_dish_cmd(struct dvb_frontend* fe, u32 cmd) return 0; } - static int stv0299_init (struct dvb_frontend* fe) { struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; @@ -468,34 +437,33 @@ static int stv0299_init (struct dvb_frontend* fe) return 0; } - static int stv0299_read_status(struct dvb_frontend* fe, fe_status_t* status) - { +{ struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; u8 signal = 0xff - stv0299_readreg (state, 0x18); u8 sync = stv0299_readreg (state, 0x1b); - dprintk ("%s : FE_READ_STATUS : VSTATUS: 0x%02x\n", __FUNCTION__, sync); - *status = 0; + dprintk ("%s : FE_READ_STATUS : VSTATUS: 0x%02x\n", __FUNCTION__, sync); + *status = 0; - if (signal > 10) - *status |= FE_HAS_SIGNAL; + if (signal > 10) + *status |= FE_HAS_SIGNAL; - if (sync & 0x80) - *status |= FE_HAS_CARRIER; + if (sync & 0x80) + *status |= FE_HAS_CARRIER; - if (sync & 0x10) - *status |= FE_HAS_VITERBI; + if (sync & 0x10) + *status |= FE_HAS_VITERBI; - if (sync & 0x08) - *status |= FE_HAS_SYNC; + if (sync & 0x08) + *status |= FE_HAS_SYNC; - if ((sync & 0x98) == 0x98) - *status |= FE_HAS_LOCK; + if ((sync & 0x98) == 0x98) + *status |= FE_HAS_LOCK; return 0; - } +} static int stv0299_read_ber(struct dvb_frontend* fe, u32* ber) { @@ -505,27 +473,27 @@ static int stv0299_read_ber(struct dvb_frontend* fe, u32* ber) *ber = (stv0299_readreg (state, 0x1d) << 8) | stv0299_readreg (state, 0x1e); return 0; - } +} static int stv0299_read_signal_strength(struct dvb_frontend* fe, u16* strength) - { +{ struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; s32 signal = 0xffff - ((stv0299_readreg (state, 0x18) << 8) | stv0299_readreg (state, 0x19)); - dprintk ("%s : FE_READ_SIGNAL_STRENGTH : AGC2I: 0x%02x%02x, signal=0x%04x\n", __FUNCTION__, + dprintk ("%s : FE_READ_SIGNAL_STRENGTH : AGC2I: 0x%02x%02x, signal=0x%04x\n", __FUNCTION__, stv0299_readreg (state, 0x18), stv0299_readreg (state, 0x19), (int) signal); - signal = signal * 5 / 4; + signal = signal * 5 / 4; *strength = (signal > 0xffff) ? 0xffff : (signal < 0) ? 0 : signal; return 0; - } +} static int stv0299_read_snr(struct dvb_frontend* fe, u16* snr) - { +{ struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; s32 xsnr = 0xffff - ((stv0299_readreg (state, 0x24) << 8) @@ -549,40 +517,40 @@ static int stv0299_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) static int stv0299_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters * p) { struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; - int invval = 0; + int invval = 0; - dprintk ("%s : FE_SET_FRONTEND\n", __FUNCTION__); + dprintk ("%s : FE_SET_FRONTEND\n", __FUNCTION__); - // set the inversion - if (p->inversion == INVERSION_OFF) invval = 0; - else if (p->inversion == INVERSION_ON) invval = 1; - else { - printk("stv0299 does not support auto-inversion\n"); - return -EINVAL; - } + // set the inversion + if (p->inversion == INVERSION_OFF) invval = 0; + else if (p->inversion == INVERSION_ON) invval = 1; + else { + printk("stv0299 does not support auto-inversion\n"); + return -EINVAL; + } if (state->config->invert) invval = (~invval) & 1; stv0299_writeregI(state, 0x0c, (stv0299_readreg(state, 0x0c) & 0xfe) | invval); if (state->config->enhanced_tuning) { - /* check if we should do a finetune */ - int frequency_delta = p->frequency - state->tuner_frequency; - int minmax = p->u.qpsk.symbol_rate / 2000; - if (minmax < 5000) minmax = 5000; - - if ((frequency_delta > -minmax) && (frequency_delta < minmax) && (frequency_delta != 0) && - (state->fec_inner == p->u.qpsk.fec_inner) && - (state->symbol_rate == p->u.qpsk.symbol_rate)) { + /* check if we should do a finetune */ + int frequency_delta = p->frequency - state->tuner_frequency; + int minmax = p->u.qpsk.symbol_rate / 2000; + if (minmax < 5000) minmax = 5000; + + if ((frequency_delta > -minmax) && (frequency_delta < minmax) && (frequency_delta != 0) && + (state->fec_inner == p->u.qpsk.fec_inner) && + (state->symbol_rate == p->u.qpsk.symbol_rate)) { int Drot_freq = (frequency_delta << 16) / (state->config->mclk / 1000); - // zap the derotator registers first + // zap the derotator registers first stv0299_writeregI(state, 0x22, 0x00); stv0299_writeregI(state, 0x23, 0x00); - // now set them as we want + // now set them as we want stv0299_writeregI(state, 0x22, Drot_freq >> 8); stv0299_writeregI(state, 0x23, Drot_freq); - } else { - /* A "normal" tune is requested */ + } else { + /* A "normal" tune is requested */ stv0299_writeregI(state, 0x05, 0xb5); /* enable i2c repeater on stv0299 */ state->config->pll_set(fe, p); stv0299_writeregI(state, 0x05, 0x35); /* disable i2c repeater on stv0299 */ @@ -605,39 +573,39 @@ static int stv0299_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_par stv0299_writeregI(state, 0x23, 0x00); stv0299_readreg (state, 0x23); stv0299_writeregI(state, 0x12, 0xb9); - } + } - state->tuner_frequency = p->frequency; - state->fec_inner = p->u.qpsk.fec_inner; - state->symbol_rate = p->u.qpsk.symbol_rate; + state->tuner_frequency = p->frequency; + state->fec_inner = p->u.qpsk.fec_inner; + state->symbol_rate = p->u.qpsk.symbol_rate; return 0; - } +} static int stv0299_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters * p) - { +{ struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; - s32 derot_freq; - int invval; + s32 derot_freq; + int invval; derot_freq = (s32)(s16) ((stv0299_readreg (state, 0x22) << 8) | stv0299_readreg (state, 0x23)); derot_freq *= (state->config->mclk >> 16); - derot_freq += 500; - derot_freq /= 1000; + derot_freq += 500; + derot_freq /= 1000; - p->frequency += derot_freq; + p->frequency += derot_freq; invval = stv0299_readreg (state, 0x0c) & 1; if (state->config->invert) invval = (~invval) & 1; - p->inversion = invval ? INVERSION_ON : INVERSION_OFF; + p->inversion = invval ? INVERSION_ON : INVERSION_OFF; p->u.qpsk.fec_inner = stv0299_get_fec (state); p->u.qpsk.symbol_rate = stv0299_get_symbolrate (state); return 0; - } +} static int stv0299_sleep(struct dvb_frontend* fe) { @@ -650,22 +618,22 @@ static int stv0299_sleep(struct dvb_frontend* fe) } static int stv0299_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings) - { +{ struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; fesettings->min_delay_ms = state->config->min_delay_ms; - if (fesettings->parameters.u.qpsk.symbol_rate < 10000000) { - fesettings->step_size = fesettings->parameters.u.qpsk.symbol_rate / 32000; - fesettings->max_drift = 5000; - } else { - fesettings->step_size = fesettings->parameters.u.qpsk.symbol_rate / 16000; - fesettings->max_drift = fesettings->parameters.u.qpsk.symbol_rate / 2000; - } + if (fesettings->parameters.u.qpsk.symbol_rate < 10000000) { + fesettings->step_size = fesettings->parameters.u.qpsk.symbol_rate / 32000; + fesettings->max_drift = 5000; + } else { + fesettings->step_size = fesettings->parameters.u.qpsk.symbol_rate / 16000; + fesettings->max_drift = fesettings->parameters.u.qpsk.symbol_rate / 2000; + } return 0; } static void stv0299_release(struct dvb_frontend* fe) - { +{ struct stv0299_state* state = (struct stv0299_state*) fe->demodulator_priv; kfree(state); } @@ -677,7 +645,7 @@ struct dvb_frontend* stv0299_attach(const struct stv0299_config* config, { struct stv0299_state* state = NULL; int id; - + /* allocate memory for the internal state */ state = (struct stv0299_state*) kmalloc(sizeof(struct stv0299_state), GFP_KERNEL); if (state == NULL) goto error; diff --git a/drivers/media/dvb/frontends/tda10021.c b/drivers/media/dvb/frontends/tda10021.c index 40ab6292b732..1690dfd3b30f 100644 --- a/drivers/media/dvb/frontends/tda10021.c +++ b/drivers/media/dvb/frontends/tda10021.c @@ -35,14 +35,10 @@ struct tda10021_state { - struct i2c_adapter* i2c; - struct dvb_frontend_ops ops; - /* configuration settings */ const struct tda10021_config* config; - struct dvb_frontend frontend; u8 pwm; @@ -94,7 +90,6 @@ static int tda10021_writereg (struct tda10021_state* state, u8 reg, u8 data) return (ret != 1) ? -EREMOTEIO : 0; } - static u8 tda10021_readreg (struct tda10021_state* state, u8 reg) { u8 b0 [] = { reg }; @@ -208,15 +203,6 @@ static int tda10021_set_symbolrate (struct tda10021_state* state, u32 symbolrate return 0; } - - - - - - - - - static int tda10021_init (struct dvb_frontend *fe) { struct tda10021_state* state = (struct tda10021_state*) fe->demodulator_priv; @@ -320,8 +306,8 @@ static int tda10021_read_ber(struct dvb_frontend* fe, u32* ber) struct tda10021_state* state = (struct tda10021_state*) fe->demodulator_priv; u32 _ber = tda10021_readreg(state, 0x14) | - (tda10021_readreg(state, 0x15) << 8) | - ((tda10021_readreg(state, 0x16) & 0x0f) << 16); + (tda10021_readreg(state, 0x15) << 8) | + ((tda10021_readreg(state, 0x16) & 0x0f) << 16); *ber = 10 * _ber; return 0; diff --git a/drivers/media/dvb/frontends/tda10021.h b/drivers/media/dvb/frontends/tda10021.h index a837c77b8be2..7d6a51ce291e 100644 --- a/drivers/media/dvb/frontends/tda10021.h +++ b/drivers/media/dvb/frontends/tda10021.h @@ -37,7 +37,6 @@ struct tda10021_config }; extern struct dvb_frontend* tda10021_attach(const struct tda10021_config* config, - struct i2c_adapter* i2c, - u8 pwm); + struct i2c_adapter* i2c, u8 pwm); #endif // TDA10021_H diff --git a/drivers/media/dvb/frontends/tda1004x.c b/drivers/media/dvb/frontends/tda1004x.c index 1e38162c2ecd..80ab328529ac 100644 --- a/drivers/media/dvb/frontends/tda1004x.c +++ b/drivers/media/dvb/frontends/tda1004x.c @@ -39,19 +39,14 @@ #define TDA1004X_DEMOD_TDA10046 1 -struct tda1004x_state -{ +struct tda1004x_state { struct i2c_adapter* i2c; - struct dvb_frontend_ops ops; - const struct tda1004x_config* config; - struct dvb_frontend frontend; /* private demod data */ u8 initialised:1; - u8 demod_type; }; @@ -347,7 +342,6 @@ static int tda1004x_check_upload_ok(struct tda1004x_state *state, u8 dspVersion) return 0; } - static int tda10045_fwupload(struct dvb_frontend* fe) { struct tda1004x_state* state = fe->demodulator_priv; @@ -363,7 +357,7 @@ static int tda10045_fwupload(struct dvb_frontend* fe) ret = state->config->request_firmware(fe, &fw, TDA10045_DEFAULT_FIRMWARE); if (ret) { printk("tda1004x: no firmware upload (timeout or file not found?)\n"); - return ret; + return ret; } /* reset chip */ @@ -406,7 +400,7 @@ static int tda10046_fwupload(struct dvb_frontend* fe) ret = state->config->request_firmware(fe, &fw, TDA10046_DEFAULT_FIRMWARE); if (ret) { printk("tda1004x: no firmware upload (timeout or file not found?)\n"); - return ret; + return ret; } /* set parameters */ @@ -474,29 +468,12 @@ static int tda1004x_decode_fec(int tdafec) return -1; } - - - - - - - - - - - - - - - - - int tda1004x_write_byte(struct dvb_frontend* fe, int reg, int data) { struct tda1004x_state* state = fe->demodulator_priv; return tda1004x_write_byteI(state, reg, data); - } +} static int tda10045_init(struct dvb_frontend* fe) { @@ -509,7 +486,7 @@ static int tda10045_init(struct dvb_frontend* fe) if (tda10045_fwupload(fe)) { printk("tda1004x: firmware upload failed\n"); return -EIO; - } + } tda1004x_write_mask(state, TDA1004X_CONFADC1, 0x10, 0); // wake up the ADC @@ -537,7 +514,7 @@ static int tda10045_init(struct dvb_frontend* fe) state->initialised = 1; return 0; - } +} static int tda10046_init(struct dvb_frontend* fe) { @@ -548,8 +525,8 @@ static int tda10046_init(struct dvb_frontend* fe) if (tda10046_fwupload(fe)) { printk("tda1004x: firmware upload failed\n"); - return -EIO; - } + return -EIO; + } tda1004x_write_mask(state, TDA1004X_CONFC4, 1, 0); // wake up the chip @@ -623,9 +600,9 @@ static int tda1004x_set_fe(struct dvb_frontend* fe, // Hardcoded to use auto as much as possible on the TDA10045 as it // is very unreliable if AUTO mode is _not_ used. if (state->demod_type == TDA1004X_DEMOD_TDA10045) { - fe_params->u.ofdm.code_rate_HP = FEC_AUTO; - fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_AUTO; - fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO; + fe_params->u.ofdm.code_rate_HP = FEC_AUTO; + fe_params->u.ofdm.guard_interval = GUARD_INTERVAL_AUTO; + fe_params->u.ofdm.transmission_mode = TRANSMISSION_MODE_AUTO; } // Set standard params.. or put them to auto @@ -1066,30 +1043,30 @@ static int tda1004x_sleep(struct dvb_frontend* fe) switch(state->demod_type) { case TDA1004X_DEMOD_TDA10045: tda1004x_write_mask(state, TDA1004X_CONFADC1, 0x10, 0x10); - break; + break; case TDA1004X_DEMOD_TDA10046: tda1004x_write_mask(state, TDA1004X_CONFC4, 1, 1); - break; - } + break; + } state->initialised = 0; - return 0; - } + return 0; +} static int tda1004x_get_tune_settings(struct dvb_frontend* fe, struct dvb_frontend_tune_settings* fesettings) - { - fesettings->min_delay_ms = 800; - fesettings->step_size = 166667; - fesettings->max_drift = 166667*2; - return 0; - } +{ + fesettings->min_delay_ms = 800; + fesettings->step_size = 166667; + fesettings->max_drift = 166667*2; + return 0; +} static void tda1004x_release(struct dvb_frontend* fe) { struct tda1004x_state* state = (struct tda1004x_state*) fe->demodulator_priv; kfree(state); - } +} static struct dvb_frontend_ops tda10045_ops; @@ -1120,7 +1097,7 @@ struct dvb_frontend* tda10045_attach(const struct tda1004x_config* config, error: if (state) kfree(state); return NULL; - } +} static struct dvb_frontend_ops tda10046_ops; @@ -1151,7 +1128,7 @@ struct dvb_frontend* tda10046_attach(const struct tda1004x_config* config, error: if (state) kfree(state); return NULL; - } +} static struct dvb_frontend_ops tda10045_ops = { diff --git a/drivers/media/dvb/frontends/tda8083.c b/drivers/media/dvb/frontends/tda8083.c index 03c4366e1889..db6624b9f036 100644 --- a/drivers/media/dvb/frontends/tda8083.c +++ b/drivers/media/dvb/frontends/tda8083.c @@ -35,14 +35,10 @@ struct tda8083_state { - struct i2c_adapter* i2c; - struct dvb_frontend_ops ops; - /* configuration settings */ const struct tda8083_config* config; - struct dvb_frontend frontend; }; @@ -78,7 +74,6 @@ static int tda8083_writereg (struct tda8083_state* state, u8 reg, u8 data) return (ret != 1) ? -1 : 0; } - static int tda8083_readregs (struct tda8083_state* state, u8 reg1, u8 *b, u8 len) { int ret; @@ -94,7 +89,6 @@ static int tda8083_readregs (struct tda8083_state* state, u8 reg1, u8 *b, u8 len return ret == 2 ? 0 : -1; } - static inline u8 tda8083_readreg (struct tda8083_state* state, u8 reg) { u8 val; @@ -104,8 +98,6 @@ static inline u8 tda8083_readreg (struct tda8083_state* state, u8 reg) return val; } - - static int tda8083_set_inversion (struct tda8083_state* state, fe_spectral_inversion_t inversion) { /* XXX FIXME: implement other modes than FEC_AUTO */ @@ -115,7 +107,6 @@ static int tda8083_set_inversion (struct tda8083_state* state, fe_spectral_inver return -EINVAL; } - static int tda8083_set_fec (struct tda8083_state* state, fe_code_rate_t fec) { if (fec == FEC_AUTO) @@ -127,7 +118,6 @@ static int tda8083_set_fec (struct tda8083_state* state, fe_code_rate_t fec) return -EINVAL; } - static fe_code_rate_t tda8083_get_fec (struct tda8083_state* state) { u8 index; @@ -139,7 +129,6 @@ static fe_code_rate_t tda8083_get_fec (struct tda8083_state* state) return fec_tab [index]; } - static int tda8083_set_symbolrate (struct tda8083_state* state, u32 srate) { u32 ratio; @@ -179,7 +168,6 @@ static int tda8083_set_symbolrate (struct tda8083_state* state, u32 srate) return 1; } - static void tda8083_wait_diseqc_fifo (struct tda8083_state* state, int timeout) { unsigned long start = jiffies; @@ -205,7 +193,6 @@ static int tda8083_set_tone (struct tda8083_state* state, fe_sec_tone_mode_t ton }; } - static int tda8083_set_voltage (struct tda8083_state* state, fe_sec_voltage_t voltage) { switch (voltage) { @@ -236,27 +223,6 @@ static int tda8083_send_diseqc_burst (struct tda8083_state* state, fe_sec_mini_c return 0; } - - - - - - - - - - - - - - - - - - - - - static int tda8083_send_diseqc_msg (struct dvb_frontend* fe, struct dvb_diseqc_master_cmd *m) { @@ -475,9 +441,9 @@ static struct dvb_frontend_ops tda8083_ops = { .read_snr = tda8083_read_snr, .diseqc_send_master_cmd = tda8083_send_diseqc_msg, - .diseqc_send_burst = tda8083_diseqc_send_burst, - .set_tone = tda8083_diseqc_set_tone, - .set_voltage = tda8083_diseqc_set_voltage, + .diseqc_send_burst = tda8083_diseqc_send_burst, + .set_tone = tda8083_diseqc_set_tone, + .set_voltage = tda8083_diseqc_set_voltage, }; module_param(debug, int, 0644); diff --git a/drivers/media/dvb/frontends/tda80xx.c b/drivers/media/dvb/frontends/tda80xx.c index da352fc7c3aa..4bf476b34efa 100644 --- a/drivers/media/dvb/frontends/tda80xx.c +++ b/drivers/media/dvb/frontends/tda80xx.c @@ -204,8 +204,8 @@ static int tda80xx_set_parameters(struct tda80xx_state* state, * r = k * clk / symbol_rate * * k: 2^21 for caa 0..3, - * 2^20 for caa 4..5, - * 2^19 for caa 6..7 + * 2^20 for caa 4..5, + * 2^19 for caa 6..7 */ if (symbol_rate <= (clk * 3) / 32) k = (1 << 19); @@ -422,7 +422,7 @@ static int tda8044_init(struct dvb_frontend* fe) tda80xx_write(state, 0x00, tda8044_inittab_post, sizeof(tda8044_inittab_post)); if (state->config->pll_init) { - tda80xx_writereg(state, 0x1c, 0x80); + tda80xx_writereg(state, 0x1c, 0x80); state->config->pll_init(fe); tda80xx_writereg(state, 0x1c, 0x00); } @@ -437,7 +437,7 @@ static int tda8083_init(struct dvb_frontend* fe) tda80xx_write(state, 0x00, tda8083_inittab, sizeof(tda8083_inittab)); if (state->config->pll_init) { - tda80xx_writereg(state, 0x1c, 0x80); + tda80xx_writereg(state, 0x1c, 0x80); state->config->pll_init(fe); tda80xx_writereg(state, 0x1c, 0x00); } @@ -445,21 +445,6 @@ static int tda8083_init(struct dvb_frontend* fe) return 0; } - - - - - - - - - - - - - - - static int tda80xx_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t voltage) { struct tda80xx_state* state = (struct tda80xx_state*) fe->demodulator_priv; @@ -492,7 +477,7 @@ static int tda80xx_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone) static int tda80xx_send_diseqc_msg(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd *cmd) { - struct tda80xx_state* state = (struct tda80xx_state*) fe->demodulator_priv; + struct tda80xx_state* state = (struct tda80xx_state*) fe->demodulator_priv; if (cmd->msg_len > 6) return -EINVAL; @@ -536,7 +521,7 @@ static int tda80xx_sleep(struct dvb_frontend* fe) static int tda80xx_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) { - struct tda80xx_state* state = (struct tda80xx_state*) fe->demodulator_priv; + struct tda80xx_state* state = (struct tda80xx_state*) fe->demodulator_priv; tda80xx_writereg(state, 0x1c, 0x80); state->config->pll_set(fe, p); @@ -735,9 +720,9 @@ static struct dvb_frontend_ops tda80xx_ops = { .read_ucblocks = tda80xx_read_ucblocks, .diseqc_send_master_cmd = tda80xx_send_diseqc_msg, - .diseqc_send_burst = tda80xx_send_diseqc_burst, - .set_tone = tda80xx_set_tone, - .set_voltage = tda80xx_set_voltage, + .diseqc_send_burst = tda80xx_send_diseqc_burst, + .set_tone = tda80xx_set_tone, + .set_voltage = tda80xx_set_voltage, }; module_param(debug, int, 0644); diff --git a/drivers/media/dvb/frontends/ves1820.c b/drivers/media/dvb/frontends/ves1820.c index 3d8e7804c580..62945ef1f966 100644 --- a/drivers/media/dvb/frontends/ves1820.c +++ b/drivers/media/dvb/frontends/ves1820.c @@ -1,4 +1,4 @@ -/* +/* VES1820 - Single Chip Cable Channel Receiver driver module Copyright (C) 1999 Convergence Integrated Media GmbH <ralph@convergence.de> @@ -16,7 +16,7 @@ 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 <linux/config.h> #include <linux/delay.h> @@ -34,14 +34,10 @@ struct ves1820_state { - - struct i2c_adapter *i2c; - + struct i2c_adapter* i2c; struct dvb_frontend_ops ops; - /* configuration settings */ const struct ves1820_config* config; - struct dvb_frontend frontend; /* private demodulator data */ @@ -64,9 +60,9 @@ static u8 ves1820_inittab[] = { static int ves1820_writereg(struct ves1820_state *state, u8 reg, u8 data) { - u8 buf[] = { 0x00, reg, data }; + u8 buf[] = { 0x00, reg, data }; struct i2c_msg msg = {.addr = state->config->demod_address,.flags = 0,.buf = buf,.len = 3 }; - int ret; + int ret; ret = i2c_transfer(state->i2c, &msg, 1); @@ -80,8 +76,8 @@ static int ves1820_writereg(struct ves1820_state *state, u8 reg, u8 data) static u8 ves1820_readreg(struct ves1820_state *state, u8 reg) { - u8 b0 [] = { 0x00, reg }; - u8 b1 [] = { 0 }; + u8 b0[] = { 0x00, reg }; + u8 b1[] = { 0 }; struct i2c_msg msg[] = { {.addr = state->config->demod_address,.flags = 0,.buf = b0,.len = 2}, {.addr = state->config->demod_address,.flags = I2C_M_RD,.buf = b1,.len = 1} @@ -97,23 +93,20 @@ static u8 ves1820_readreg(struct ves1820_state *state, u8 reg) return b1[0]; } - static int ves1820_setup_reg0(struct ves1820_state *state, u8 reg0, fe_spectral_inversion_t inversion) { reg0 |= state->reg0 & 0x62; - + if (INVERSION_ON == inversion) { if (!state->config->invert) reg0 |= 0x20; else reg0 &= ~0x20; - } else if (INVERSION_OFF == inversion) { - - if (!state->config->invert) reg0 &= ~0x20; + if (!state->config->invert) reg0 &= ~0x20; else reg0 |= 0x20; } - ves1820_writereg(state, 0x00, reg0 & 0xfe); - ves1820_writereg(state, 0x00, reg0 | 0x01); + ves1820_writereg(state, 0x00, reg0 & 0xfe); + ves1820_writereg(state, 0x00, reg0 | 0x01); state->reg0 = reg0; @@ -122,10 +115,10 @@ static int ves1820_setup_reg0(struct ves1820_state *state, u8 reg0, fe_spectral_ static int ves1820_set_symbolrate(struct ves1820_state *state, u32 symbolrate) { - s32 BDR; - s32 BDRI; - s16 SFIL=0; - u16 NDEC = 0; + s32 BDR; + s32 BDRI; + s16 SFIL = 0; + u16 NDEC = 0; u32 ratio; u32 fin; u32 tmp; @@ -136,7 +129,7 @@ static int ves1820_set_symbolrate(struct ves1820_state *state, u32 symbolrate) symbolrate = state->config->xin / 2; if (symbolrate < 500000) - symbolrate = 500000; + symbolrate = 500000; if (symbolrate < state->config->xin / 16) NDEC = 1; @@ -168,24 +161,24 @@ static int ves1820_set_symbolrate(struct ves1820_state *state, u32 symbolrate) fptmp = fpxin; do_div(fptmp, 984); if (symbolrate < fptmp); SFIL = 1; - + fin = state->config->xin >> 4; - symbolrate <<= NDEC; + symbolrate <<= NDEC; ratio = (symbolrate << 4) / fin; tmp = ((symbolrate << 4) % fin) << 8; ratio = (ratio << 8) + tmp / fin; tmp = (tmp % fin) << 8; ratio = (ratio << 8) + (tmp + fin / 2) / fin; - - BDR = ratio; + + BDR = ratio; BDRI = (((state->config->xin << 5) / symbolrate) + 1) / 2; - - if (BDRI > 0xFF) - BDRI = 0xFF; - - SFIL = (SFIL << 4) | ves1820_inittab[0x0E]; - - NDEC = (NDEC << 6) | ves1820_inittab[0x03]; + + if (BDRI > 0xFF) + BDRI = 0xFF; + + SFIL = (SFIL << 4) | ves1820_inittab[0x0E]; + + NDEC = (NDEC << 6) | ves1820_inittab[0x03]; ves1820_writereg(state, 0x03, NDEC); ves1820_writereg(state, 0x0a, BDR & 0xff); @@ -195,21 +188,9 @@ static int ves1820_set_symbolrate(struct ves1820_state *state, u32 symbolrate) ves1820_writereg(state, 0x0d, BDRI); ves1820_writereg(state, 0x0e, SFIL); - return 0; + return 0; } - - - - - - - - - - - - static int ves1820_init(struct dvb_frontend* fe) { struct ves1820_state* state = (struct ves1820_state*) fe->demodulator_priv; @@ -234,11 +215,11 @@ static int ves1820_init(struct dvb_frontend* fe) static int ves1820_set_parameters(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) { struct ves1820_state* state = (struct ves1820_state*) fe->demodulator_priv; - static const u8 reg0x00 [] = { 0x00, 0x04, 0x08, 0x0c, 0x10 }; - static const u8 reg0x01 [] = { 140, 140, 106, 100, 92 }; - static const u8 reg0x05 [] = { 135, 100, 70, 54, 38 }; - static const u8 reg0x08 [] = { 162, 116, 67, 52, 35 }; - static const u8 reg0x09 [] = { 145, 150, 106, 126, 107 }; + static const u8 reg0x00[] = { 0x00, 0x04, 0x08, 0x0c, 0x10 }; + static const u8 reg0x01[] = { 140, 140, 106, 100, 92 }; + static const u8 reg0x05[] = { 135, 100, 70, 54, 38 }; + static const u8 reg0x08[] = { 162, 116, 67, 52, 35 }; + static const u8 reg0x09[] = { 145, 150, 106, 126, 107 }; int real_qam = p->u.qam.modulation - QAM_16; if (real_qam < 0 || real_qam > 4) @@ -261,61 +242,60 @@ static int ves1820_set_parameters(struct dvb_frontend* fe, struct dvb_frontend_p static int ves1820_read_status(struct dvb_frontend* fe, fe_status_t* status) { struct ves1820_state* state = (struct ves1820_state*) fe->demodulator_priv; - int sync; + int sync; - *status = 0; + *status = 0; + sync = ves1820_readreg(state, 0x11); - sync = ves1820_readreg(state, 0x11); + if (sync & 1) + *status |= FE_HAS_SIGNAL; - if (sync & 1) - *status |= FE_HAS_SIGNAL; + if (sync & 2) + *status |= FE_HAS_CARRIER; - if (sync & 2) - *status |= FE_HAS_CARRIER; + if (sync & 2) /* XXX FIXME! */ + *status |= FE_HAS_VITERBI; - if (sync & 2) /* XXX FIXME! */ - *status |= FE_HAS_VITERBI; - - if (sync & 4) - *status |= FE_HAS_SYNC; + if (sync & 4) + *status |= FE_HAS_SYNC; - if (sync & 8) - *status |= FE_HAS_LOCK; + if (sync & 8) + *status |= FE_HAS_LOCK; return 0; - } +} static int ves1820_read_ber(struct dvb_frontend* fe, u32* ber) - { +{ struct ves1820_state* state = (struct ves1820_state*) fe->demodulator_priv; u32 _ber = ves1820_readreg(state, 0x14) | - (ves1820_readreg(state, 0x15) << 8) | - ((ves1820_readreg(state, 0x16) & 0x0f) << 16); + (ves1820_readreg(state, 0x15) << 8) | + ((ves1820_readreg(state, 0x16) & 0x0f) << 16); *ber = 10 * _ber; return 0; - } +} static int ves1820_read_signal_strength(struct dvb_frontend* fe, u16* strength) - { +{ struct ves1820_state* state = (struct ves1820_state*) fe->demodulator_priv; - u8 gain = ves1820_readreg(state, 0x17); + u8 gain = ves1820_readreg(state, 0x17); *strength = (gain << 8) | gain; return 0; - } +} static int ves1820_read_snr(struct dvb_frontend* fe, u16* snr) - { +{ struct ves1820_state* state = (struct ves1820_state*) fe->demodulator_priv; - u8 quality = ~ves1820_readreg(state, 0x18); + u8 quality = ~ves1820_readreg(state, 0x18); *snr = (quality << 8) | quality; return 0; - } +} static int ves1820_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) { @@ -325,26 +305,26 @@ static int ves1820_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) if (*ucblocks == 0x7f) *ucblocks = 0xffffffff; - /* reset uncorrected block counter */ - ves1820_writereg(state, 0x10, ves1820_inittab[0x10] & 0xdf); - ves1820_writereg(state, 0x10, ves1820_inittab[0x10]); + /* reset uncorrected block counter */ + ves1820_writereg(state, 0x10, ves1820_inittab[0x10] & 0xdf); + ves1820_writereg(state, 0x10, ves1820_inittab[0x10]); return 0; } static int ves1820_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) - { +{ struct ves1820_state* state = (struct ves1820_state*) fe->demodulator_priv; - int sync; - s8 afc = 0; - - sync = ves1820_readreg(state, 0x11); - afc = ves1820_readreg(state, 0x19); - if (verbose) { - /* AFC only valid when carrier has been recovered */ - printk(sync & 2 ? "ves1820: AFC (%d) %dHz\n" : - "ves1820: [AFC (%d) %dHz]\n", afc, -((s32) p->u.qam.symbol_rate * afc) >> 10); - } + int sync; + s8 afc = 0; + + sync = ves1820_readreg(state, 0x11); + afc = ves1820_readreg(state, 0x19); + if (verbose) { + /* AFC only valid when carrier has been recovered */ + printk(sync & 2 ? "ves1820: AFC (%d) %dHz\n" : + "ves1820: [AFC (%d) %dHz]\n", afc, -((s32) p->u.qam.symbol_rate * afc) >> 10); + } if (!state->config->invert) { p->inversion = (state->reg0 & 0x20) ? INVERSION_ON : INVERSION_OFF; @@ -352,16 +332,16 @@ static int ves1820_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_par p->inversion = (!(state->reg0 & 0x20)) ? INVERSION_ON : INVERSION_OFF; } - p->u.qam.modulation = ((state->reg0 >> 2) & 7) + QAM_16; + p->u.qam.modulation = ((state->reg0 >> 2) & 7) + QAM_16; - p->u.qam.fec_inner = FEC_NONE; + p->u.qam.fec_inner = FEC_NONE; - p->frequency = ((p->frequency + 31250) / 62500) * 62500; - if (sync & 2) - p->frequency -= ((s32)p->u.qam.symbol_rate * afc) >> 10; + p->frequency = ((p->frequency + 31250) / 62500) * 62500; + if (sync & 2) + p->frequency -= ((s32) p->u.qam.symbol_rate * afc) >> 10; - return 0; -} + return 0; +} static int ves1820_sleep(struct dvb_frontend* fe) { @@ -426,7 +406,7 @@ struct dvb_frontend* ves1820_attach(const struct ves1820_config* config, error: if (state) kfree(state); return NULL; - } +} static struct dvb_frontend_ops ves1820_ops = { diff --git a/drivers/media/dvb/frontends/ves1820.h b/drivers/media/dvb/frontends/ves1820.h index 8739fec48ec2..355f130b1be8 100644 --- a/drivers/media/dvb/frontends/ves1820.h +++ b/drivers/media/dvb/frontends/ves1820.h @@ -46,7 +46,6 @@ struct ves1820_config }; extern struct dvb_frontend* ves1820_attach(const struct ves1820_config* config, - struct i2c_adapter* i2c, - u8 pwm); + struct i2c_adapter* i2c, u8 pwm); #endif // VES1820_H diff --git a/drivers/media/dvb/frontends/ves1x93.c b/drivers/media/dvb/frontends/ves1x93.c index 4a13dcea97d3..2862c7c79ec0 100644 --- a/drivers/media/dvb/frontends/ves1x93.c +++ b/drivers/media/dvb/frontends/ves1x93.c @@ -1,4 +1,4 @@ -/* +/* Driver for VES1893 and VES1993 QPSK Demodulators Copyright (C) 1999 Convergence Integrated Media GmbH <ralph@convergence.de> @@ -21,7 +21,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ +*/ #include <linux/kernel.h> #include <linux/module.h> @@ -35,14 +35,10 @@ struct ves1x93_state { - struct i2c_adapter* i2c; - struct dvb_frontend_ops ops; - /* configuration settings */ const struct ves1x93_config* config; - struct dvb_frontend frontend; /* previous uncorrected block counter */ @@ -69,7 +65,6 @@ static u8 init_1893_tab [] = { 0x00, 0x55, 0x00, 0x00, 0x7f, 0x00 }; - static u8 init_1993_tab [] = { 0x00, 0x9c, 0x35, 0x80, 0x6a, 0x09, 0x72, 0x8c, 0x09, 0x6b, 0x00, 0x00, 0x4c, 0x08, 0x00, 0x00, @@ -83,13 +78,12 @@ static u8 init_1993_tab [] = { static u8 init_1893_wtab[] = { - 1,1,1,1,1,1,1,1, 1,1,0,0,1,1,0,0, - 0,1,0,0,0,0,0,0, 1,0,1,1,0,0,0,1, - 1,1,1,0,0,0,0,0, 0,0,1,1,0,0,0,0, - 1,1,1,0,1,1 + 1,1,1,1,1,1,1,1, 1,1,0,0,1,1,0,0, + 0,1,0,0,0,0,0,0, 1,0,1,1,0,0,0,1, + 1,1,1,0,0,0,0,0, 0,0,1,1,0,0,0,0, + 1,1,1,0,1,1 }; - static u8 init_1993_wtab[] = { 1,1,1,1,1,1,1,1, 1,1,0,0,1,1,0,0, @@ -100,7 +94,7 @@ static u8 init_1993_wtab[] = static int ves1x93_writereg (struct ves1x93_state* state, u8 reg, u8 data) { - u8 buf [] = { 0x00, reg, data }; + u8 buf [] = { 0x00, reg, data }; struct i2c_msg msg = { .addr = state->config->demod_address, .flags = 0, .buf = buf, .len = 3 }; int err; @@ -109,10 +103,9 @@ static int ves1x93_writereg (struct ves1x93_state* state, u8 reg, u8 data) return -EREMOTEIO; } - return 0; + return 0; } - static u8 ves1x93_readreg (struct ves1x93_state* state, u8 reg) { int ret; @@ -163,7 +156,6 @@ static int ves1x93_set_inversion (struct ves1x93_state* state, fe_spectral_inver return ves1x93_writereg (state, 0x0c, (state->init_1x93_tab[0x0c] & 0x3f) | val); } - static int ves1x93_set_fec (struct ves1x93_state* state, fe_code_rate_t fec) { if (fec == FEC_AUTO) @@ -174,17 +166,15 @@ static int ves1x93_set_fec (struct ves1x93_state* state, fe_code_rate_t fec) return ves1x93_writereg (state, 0x0d, fec - FEC_1_2); } - static fe_code_rate_t ves1x93_get_fec (struct ves1x93_state* state) { return FEC_1_2 + ((ves1x93_readreg (state, 0x0d) >> 4) & 0x7); } - static int ves1x93_set_symbolrate (struct ves1x93_state* state, u32 srate) { u32 BDR; - u32 ratio; + u32 ratio; u8 ADCONF, FCONF, FNR; u32 BDRI; u32 tmp; @@ -213,15 +203,15 @@ static int ves1x93_set_symbolrate (struct ves1x93_state* state, u32 srate) FNR = 0xff; - if (ratio < MUL/3) FNR = 0; + if (ratio < MUL/3) FNR = 0; if (ratio < (MUL*11)/50) FNR = 1; - if (ratio < MUL/6) FNR = 2; - if (ratio < MUL/9) FNR = 3; - if (ratio < MUL/12) FNR = 4; + if (ratio < MUL/6) FNR = 2; + if (ratio < MUL/9) FNR = 3; + if (ratio < MUL/12) FNR = 4; if (ratio < (MUL*11)/200) FNR = 5; - if (ratio < MUL/24) FNR = 6; + if (ratio < MUL/24) FNR = 6; if (ratio < (MUL*27)/1000) FNR = 7; - if (ratio < MUL/48) FNR = 8; + if (ratio < MUL/48) FNR = 8; if (ratio < (MUL*137)/10000) FNR = 9; if (FNR == 0xff) { @@ -231,16 +221,16 @@ static int ves1x93_set_symbolrate (struct ves1x93_state* state, u32 srate) } else { ADCONF = 0x81; FCONF = 0x88 | (FNR >> 1) | ((FNR & 0x01) << 5); - /*FCONF = 0x80 | ((FNR & 0x01) << 5) | (((FNR > 1) & 0x03) << 3) | ((FNR >> 1) & 0x07);*/ + /*FCONF = 0x80 | ((FNR & 0x01) << 5) | (((FNR > 1) & 0x03) << 3) | ((FNR >> 1) & 0x07);*/ } BDR = (( (ratio << (FNR >> 1)) >> 4) + 1) >> 1; BDRI = ( ((FIN << 8) / ((srate << (FNR >> 1)) >> 2)) + 1) >> 1; - dprintk("FNR= %d\n", FNR); - dprintk("ratio= %08x\n", (unsigned int) ratio); - dprintk("BDR= %08x\n", (unsigned int) BDR); - dprintk("BDRI= %02x\n", (unsigned int) BDRI); + dprintk("FNR= %d\n", FNR); + dprintk("ratio= %08x\n", (unsigned int) ratio); + dprintk("BDR= %08x\n", (unsigned int) BDR); + dprintk("BDRI= %02x\n", (unsigned int) BDRI); if (BDRI > 0xff) BDRI = 0xff; @@ -253,7 +243,7 @@ static int ves1x93_set_symbolrate (struct ves1x93_state* state, u32 srate) ves1x93_writereg (state, 0x20, ADCONF); ves1x93_writereg (state, 0x21, FCONF); - if (srate < 6000000) + if (srate < 6000000) ves1x93_writereg (state, 0x05, state->init_1x93_tab[0x05] | 0x80); else ves1x93_writereg (state, 0x05, state->init_1x93_tab[0x05] & 0x7f); @@ -265,20 +255,6 @@ static int ves1x93_set_symbolrate (struct ves1x93_state* state, u32 srate) return 0; } - - - - - - - - - - - - - - static int ves1x93_init (struct dvb_frontend* fe) { struct ves1x93_state* state = (struct ves1x93_state*) fe->demodulator_priv; @@ -327,80 +303,79 @@ static int ves1x93_read_status(struct dvb_frontend* fe, fe_status_t* status) u8 sync = ves1x93_readreg (state, 0x0e); - /* - * The ves1893 sometimes returns sync values that make no sense, - * because, e.g., the SIGNAL bit is 0, while some of the higher - * bits are 1 (and how can there be a CARRIER w/o a SIGNAL?). - * Tests showed that the the VITERBI and SYNC bits are returned - * reliably, while the SIGNAL and CARRIER bits ar sometimes wrong. - * If such a case occurs, we read the value again, until we get a - * valid value. - */ - int maxtry = 10; /* just for safety - let's not get stuck here */ - while ((sync & 0x03) != 0x03 && (sync & 0x0c) && maxtry--) { - msleep(10); + /* + * The ves1893 sometimes returns sync values that make no sense, + * because, e.g., the SIGNAL bit is 0, while some of the higher + * bits are 1 (and how can there be a CARRIER w/o a SIGNAL?). + * Tests showed that the the VITERBI and SYNC bits are returned + * reliably, while the SIGNAL and CARRIER bits ar sometimes wrong. + * If such a case occurs, we read the value again, until we get a + * valid value. + */ + int maxtry = 10; /* just for safety - let's not get stuck here */ + while ((sync & 0x03) != 0x03 && (sync & 0x0c) && maxtry--) { + msleep(10); sync = ves1x93_readreg (state, 0x0e); - } + } - *status = 0; + *status = 0; - if (sync & 1) - *status |= FE_HAS_SIGNAL; + if (sync & 1) + *status |= FE_HAS_SIGNAL; - if (sync & 2) - *status |= FE_HAS_CARRIER; + if (sync & 2) + *status |= FE_HAS_CARRIER; - if (sync & 4) - *status |= FE_HAS_VITERBI; + if (sync & 4) + *status |= FE_HAS_VITERBI; - if (sync & 8) - *status |= FE_HAS_SYNC; + if (sync & 8) + *status |= FE_HAS_SYNC; - if ((sync & 0x1f) == 0x1f) - *status |= FE_HAS_LOCK; + if ((sync & 0x1f) == 0x1f) + *status |= FE_HAS_LOCK; return 0; - } - +} static int ves1x93_read_ber(struct dvb_frontend* fe, u32* ber) - { +{ struct ves1x93_state* state = (struct ves1x93_state*) fe->demodulator_priv; *ber = ves1x93_readreg (state, 0x15); *ber |= (ves1x93_readreg (state, 0x16) << 8); *ber |= ((ves1x93_readreg (state, 0x17) & 0x0F) << 16); - *ber *= 10; + *ber *= 10; return 0; - } +} static int ves1x93_read_signal_strength(struct dvb_frontend* fe, u16* strength) - { +{ struct ves1x93_state* state = (struct ves1x93_state*) fe->demodulator_priv; u8 signal = ~ves1x93_readreg (state, 0x0b); *strength = (signal << 8) | signal; return 0; - } +} static int ves1x93_read_snr(struct dvb_frontend* fe, u16* snr) - { +{ struct ves1x93_state* state = (struct ves1x93_state*) fe->demodulator_priv; u8 _snr = ~ves1x93_readreg (state, 0x1c); *snr = (_snr << 8) | _snr; return 0; - } +} static int ves1x93_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) - { +{ struct ves1x93_state* state = (struct ves1x93_state*) fe->demodulator_priv; *ucblocks = ves1x93_readreg (state, 0x18) & 0x7f; - + if (*ucblocks == 0x7f) *ucblocks = 0xffffffff; /* counter overflow... */ @@ -408,10 +383,10 @@ static int ves1x93_read_ucblocks(struct dvb_frontend* fe, u32* ucblocks) ves1x93_writereg (state, 0x18, 0x80); /* dto. */ return 0; - } +} static int ves1x93_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) - { +{ struct ves1x93_state* state = (struct ves1x93_state*) fe->demodulator_priv; ves1x93_writereg(state, 0x00, 0x11); @@ -420,28 +395,28 @@ static int ves1x93_set_frontend(struct dvb_frontend* fe, struct dvb_frontend_par ves1x93_set_inversion (state, p->inversion); ves1x93_set_fec (state, p->u.qpsk.fec_inner); ves1x93_set_symbolrate (state, p->u.qpsk.symbol_rate); - state->inversion = p->inversion; + state->inversion = p->inversion; return 0; - } +} static int ves1x93_get_frontend(struct dvb_frontend* fe, struct dvb_frontend_parameters *p) - { +{ struct ves1x93_state* state = (struct ves1x93_state*) fe->demodulator_priv; - int afc; + int afc; afc = ((int)((char)(ves1x93_readreg (state, 0x0a) << 1)))/2; - afc = (afc * (int)(p->u.qpsk.symbol_rate/1000/8))/16; + afc = (afc * (int)(p->u.qpsk.symbol_rate/1000/8))/16; - p->frequency -= afc; + p->frequency -= afc; - /* - * inversion indicator is only valid - * if auto inversion was used - */ - if (state->inversion == INVERSION_AUTO) + /* + * inversion indicator is only valid + * if auto inversion was used + */ + if (state->inversion == INVERSION_AUTO) p->inversion = (ves1x93_readreg (state, 0x0f) & 2) ? - INVERSION_OFF : INVERSION_ON; + INVERSION_OFF : INVERSION_ON; p->u.qpsk.fec_inner = ves1x93_get_fec (state); /* XXX FIXME: timing offset !! */ @@ -454,12 +429,12 @@ static int ves1x93_sleep(struct dvb_frontend* fe) return ves1x93_writereg (state, 0x00, 0x08); } - + static void ves1x93_release(struct dvb_frontend* fe) { struct ves1x93_state* state = (struct ves1x93_state*) fe->demodulator_priv; kfree(state); -} +} static struct dvb_frontend_ops ves1x93_ops; @@ -518,7 +493,7 @@ struct dvb_frontend* ves1x93_attach(const struct ves1x93_config* config, error: if (state) kfree(state); return NULL; - } +} static struct dvb_frontend_ops ves1x93_ops = { diff --git a/drivers/media/dvb/ttpci/av7110.c b/drivers/media/dvb/ttpci/av7110.c index 438c5d88ca28..9e80d593f719 100644 --- a/drivers/media/dvb/ttpci/av7110.c +++ b/drivers/media/dvb/ttpci/av7110.c @@ -2,7 +2,7 @@ * driver for the SAA7146 based AV110 cards (like the Fujitsu-Siemens DVB) * av7110.c: initialization and demux stuff * - * Copyright (C) 1999-2002 Ralph Metzler + * Copyright (C) 1999-2002 Ralph Metzler * & Marcus Metzler for convergence integrated media GmbH * * originally based on code by: @@ -12,19 +12,19 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 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. * Or, point your browser to http://www.gnu.org/copyleft/gpl.html - * + * * * the project's page is at http://www.linuxtv.org/dvb/ */ @@ -75,9 +75,9 @@ int av7110_debug; -static int vidmode=CVBS_RGB_OUT; +static int vidmode = CVBS_RGB_OUT; static int pids_off; -static int adac=DVB_ADAC_TI; +static int adac = DVB_ADAC_TI; static int hw_sections; static int rgb_on; static int volume = 255; @@ -109,14 +109,14 @@ static int av7110_num = 0; {\ if (fe_func != NULL) { \ av7110_copy = fe_func; \ - fe_func = av7110_func; \ + fe_func = av7110_func; \ } \ } static void init_av7110_av(struct av7110 *av7110) { - struct saa7146_dev *dev=av7110->dev; + struct saa7146_dev *dev = av7110->dev; /* set internal volume control to maximum */ av7110->adac_type = DVB_ADAC_TI; @@ -137,9 +137,9 @@ static void init_av7110_av(struct av7110 *av7110) i2c_writereg(av7110, 0x20, 0x03, 0x00); i2c_writereg(av7110, 0x20, 0x04, 0x00); - /** - * some special handling for the Siemens DVB-C cards... - */ + /** + * some special handling for the Siemens DVB-C cards... + */ } else if (0 == av7110_init_analog_module(av7110)) { /* done. */ } @@ -161,8 +161,8 @@ static void init_av7110_av(struct av7110 *av7110) if (rgb_on && (av7110->dev->pci->subsystem_vendor == 0x110a) && (av7110->dev->pci->subsystem_device == 0x0000)) { saa7146_setgpio(dev, 1, SAA7146_GPIO_OUTHI); // RGB on, SCART pin 16 - //saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); // SCARTpin 8 - } + //saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); // SCARTpin 8 + } } av7110_set_volume(av7110, av7110->mixer.volume_left, av7110->mixer.volume_right); @@ -175,7 +175,7 @@ static void recover_arm(struct av7110 *av7110) av7110_bootarm(av7110); msleep(100); - restart_feeds(av7110); + restart_feeds(av7110); av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, SetIR, 1, av7110->ir_config); } @@ -183,23 +183,23 @@ static void arm_error(struct av7110 *av7110) { dprintk(4, "%p\n",av7110); - av7110->arm_errors++; - av7110->arm_ready=0; - recover_arm(av7110); + av7110->arm_errors++; + av7110->arm_ready = 0; + recover_arm(av7110); } static int arm_thread(void *data) { struct av7110 *av7110 = data; - u16 newloops = 0; + u16 newloops = 0; int timeout; dprintk(4, "%p\n",av7110); - - lock_kernel (); - daemonize ("arm_mon"); - sigfillset (¤t->blocked); - unlock_kernel (); + + lock_kernel(); + daemonize("arm_mon"); + sigfillset(¤t->blocked); + unlock_kernel(); av7110->arm_thread = current; @@ -211,31 +211,31 @@ static int arm_thread(void *data) break; } - if (!av7110->arm_ready) - continue; + if (!av7110->arm_ready) + continue; - if (down_interruptible(&av7110->dcomlock)) - break; + if (down_interruptible(&av7110->dcomlock)) + break; - newloops=rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2); - up(&av7110->dcomlock); + newloops = rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2); + up(&av7110->dcomlock); - if (newloops==av7110->arm_loops) { + if (newloops == av7110->arm_loops) { printk(KERN_ERR "dvb-ttpci: ARM crashed @ card %d\n", - av7110->dvb_adapter->num); + av7110->dvb_adapter->num); arm_error(av7110); av7710_set_video_mode(av7110, vidmode); init_av7110_av(av7110); - if (down_interruptible(&av7110->dcomlock)) - break; + if (down_interruptible(&av7110->dcomlock)) + break; - newloops=rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2)-1; - up(&av7110->dcomlock); - } - av7110->arm_loops=newloops; + newloops = rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2) - 1; + up(&av7110->dcomlock); + } + av7110->arm_loops = newloops; } av7110->arm_thread = NULL; @@ -245,15 +245,15 @@ static int arm_thread(void *data) /** * Hack! we save the last av7110 ptr. This should be ok, since - * you rarely will use more then one IR control. + * you rarely will use more then one IR control. * * If we want to support multiple controls we would have to do much more... */ -void av7110_setup_irc_config (struct av7110 *av7110, u32 ir_config) +void av7110_setup_irc_config(struct av7110 *av7110, u32 ir_config) { static struct av7110 *last; - dprintk(4, "%p\n",av7110); + dprintk(4, "%p\n", av7110); if (!av7110) av7110 = last; @@ -268,22 +268,22 @@ void av7110_setup_irc_config (struct av7110 *av7110, u32 ir_config) static void (*irc_handler)(u32); -void av7110_register_irc_handler(void (*func)(u32)) +void av7110_register_irc_handler(void (*func)(u32)) { dprintk(4, "registering %p\n", func); - irc_handler = func; + irc_handler = func; } -void av7110_unregister_irc_handler(void (*func)(u32)) +void av7110_unregister_irc_handler(void (*func)(u32)) { dprintk(4, "unregistering %p\n", func); - irc_handler = NULL; + irc_handler = NULL; } static void run_handlers(unsigned long ircom) { - if (irc_handler != NULL) - (*irc_handler)((u32) ircom); + if (irc_handler != NULL) + (*irc_handler)((u32) ircom); } static DECLARE_TASKLET(irtask, run_handlers, 0); @@ -291,8 +291,8 @@ static DECLARE_TASKLET(irtask, run_handlers, 0); static void IR_handle(struct av7110 *av7110, u32 ircom) { dprintk(4, "ircommand = %08x\n", ircom); - irtask.data = (unsigned long) ircom; - tasklet_schedule(&irtask); + irtask.data = (unsigned long) ircom; + tasklet_schedule(&irtask); } /**************************************************************************** @@ -300,51 +300,51 @@ static void IR_handle(struct av7110 *av7110, u32 ircom) ****************************************************************************/ static int DvbDmxFilterCallback(u8 *buffer1, size_t buffer1_len, - u8 * buffer2, size_t buffer2_len, - struct dvb_demux_filter *dvbdmxfilter, - enum dmx_success success, - struct av7110 *av7110) -{ - if (!dvbdmxfilter->feed->demux->dmx.frontend) - return 0; - if (dvbdmxfilter->feed->demux->dmx.frontend->source==DMX_MEMORY_FE) - return 0; - - switch(dvbdmxfilter->type) { - case DMX_TYPE_SEC: - if ((((buffer1[1]<<8)|buffer1[2])&0xfff)+3!=buffer1_len) - return 0; - if (dvbdmxfilter->doneq) { - struct dmx_section_filter *filter=&dvbdmxfilter->filter; - int i; - u8 xor, neq=0; - - for (i=0; i<DVB_DEMUX_MASK_MAX; i++) { - xor=filter->filter_value[i]^buffer1[i]; - neq|=dvbdmxfilter->maskandnotmode[i]&xor; - } - if (!neq) - return 0; - } - return dvbdmxfilter->feed->cb.sec(buffer1, buffer1_len, + u8 *buffer2, size_t buffer2_len, + struct dvb_demux_filter *dvbdmxfilter, + enum dmx_success success, + struct av7110 *av7110) +{ + if (!dvbdmxfilter->feed->demux->dmx.frontend) + return 0; + if (dvbdmxfilter->feed->demux->dmx.frontend->source == DMX_MEMORY_FE) + return 0; + + switch (dvbdmxfilter->type) { + case DMX_TYPE_SEC: + if ((((buffer1[1] << 8) | buffer1[2]) & 0xfff) + 3 != buffer1_len) + return 0; + if (dvbdmxfilter->doneq) { + struct dmx_section_filter *filter = &dvbdmxfilter->filter; + int i; + u8 xor, neq = 0; + + for (i = 0; i < DVB_DEMUX_MASK_MAX; i++) { + xor = filter->filter_value[i] ^ buffer1[i]; + neq |= dvbdmxfilter->maskandnotmode[i] & xor; + } + if (!neq) + return 0; + } + return dvbdmxfilter->feed->cb.sec(buffer1, buffer1_len, buffer2, buffer2_len, &dvbdmxfilter->filter, - DMX_OK); - case DMX_TYPE_TS: - if (!(dvbdmxfilter->feed->ts_type & TS_PACKET)) - return 0; - if (dvbdmxfilter->feed->ts_type & TS_PAYLOAD_ONLY) - return dvbdmxfilter->feed->cb.ts(buffer1, buffer1_len, - buffer2, buffer2_len, - &dvbdmxfilter->feed->feed.ts, - DMX_OK); - else + DMX_OK); + case DMX_TYPE_TS: + if (!(dvbdmxfilter->feed->ts_type & TS_PACKET)) + return 0; + if (dvbdmxfilter->feed->ts_type & TS_PAYLOAD_ONLY) + return dvbdmxfilter->feed->cb.ts(buffer1, buffer1_len, + buffer2, buffer2_len, + &dvbdmxfilter->feed->feed.ts, + DMX_OK); + else av7110_p2t_write(buffer1, buffer1_len, - dvbdmxfilter->feed->pid, - &av7110->p2t_filter[dvbdmxfilter->index]); + dvbdmxfilter->feed->pid, + &av7110->p2t_filter[dvbdmxfilter->index]); default: - return 0; - } + return 0; + } } @@ -352,9 +352,9 @@ static int DvbDmxFilterCallback(u8 *buffer1, size_t buffer1_len, static inline void print_time(char *s) { #ifdef DEBUG_TIMING - struct timeval tv; - do_gettimeofday(&tv); - printk("%s: %d.%d\n", s, (int)tv.tv_sec, (int)tv.tv_usec); + struct timeval tv; + do_gettimeofday(&tv); + printk("%s: %d.%d\n", s, (int)tv.tv_sec, (int)tv.tv_usec); #endif } @@ -379,129 +379,129 @@ static inline void start_debi_dma(struct av7110 *av7110, int dir, irdebi(av7110, DEBISWAB, addr, 0, len); } -static void debiirq (unsigned long data) +static void debiirq(unsigned long data) { - struct av7110 *av7110 = (struct av7110*) data; - int type=av7110->debitype; - int handle=(type>>8)&0x1f; + struct av7110 *av7110 = (struct av7110 *) data; + int type = av7110->debitype; + int handle = (type >> 8) & 0x1f; unsigned int xfer = 0; - print_time("debi"); + print_time("debi"); dprintk(4, "type 0x%04x\n", type); - if (type==-1) { + if (type == -1) { printk("DEBI irq oops @ %ld, psr:0x%08x, ssr:0x%08x\n", jiffies, saa7146_read(av7110->dev, PSR), saa7146_read(av7110->dev, SSR)); goto debi_done; - } - av7110->debitype=-1; + } + av7110->debitype = -1; - switch (type&0xff) { + switch (type & 0xff) { - case DATA_TS_RECORD: - dvb_dmx_swfilter_packets(&av7110->demux, - (const u8 *)av7110->debi_virt, - av7110->debilen/188); + case DATA_TS_RECORD: + dvb_dmx_swfilter_packets(&av7110->demux, + (const u8 *) av7110->debi_virt, + av7110->debilen / 188); xfer = RX_BUFF; break; - case DATA_PES_RECORD: - if (av7110->demux.recording) + case DATA_PES_RECORD: + if (av7110->demux.recording) av7110_record_cb(&av7110->p2t[handle], - (u8 *)av7110->debi_virt, - av7110->debilen); + (u8 *) av7110->debi_virt, + av7110->debilen); xfer = RX_BUFF; break; - case DATA_IPMPE: - case DATA_FSECTION: - case DATA_PIPING: - if (av7110->handle2filter[handle]) - DvbDmxFilterCallback((u8 *)av7110->debi_virt, - av7110->debilen, NULL, 0, - av7110->handle2filter[handle], - DMX_OK, av7110); + case DATA_IPMPE: + case DATA_FSECTION: + case DATA_PIPING: + if (av7110->handle2filter[handle]) + DvbDmxFilterCallback((u8 *)av7110->debi_virt, + av7110->debilen, NULL, 0, + av7110->handle2filter[handle], + DMX_OK, av7110); xfer = RX_BUFF; break; - case DATA_CI_GET: - { - u8 *data=av7110->debi_virt; - - if ((data[0]<2) && data[2]==0xff) { - int flags=0; - if (data[5]>0) - flags|=CA_CI_MODULE_PRESENT; - if (data[5]>5) - flags|=CA_CI_MODULE_READY; - av7110->ci_slot[data[0]].flags=flags; - } else - ci_get_data(&av7110->ci_rbuffer, - av7110->debi_virt, - av7110->debilen); + case DATA_CI_GET: + { + u8 *data = av7110->debi_virt; + + if ((data[0] < 2) && data[2] == 0xff) { + int flags = 0; + if (data[5] > 0) + flags |= CA_CI_MODULE_PRESENT; + if (data[5] > 5) + flags |= CA_CI_MODULE_READY; + av7110->ci_slot[data[0]].flags = flags; + } else + ci_get_data(&av7110->ci_rbuffer, + av7110->debi_virt, + av7110->debilen); xfer = RX_BUFF; break; - } + } - case DATA_COMMON_INTERFACE: - CI_handle(av7110, (u8 *)av7110->debi_virt, av7110->debilen); + case DATA_COMMON_INTERFACE: + CI_handle(av7110, (u8 *)av7110->debi_virt, av7110->debilen); #if 0 - { - int i; - - printk("av7110%d: ", av7110->num); - printk("%02x ", *(u8 *)av7110->debi_virt); - printk("%02x ", *(1+(u8 *)av7110->debi_virt)); - for (i=2; i<av7110->debilen; i++) - printk("%02x ", (*(i+(unsigned char *)av7110->debi_virt))); - for (i=2; i<av7110->debilen; i++) - printk("%c", chtrans(*(i+(unsigned char *)av7110->debi_virt))); - - printk("\n"); - } + { + int i; + + printk("av7110%d: ", av7110->num); + printk("%02x ", *(u8 *)av7110->debi_virt); + printk("%02x ", *(1+(u8 *)av7110->debi_virt)); + for (i = 2; i < av7110->debilen; i++) + printk("%02x ", (*(i+(unsigned char *)av7110->debi_virt))); + for (i = 2; i < av7110->debilen; i++) + printk("%c", chtrans(*(i+(unsigned char *)av7110->debi_virt))); + + printk("\n"); + } #endif xfer = RX_BUFF; break; - case DATA_DEBUG_MESSAGE: - ((s8*)av7110->debi_virt)[Reserved_SIZE-1]=0; - printk("%s\n", (s8 *)av7110->debi_virt); + case DATA_DEBUG_MESSAGE: + ((s8*)av7110->debi_virt)[Reserved_SIZE - 1] = 0; + printk("%s\n", (s8 *) av7110->debi_virt); xfer = RX_BUFF; break; - case DATA_CI_PUT: + case DATA_CI_PUT: dprintk(4, "debi DATA_CI_PUT\n"); - case DATA_MPEG_PLAY: + case DATA_MPEG_PLAY: dprintk(4, "debi DATA_MPEG_PLAY\n"); - case DATA_BMP_LOAD: + case DATA_BMP_LOAD: dprintk(4, "debi DATA_BMP_LOAD\n"); xfer = TX_BUFF; break; - default: - break; - } + default: + break; + } debi_done: - spin_lock(&av7110->debilock); + spin_lock(&av7110->debilock); if (xfer) iwdebi(av7110, DEBINOSWAP, xfer, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); + ARM_ClearMailBox(av7110); + spin_unlock(&av7110->debilock); } /* irq from av7110 firmware writing the mailbox register in the DPRAM */ -static void gpioirq (unsigned long data) +static void gpioirq(unsigned long data) { - struct av7110 *av7110 = (struct av7110*) data; - u32 rxbuf, txbuf; - int len; - - if (av7110->debitype !=-1) + struct av7110 *av7110 = (struct av7110 *) data; + u32 rxbuf, txbuf; + int len; + + if (av7110->debitype != -1) /* we shouldn't get any irq while a debi xfer is running */ printk("dvb-ttpci: GPIO0 irq oops @ %ld, psr:0x%08x, ssr:0x%08x\n", jiffies, saa7146_read(av7110->dev, PSR), saa7146_read(av7110->dev, SSR)); - + if (saa7146_wait_for_debi_done(av7110->dev, 0)) { printk(KERN_ERR "%s: saa7146_wait_for_debi_done timed out\n", __FUNCTION__); BUG(); /* maybe we should try resetting the debi? */ @@ -511,37 +511,37 @@ static void gpioirq (unsigned long data) ARM_ClearIrq(av7110); /* see what the av7110 wants */ - av7110->debitype = irdebi(av7110, DEBINOSWAP, IRQ_STATE, 0, 2); - av7110->debilen = irdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - rxbuf=irdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - txbuf=irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + av7110->debitype = irdebi(av7110, DEBINOSWAP, IRQ_STATE, 0, 2); + av7110->debilen = irdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + rxbuf = irdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + txbuf = irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); len = (av7110->debilen + 3) & ~3; - print_time("gpio"); + print_time("gpio"); dprintk(8, "GPIO0 irq 0x%04x %d\n", av7110->debitype, av7110->debilen); - switch (av7110->debitype&0xff) { + switch (av7110->debitype & 0xff) { - case DATA_TS_PLAY: - case DATA_PES_PLAY: - break; + case DATA_TS_PLAY: + case DATA_PES_PLAY: + break; case DATA_MPEG_VIDEO_EVENT: { u32 h_ar; struct video_event event; - av7110->video_size.w = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_WIDTH, 0, 2); - h_ar = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_HEIGHT_AR, 0, 2); + av7110->video_size.w = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_WIDTH, 0, 2); + h_ar = irdebi(av7110, DEBINOSWAP, STATUS_MPEG_HEIGHT_AR, 0, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); av7110->video_size.h = h_ar & 0xfff; dprintk(8, "GPIO0 irq: DATA_MPEG_VIDEO_EVENT: w/h/ar = %u/%u/%u\n", - av7110->video_size.w, - av7110->video_size.h, - av7110->video_size.aspect_ratio); + av7110->video_size.w, + av7110->video_size.h, + av7110->video_size.aspect_ratio); event.type = VIDEO_EVENT_SIZE_CHANGED; event.u.size.w = av7110->video_size.w; @@ -567,139 +567,139 @@ static void gpioirq (unsigned long data) break; } - case DATA_CI_PUT: - { - int avail; - struct dvb_ringbuffer *cibuf=&av7110->ci_wbuffer; - - avail=dvb_ringbuffer_avail(cibuf); - if (avail<=2) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } - len= DVB_RINGBUFFER_PEEK(cibuf,0)<<8; - len|=DVB_RINGBUFFER_PEEK(cibuf,1); - if (avail<len+2) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } - DVB_RINGBUFFER_SKIP(cibuf,2); - - dvb_ringbuffer_read(cibuf,av7110->debi_virt,len,0); - - iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); + case DATA_CI_PUT: + { + int avail; + struct dvb_ringbuffer *cibuf = &av7110->ci_wbuffer; + + avail = dvb_ringbuffer_avail(cibuf); + if (avail <= 2) { + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + break; + } + len = DVB_RINGBUFFER_PEEK(cibuf, 0) << 8; + len |= DVB_RINGBUFFER_PEEK(cibuf, 1); + if (avail < len + 2) { + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + break; + } + DVB_RINGBUFFER_SKIP(cibuf, 2); + + dvb_ringbuffer_read(cibuf, av7110->debi_virt, len, 0); + + iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); dprintk(8, "DMA: CI\n"); start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE + txbuf, len); - spin_unlock(&av7110->debilock); + spin_unlock(&av7110->debilock); wake_up(&cibuf->queue); - return; - } - - case DATA_MPEG_PLAY: - if (!av7110->playing) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } - len=0; - if (av7110->debitype&0x100) { - spin_lock(&av7110->aout.lock); - len=av7110_pes_play(av7110->debi_virt, &av7110->aout, 2048); - spin_unlock(&av7110->aout.lock); - } - if (len<=0 && (av7110->debitype&0x200) - &&av7110->videostate.play_state!=VIDEO_FREEZED) { - spin_lock(&av7110->avout.lock); - len=av7110_pes_play(av7110->debi_virt, &av7110->avout, 2048); - spin_unlock(&av7110->avout.lock); - } - if (len<=0) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } + return; + } + + case DATA_MPEG_PLAY: + if (!av7110->playing) { + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + break; + } + len = 0; + if (av7110->debitype & 0x100) { + spin_lock(&av7110->aout.lock); + len = av7110_pes_play(av7110->debi_virt, &av7110->aout, 2048); + spin_unlock(&av7110->aout.lock); + } + if (len <= 0 && (av7110->debitype & 0x200) + &&av7110->videostate.play_state != VIDEO_FREEZED) { + spin_lock(&av7110->avout.lock); + len = av7110_pes_play(av7110->debi_virt, &av7110->avout, 2048); + spin_unlock(&av7110->avout.lock); + } + if (len <= 0) { + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + break; + } dprintk(8, "GPIO0 PES_PLAY len=%04x\n", len); - iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); dprintk(8, "DMA: MPEG_PLAY\n"); start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE + txbuf, len); - spin_unlock(&av7110->debilock); - return; + spin_unlock(&av7110->debilock); + return; - case DATA_BMP_LOAD: - len=av7110->debilen; + case DATA_BMP_LOAD: + len = av7110->debilen; dprintk(8, "gpio DATA_BMP_LOAD len %d\n", len); - if (!len) { - av7110->bmp_state=BMP_LOADED; - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - wake_up(&av7110->bmpq); + if (!len) { + av7110->bmp_state = BMP_LOADED; + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); + iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); + wake_up(&av7110->bmpq); dprintk(8, "gpio DATA_BMP_LOAD done\n"); - break; - } - if (len>av7110->bmplen) - len=av7110->bmplen; - if (len>2*1024) - len=2*1024; - iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); - memcpy(av7110->debi_virt, av7110->bmpbuf+av7110->bmpp, len); - av7110->bmpp+=len; - av7110->bmplen-=len; + break; + } + if (len > av7110->bmplen) + len = av7110->bmplen; + if (len > 2 * 1024) + len = 2 * 1024; + iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); + iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); + memcpy(av7110->debi_virt, av7110->bmpbuf+av7110->bmpp, len); + av7110->bmpp += len; + av7110->bmplen -= len; dprintk(8, "gpio DATA_BMP_LOAD DMA len %d\n", len); start_debi_dma(av7110, DEBI_WRITE, DPRAM_BASE+txbuf, len); - spin_unlock(&av7110->debilock); - return; - - case DATA_CI_GET: - case DATA_COMMON_INTERFACE: - case DATA_FSECTION: - case DATA_IPMPE: - case DATA_PIPING: - if (!len || len>4*1024) { - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - break; + spin_unlock(&av7110->debilock); + return; + + case DATA_CI_GET: + case DATA_COMMON_INTERFACE: + case DATA_FSECTION: + case DATA_IPMPE: + case DATA_PIPING: + if (!len || len > 4 * 1024) { + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + break; } /* fall through */ - case DATA_TS_RECORD: - case DATA_PES_RECORD: + case DATA_TS_RECORD: + case DATA_PES_RECORD: dprintk(8, "DMA: TS_REC etc.\n"); start_debi_dma(av7110, DEBI_READ, DPRAM_BASE+rxbuf, len); - spin_unlock(&av7110->debilock); - return; - - case DATA_DEBUG_MESSAGE: - if (!len || len>0xff) { - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - break; - } + spin_unlock(&av7110->debilock); + return; + + case DATA_DEBUG_MESSAGE: + if (!len || len > 0xff) { + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + break; + } start_debi_dma(av7110, DEBI_READ, Reserved, len); - spin_unlock(&av7110->debilock); - return; + spin_unlock(&av7110->debilock); + return; - case DATA_IRCOMMAND: - IR_handle(av7110, - swahw32(irdebi(av7110, DEBINOSWAP, Reserved, 0, 4))); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - break; + case DATA_IRCOMMAND: + IR_handle(av7110, + swahw32(irdebi(av7110, DEBINOSWAP, Reserved, 0, 4))); + iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); + break; - default: + default: printk("dvb-ttpci: gpioirq unknown type=%d len=%d\n", - av7110->debitype, av7110->debilen); - break; - } - av7110->debitype=-1; + av7110->debitype, av7110->debilen); + break; + } + av7110->debitype = -1; ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); + spin_unlock(&av7110->debilock); } @@ -718,7 +718,7 @@ static int dvb_osd_ioctl(struct inode *inode, struct file *file, return av7110_osd_capability(av7110, (osd_cap_t *) parg); return -EINVAL; - } +} static struct file_operations dvb_osd_fops = { @@ -740,7 +740,7 @@ static struct dvb_device dvbdev_osd = { static inline int SetPIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid, u16 subpid, u16 pcrpid) - { +{ dprintk(4, "%p\n", av7110); if (vpid == 0x1fff || apid == 0x1fff || @@ -760,7 +760,7 @@ void ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid, u16 subpid, u16 pcrpid) { dprintk(4, "%p\n", av7110); - + if (down_interruptible(&av7110->pid_mutex)) return; @@ -772,13 +772,13 @@ void ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid, av7110->pids[DMX_PES_TELETEXT] = ttpid; if (!(pcrpid & 0x8000)) av7110->pids[DMX_PES_PCR] = pcrpid; - + av7110->pids[DMX_PES_SUBTITLE] = 0; if (av7110->fe_synced) { pcrpid = av7110->pids[DMX_PES_PCR]; SetPIDs(av7110, vpid, apid, ttpid, subpid, pcrpid); - } + } up(&av7110->pid_mutex); } @@ -795,8 +795,8 @@ static int StartHWFilter(struct dvb_demux_filter *dvbdmxfilter) u16 buf[20]; int ret, i; u16 handle; -// u16 mode=0x0320; - u16 mode=0xb96a; +// u16 mode = 0x0320; + u16 mode = 0xb96a; dprintk(4, "%p\n", av7110); @@ -809,11 +809,11 @@ static int StartHWFilter(struct dvb_demux_filter *dvbdmxfilter) (dvbdmxfilter->filter.filter_value[i] << 8) | dvbdmxfilter->maskandmode[i]; mode = 4; - } + } } else if ((dvbdmxfeed->ts_type & TS_PACKET) && !(dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)) { av7110_p2t_init(&av7110->p2t_filter[dvbdmxfilter->index], dvbdmxfeed); - } + } buf[0] = (COMTYPE_PID_FILTER << 8) + AddPIDFilter; buf[1] = 16; @@ -828,13 +828,13 @@ static int StartHWFilter(struct dvb_demux_filter *dvbdmxfilter) ret, handle); dvbdmxfilter->hw_handle = 0xffff; return -1; - } + } av7110->handle2filter[handle] = dvbdmxfilter; dvbdmxfilter->hw_handle = handle; return ret; - } +} static int StopHWFilter(struct dvb_demux_filter *dvbdmxfilter) { @@ -843,7 +843,7 @@ static int StopHWFilter(struct dvb_demux_filter *dvbdmxfilter) u16 answ[2]; int ret; u16 handle; - + dprintk(4, "%p\n", av7110); handle = dvbdmxfilter->hw_handle; @@ -851,7 +851,7 @@ static int StopHWFilter(struct dvb_demux_filter *dvbdmxfilter) printk("%s tried to stop invalid filter %04x, filter type = %x\n", __FUNCTION__, handle, dvbdmxfilter->type); return 0; - } + } av7110->handle2filter[handle] = NULL; @@ -865,8 +865,8 @@ static int StopHWFilter(struct dvb_demux_filter *dvbdmxfilter) __FUNCTION__, buf[0], buf[1], buf[2], ret, answ[0], answ[1], dvbdmxfilter->feed->pid); ret = -1; - } - return ret; + } + return ret; } @@ -890,7 +890,7 @@ static void dvb_feed_start_pid(struct dvb_demux_feed *dvbdmxfeed) } if (dvbdmxfeed->pes_type <= 2 || dvbdmxfeed->pes_type == 4) ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); - + if (dvbdmxfeed->pes_type < 2 && npids[0]) if (av7110->fe_synced) av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0); @@ -902,16 +902,16 @@ static void dvb_feed_start_pid(struct dvb_demux_feed *dvbdmxfeed) av7110_av_start_record(av7110, RP_VIDEO, dvbdmxfeed); } } - + static void dvb_feed_stop_pid(struct dvb_demux_feed *dvbdmxfeed) { struct dvb_demux *dvbdmx = dvbdmxfeed->demux; struct av7110 *av7110 = (struct av7110 *) dvbdmx->priv; u16 *pid = dvbdmx->pids, npids[5]; int i; - + dprintk(4, "%p\n", av7110); - + if (dvbdmxfeed->pes_type <= 1) { av7110_av_stop(av7110, dvbdmxfeed->pes_type ? RP_VIDEO : RP_AUDIO); if (!av7110->rec_mode) @@ -926,31 +926,31 @@ static void dvb_feed_stop_pid(struct dvb_demux_feed *dvbdmxfeed) if (dvbdmxfeed->ts_type & TS_PACKET) StopHWFilter(dvbdmxfeed->filter); npids[2] = 0; - break; + break; case 0: case 1: case 4: if (!pids_off) return; npids[i] = (pid[i]&0x8000) ? 0 : pid[i]; - break; - } + break; + } ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); } - + static int av7110_start_feed(struct dvb_demux_feed *feed) { struct dvb_demux *demux = feed->demux; struct av7110 *av7110 = demux->priv; - + dprintk(4, "%p\n", av7110); - + if (!demux->dmx.frontend) return -EINVAL; - + if (feed->pid > 0x1fff) return -EINVAL; - + if (feed->type == DMX_TYPE_TS) { if ((feed->ts_type & TS_DECODER) && (feed->pes_type < DMX_TS_PES_OTHER)) { @@ -965,17 +965,17 @@ static int av7110_start_feed(struct dvb_demux_feed *feed) av7110_av_start_play(av7110,RP_AV); demux->playing = 1; } - break; - default: + break; + default: dvb_feed_start_pid(feed); - break; - } + break; + } } else if ((feed->ts_type & TS_PACKET) && (demux->dmx.frontend->source != DMX_MEMORY_FE)) { StartHWFilter(feed->filter); } } - + if (feed->type == DMX_TYPE_SEC) { int i; @@ -989,8 +989,8 @@ static int av7110_start_feed(struct dvb_demux_feed *feed) demux->filter[i].state = DMX_STATE_GO; if (demux->dmx.frontend->source != DMX_MEMORY_FE) StartHWFilter(&demux->filter[i]); - } - } + } + } return 0; } @@ -1023,7 +1023,7 @@ static int av7110_stop_feed(struct dvb_demux_feed *feed) if (feed->type == DMX_TYPE_SEC) { int i; - for (i=0; i<demux->filternum; i++) + for (i = 0; i<demux->filternum; i++) if (demux->filter[i].state == DMX_STATE_GO && demux->filter[i].filter.parent == &feed->feed.sec) { demux->filter[i].state = DMX_STATE_READY; @@ -1032,7 +1032,7 @@ static int av7110_stop_feed(struct dvb_demux_feed *feed) } } - return 0; + return 0; } @@ -1085,14 +1085,14 @@ static int dvb_get_stc(struct dmx_demux *demux, unsigned int num, if (ret) { printk(KERN_ERR "%s: av7110_fw_request error\n", __FUNCTION__); return -EIO; -} + } dprintk(2, "fwstc = %04hx %04hx %04hx %04hx\n", fwstc[0], fwstc[1], fwstc[2], fwstc[3]); *stc = (((uint64_t) ((fwstc[3] & 0x8000) >> 15)) << 32) | (((uint64_t) fwstc[1]) << 16) | ((uint64_t) fwstc[0]); *base = 1; - + dprintk(4, "stc = %lu\n", (unsigned long)*stc); return 0; @@ -1109,15 +1109,16 @@ static int av7110_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone) struct av7110* av7110 = (struct av7110*) fe->dvb->priv; switch (tone) { - case SEC_TONE_ON: - Set22K(av7110, 1); - break; - case SEC_TONE_OFF: - Set22K(av7110, 0); - break; + case SEC_TONE_ON: + Set22K(av7110, 1); + break; - default: - return -EINVAL; + case SEC_TONE_OFF: + Set22K(av7110, 0); + break; + + default: + return -EINVAL; } return 0; @@ -1241,21 +1242,21 @@ static void vpeirq(unsigned long data) static int av7110_register(struct av7110 *av7110) { - int ret, i; - struct dvb_demux *dvbdemux=&av7110->demux; + int ret, i; + struct dvb_demux *dvbdemux = &av7110->demux; struct dvb_demux *dvbdemux1 = &av7110->demux1; dprintk(4, "%p\n", av7110); - if (av7110->registered) - return -1; + if (av7110->registered) + return -1; - av7110->registered=1; + av7110->registered = 1; - dvbdemux->priv = (void *) av7110; + dvbdemux->priv = (void *) av7110; - for (i=0; i<32; i++) - av7110->handle2filter[i]=NULL; + for (i = 0; i < 32; i++) + av7110->handle2filter[i] = NULL; dvbdemux->filternum = 32; dvbdemux->feednum = 32; @@ -1271,27 +1272,27 @@ static int av7110_register(struct av7110 *av7110) av7110->dmxdev.filternum = 32; av7110->dmxdev.demux = &dvbdemux->dmx; av7110->dmxdev.capabilities = 0; - + dvb_dmxdev_init(&av7110->dmxdev, av7110->dvb_adapter); - av7110->hw_frontend.source = DMX_FRONTEND_0; + av7110->hw_frontend.source = DMX_FRONTEND_0; - ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->hw_frontend); + ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->hw_frontend); + + if (ret < 0) + return ret; - if (ret < 0) - return ret; - - av7110->mem_frontend.source = DMX_MEMORY_FE; + av7110->mem_frontend.source = DMX_MEMORY_FE; ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &av7110->mem_frontend); if (ret < 0) - return ret; - - ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, + return ret; + + ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &av7110->hw_frontend); - if (ret < 0) - return ret; + if (ret < 0) + return ret; av7110_av_register(av7110); av7110_ca_register(av7110); @@ -1300,8 +1301,8 @@ static int av7110_register(struct av7110 *av7110) dvb_register_device(av7110->dvb_adapter, &av7110->osd_dev, &dvbdev_osd, av7110, DVB_DEVICE_OSD); #endif - - dvb_net_init(av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx); + + dvb_net_init(av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx); if (budgetpatch) { /* initialize software demux1 without its own frontend @@ -1335,13 +1336,13 @@ static int av7110_register(struct av7110 *av7110) static void dvb_unregister(struct av7110 *av7110) { - struct dvb_demux *dvbdemux=&av7110->demux; + struct dvb_demux *dvbdemux = &av7110->demux; struct dvb_demux *dvbdemux1 = &av7110->demux1; dprintk(4, "%p\n", av7110); - if (!av7110->registered) - return; + if (!av7110->registered) + return; if (budgetpatch) { dvb_net_release(&av7110->dvb_net1); @@ -1353,11 +1354,11 @@ static void dvb_unregister(struct av7110 *av7110) dvb_net_release(&av7110->dvb_net); dvbdemux->dmx.close(&dvbdemux->dmx); - dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->hw_frontend); - dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->mem_frontend); + dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->hw_frontend); + dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->mem_frontend); - dvb_dmxdev_release(&av7110->dmxdev); - dvb_dmx_release(&av7110->demux); + dvb_dmxdev_release(&av7110->dmxdev); + dvb_dmx_release(&av7110->demux); if (av7110->fe != NULL) dvb_unregister_frontend(av7110->fe); @@ -1375,7 +1376,7 @@ int i2c_writereg(struct av7110 *av7110, u8 id, u8 reg, u8 val) { u8 msg[2] = { reg, val }; struct i2c_msg msgs; - + msgs.flags = 0; msgs.addr = id / 2; msgs.len = 2; @@ -1411,10 +1412,10 @@ static int check_firmware(struct av7110* av7110) { u32 crc = 0, len = 0; unsigned char *ptr; - + /* check for firmware magic */ ptr = av7110->bin_fw; - if (ptr[0] != 'A' || ptr[1] != 'V' || + if (ptr[0] != 'A' || ptr[1] != 'V' || ptr[2] != 'F' || ptr[3] != 'W') { printk("dvb-ttpci: this is not an av7110 firmware\n"); return -EINVAL; @@ -1422,34 +1423,34 @@ static int check_firmware(struct av7110* av7110) ptr += 4; /* check dpram file */ - crc = ntohl(*(u32*)ptr); + crc = ntohl(*(u32*) ptr); ptr += 4; - len = ntohl(*(u32*)ptr); + len = ntohl(*(u32*) ptr); ptr += 4; if (len >= 512) { printk("dvb-ttpci: dpram file is way to big.\n"); return -EINVAL; } - if( crc != crc32_le(0,ptr,len)) { + if (crc != crc32_le(0, ptr, len)) { printk("dvb-ttpci: crc32 of dpram file does not match.\n"); return -EINVAL; } av7110->bin_dpram = ptr; av7110->size_dpram = len; ptr += len; - + /* check root file */ - crc = ntohl(*(u32*)ptr); + crc = ntohl(*(u32*) ptr); ptr += 4; - len = ntohl(*(u32*)ptr); + len = ntohl(*(u32*) ptr); ptr += 4; - + if (len <= 200000 || len >= 300000 || len > ((av7110->bin_fw + av7110->size_fw) - ptr)) { - printk("dvb-ttpci: root file has strange size (%d). aborting.\n",len); + printk("dvb-ttpci: root file has strange size (%d). aborting.\n", len); return -EINVAL; } - if( crc != crc32_le(0,ptr,len)) { + if( crc != crc32_le(0, ptr, len)) { printk("dvb-ttpci: crc32 of root file does not match.\n"); return -EINVAL; } @@ -1495,7 +1496,7 @@ static int get_firmware(struct av7110* av7110) } /* check if the firmware is available */ - av7110->bin_fw = (unsigned char*) vmalloc(fw->size); + av7110->bin_fw = (unsigned char *) vmalloc(fw->size); if (NULL == av7110->bin_fw) { dprintk(1, "out of memory\n"); release_firmware(fw); @@ -1603,11 +1604,11 @@ static int alps_bsru6_set_symbol_rate(struct dvb_frontend* fe, u32 srate, u32 ra else if (srate < 30000000) { aclk = 0xb6; bclk = 0x53; } else if (srate < 45000000) { aclk = 0xb4; bclk = 0x51; } - stv0299_writereg (fe, 0x13, aclk); - stv0299_writereg (fe, 0x14, bclk); - stv0299_writereg (fe, 0x1f, (ratio >> 16) & 0xff); - stv0299_writereg (fe, 0x20, (ratio >> 8) & 0xff); - stv0299_writereg (fe, 0x21, (ratio ) & 0xf0); + stv0299_writereg(fe, 0x13, aclk); + stv0299_writereg(fe, 0x14, bclk); + stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff); + stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff); + stv0299_writereg(fe, 0x21, (ratio ) & 0xf0); return 0; } @@ -1631,7 +1632,7 @@ static int alps_bsru6_pll_set(struct dvb_frontend* fe, struct dvb_frontend_param if (params->frequency > 1530000) data[3] = 0xc0; - ret = i2c_transfer (&av7110->i2c_adap, &msg, 1); + ret = i2c_transfer(&av7110->i2c_adap, &msg, 1); if (ret != 1) return -EIO; return 0; @@ -1668,7 +1669,7 @@ static int alps_tdbe2_pll_set(struct dvb_frontend* fe, struct dvb_frontend_param data[2] = 0x85 | ((div >> 10) & 0x60); data[3] = (params->frequency < 174000000 ? 0x88 : params->frequency < 470000000 ? 0x84 : 0x81); - if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1) + if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1) return -EIO; return 0; } @@ -1698,7 +1699,7 @@ static int grundig_29504_451_pll_set(struct dvb_frontend* fe, data[2] = 0x8e; data[3] = 0x00; - if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1) + if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1) return -EIO; return 0; } @@ -1726,7 +1727,7 @@ static int philips_cd1516_pll_set(struct dvb_frontend* fe, data[2] = 0x8e; data[3] = (f < 174000000 ? 0xa1 : f < 470000000 ? 0x92 : 0x34); - if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1) + if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1) return -EIO; return 0; } @@ -1760,7 +1761,7 @@ static int alps_tdlb7_pll_set(struct dvb_frontend* fe, struct dvb_frontend_param data[2] = 0x85; data[3] = pwr << 6; - if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1) + if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1) return -EIO; return 0; } @@ -1808,16 +1809,16 @@ static int nexusca_stv0297_pll_set(struct dvb_frontend* fe, struct dvb_frontend_ return -EINVAL; stv0297_enable_plli2c(fe); - if (i2c_transfer (&av7110->i2c_adap, &msg, 1) != 1) { + if (i2c_transfer(&av7110->i2c_adap, &msg, 1) != 1) { printk("nexusca: pll transfer failed!\n"); return -EIO; } // wait for PLL lock - for(i=0; i< 20; i++) { + for(i = 0; i < 20; i++) { stv0297_enable_plli2c(fe); - if (i2c_transfer (&av7110->i2c_adap, &readmsg, 1) == 1) + if (i2c_transfer(&av7110->i2c_adap, &readmsg, 1) == 1) if (data[0] & 0x40) break; msleep(10); } @@ -1855,9 +1856,9 @@ static void av7110_fe_lock_fix(struct av7110* av7110, fe_status_t status) av7110->pids[DMX_PES_AUDIO], av7110->pids[DMX_PES_TELETEXT], 0, av7110->pids[DMX_PES_PCR]); - av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0); + av7110_fw_cmd(av7110, COMTYPE_PIDFILTER, Scan, 0); } else { - SetPIDs(av7110, 0, 0, 0, 0, 0); + SetPIDs(av7110, 0, 0, 0, 0, 0); av7110_fw_cmd(av7110, COMTYPE_PID_FILTER, FlushTSQueue, 0); av7110_wait_msgstate(av7110, GPMQBusy); } @@ -2249,8 +2250,8 @@ static int av7110_attach(struct saa7146_dev* dev, struct saa7146_pci_extension_d } memset(av7110, 0, sizeof(struct av7110)); - - av7110->card_name = (char*)pci_ext->ext_priv; + + av7110->card_name = (char*) pci_ext->ext_priv; av7110->dev = dev; dev->ext_priv = av7110; @@ -2363,38 +2364,38 @@ err_no_mem: /* end of budgetpatch register initialization */ tasklet_init (&av7110->vpe_tasklet, vpeirq, (unsigned long) av7110); } else { - saa7146_write(dev, PCI_BT_V1, 0x1c00101f); - saa7146_write(dev, BCS_CTRL, 0x80400040); + saa7146_write(dev, PCI_BT_V1, 0x1c00101f); + saa7146_write(dev, BCS_CTRL, 0x80400040); - /* set dd1 stream a & b */ - saa7146_write(dev, DD1_STREAM_B, 0x00000000); - saa7146_write(dev, DD1_INIT, 0x03000000); - saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); + /* set dd1 stream a & b */ + saa7146_write(dev, DD1_STREAM_B, 0x00000000); + saa7146_write(dev, DD1_INIT, 0x03000000); + saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - /* upload all */ - saa7146_write(dev, MC2, 0x077c077c); - saa7146_write(dev, GPIO_CTRL, 0x000000); + /* upload all */ + saa7146_write(dev, MC2, 0x077c077c); + saa7146_write(dev, GPIO_CTRL, 0x000000); } tasklet_init (&av7110->debi_tasklet, debiirq, (unsigned long) av7110); tasklet_init (&av7110->gpio_tasklet, gpioirq, (unsigned long) av7110); - sema_init(&av7110->pid_mutex, 1); + sema_init(&av7110->pid_mutex, 1); - /* locks for data transfers from/to AV7110 */ - spin_lock_init (&av7110->debilock); - sema_init(&av7110->dcomlock, 1); - av7110->debitype=-1; + /* locks for data transfers from/to AV7110 */ + spin_lock_init(&av7110->debilock); + sema_init(&av7110->dcomlock, 1); + av7110->debitype = -1; - /* default OSD window */ - av7110->osdwin=1; + /* default OSD window */ + av7110->osdwin = 1; sema_init(&av7110->osd_sema, 1); - /* ARM "watchdog" */ + /* ARM "watchdog" */ init_waitqueue_head(&av7110->arm_wait); - av7110->arm_thread=NULL; - - /* allocate and init buffers */ + av7110->arm_thread = NULL; + + /* allocate and init buffers */ av7110->debi_virt = pci_alloc_consistent(dev->pci, 8192, &av7110->debi_bus); if (!av7110->debi_virt) { @@ -2402,7 +2403,7 @@ err_no_mem: goto err; } - av7110->iobuf = vmalloc(AVOUTLEN+AOUTLEN+BMPLEN+4*IPACKS); + av7110->iobuf = vmalloc(AVOUTLEN+AOUTLEN+BMPLEN+4*IPACKS); if (!av7110->iobuf) { ret = -ENOMEM; goto err; @@ -2410,13 +2411,13 @@ err_no_mem: av7110_av_init(av7110); - /* init BMP buffer */ - av7110->bmpbuf=av7110->iobuf+AVOUTLEN+AOUTLEN; - init_waitqueue_head(&av7110->bmpq); - + /* init BMP buffer */ + av7110->bmpbuf = av7110->iobuf+AVOUTLEN+AOUTLEN; + init_waitqueue_head(&av7110->bmpq); + av7110_ca_init(av7110); - /* load firmware into AV7110 cards */ + /* load firmware into AV7110 cards */ av7110_bootarm(av7110); if (av7110_firmversion(av7110)) { ret = -EIO; @@ -2436,16 +2437,16 @@ err_no_mem: /* set initial volume in mixer struct */ av7110->mixer.volume_left = volume; av7110->mixer.volume_right = volume; - + init_av7110_av(av7110); av7110_register(av7110); - + /* special case DVB-C: these cards have an analog tuner plus need some special handling, so we have separate saa7146_ext_vv data for these... */ ret = av7110_init_v4l(av7110); - + if (ret) goto err3; @@ -2468,24 +2469,24 @@ err2: err: i2c_del_adapter(&av7110->i2c_adap); - dvb_unregister_adapter (av7110->dvb_adapter); + dvb_unregister_adapter(av7110->dvb_adapter); if (NULL != av7110->debi_virt) pci_free_consistent(dev->pci, 8192, av7110->debi_virt, av7110->debi_bus); if (NULL != av7110->iobuf) vfree(av7110->iobuf); if (NULL != av7110 ) { - kfree(av7110); + kfree(av7110); } return ret; } -static int av7110_detach (struct saa7146_dev* saa) +static int av7110_detach(struct saa7146_dev* saa) { struct av7110 *av7110 = (struct av7110*)saa->ext_priv; dprintk(4, "%p\n", av7110); - + if (!av7110->device_initialized ) return 0; @@ -2513,7 +2514,7 @@ static int av7110_detach (struct saa7146_dev* saa) tasklet_kill(&av7110->gpio_tasklet); dvb_unregister(av7110); - + SAA7146_IER_DISABLE(saa, MASK_19 | MASK_03); SAA7146_ISR_CLEAR(saa, MASK_19 | MASK_03); @@ -2529,18 +2530,18 @@ static int av7110_detach (struct saa7146_dev* saa) dvb_unregister_adapter (av7110->dvb_adapter); av7110_num--; -#ifndef CONFIG_DVB_AV7110_FIRMWARE_FILE +#ifndef CONFIG_DVB_AV7110_FIRMWARE_FILE if (av7110->bin_fw) vfree(av7110->bin_fw); #endif - kfree (av7110); + kfree(av7110); saa->ext_priv = NULL; return 0; } -static void av7110_irq(struct saa7146_dev* dev, u32 *isr) +static void av7110_irq(struct saa7146_dev* dev, u32 *isr) { struct av7110 *av7110 = dev->ext_priv; @@ -2569,13 +2570,13 @@ static void av7110_irq(struct saa7146_dev* dev, u32 *isr) */ SAA7146_IER_DISABLE(av7110->dev, MASK_19); SAA7146_ISR_CLEAR(av7110->dev, MASK_19); - tasklet_schedule (&av7110->debi_tasklet); + tasklet_schedule(&av7110->debi_tasklet); } - + if (*isr & MASK_03) { //printk("av7110_irq: GPIO\n"); - tasklet_schedule (&av7110->gpio_tasklet); -} + tasklet_schedule(&av7110->gpio_tasklet); + } if ((*isr & MASK_10) && budgetpatch) tasklet_schedule(&av7110->vpe_tasklet); @@ -2632,17 +2633,17 @@ static struct saa7146_extension av7110_extension = { .irq_mask = MASK_19 | MASK_03 | MASK_10, .irq_func = av7110_irq, -}; +}; -static int __init av7110_init(void) +static int __init av7110_init(void) { int retval; retval = saa7146_register_extension(&av7110_extension); #if defined(CONFIG_INPUT_EVDEV) || defined(CONFIG_INPUT_EVDEV_MODULE) if (retval) goto failed_saa7146_register; - + retval = av7110_ir_init(); if (retval) goto failed_av7110_ir_init; @@ -2670,4 +2671,3 @@ MODULE_DESCRIPTION("driver for the SAA7146 based AV110 PCI DVB cards by " "Siemens, Technotrend, Hauppauge"); MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, others"); MODULE_LICENSE("GPL"); - diff --git a/drivers/media/dvb/ttpci/av7110.h b/drivers/media/dvb/ttpci/av7110.h index a1eded6999af..faba99a5cae8 100644 --- a/drivers/media/dvb/ttpci/av7110.h +++ b/drivers/media/dvb/ttpci/av7110.h @@ -49,38 +49,38 @@ extern int av7110_debug; enum {AV_PES_STREAM, PS_STREAM, TS_STREAM, PES_STREAM}; struct av7110_p2t { - u8 pes[TS_SIZE]; - u8 counter; - long int pos; - int frags; - struct dvb_demux_feed *feed; + u8 pes[TS_SIZE]; + u8 counter; + long int pos; + int frags; + struct dvb_demux_feed *feed; }; /* video MPEG decoder events: */ /* (code copied from dvb_frontend.c, should maybe be factored out...) */ #define MAX_VIDEO_EVENT 8 struct dvb_video_events { - struct video_event events[MAX_VIDEO_EVENT]; - int eventw; - int eventr; - int overflow; - wait_queue_head_t wait_queue; - spinlock_t lock; + struct video_event events[MAX_VIDEO_EVENT]; + int eventw; + int eventr; + int overflow; + wait_queue_head_t wait_queue; + spinlock_t lock; }; /* place to store all the necessary device information */ struct av7110 { - /* devices */ + /* devices */ - struct dvb_device dvb_dev; - struct dvb_net dvb_net; + struct dvb_device dvb_dev; + struct dvb_net dvb_net; struct video_device *v4l_dev; struct video_device *vbi_dev; - struct saa7146_dev *dev; + struct saa7146_dev *dev; struct i2c_adapter i2c_adap; @@ -90,31 +90,31 @@ struct av7110 { int analog_tuner_flags; int current_input; u32 current_freq; - - struct tasklet_struct debi_tasklet; - struct tasklet_struct gpio_tasklet; - int adac_type; /* audio DAC type */ -#define DVB_ADAC_TI 0 + struct tasklet_struct debi_tasklet; + struct tasklet_struct gpio_tasklet; + + int adac_type; /* audio DAC type */ +#define DVB_ADAC_TI 0 #define DVB_ADAC_CRYSTAL 1 -#define DVB_ADAC_MSP 2 -#define DVB_ADAC_NONE -1 +#define DVB_ADAC_MSP 2 +#define DVB_ADAC_NONE -1 - /* buffers */ + /* buffers */ - void *iobuf; /* memory for all buffers */ - struct dvb_ringbuffer avout; /* buffer for video or A/V mux */ + void *iobuf; /* memory for all buffers */ + struct dvb_ringbuffer avout; /* buffer for video or A/V mux */ #define AVOUTLEN (128*1024) - struct dvb_ringbuffer aout; /* buffer for audio */ + struct dvb_ringbuffer aout; /* buffer for audio */ #define AOUTLEN (64*1024) - void *bmpbuf; + void *bmpbuf; #define BMPLEN (8*32768+1024) - /* bitmap buffers and states */ + /* bitmap buffers and states */ - int bmpp; - int bmplen; + int bmpp; + int bmplen; volatile int bmp_state; #define BMP_NONE 0 #define BMP_LOADING 1 @@ -123,40 +123,40 @@ struct av7110 { wait_queue_head_t bmpq; - /* DEBI and polled command interface */ + /* DEBI and polled command interface */ - spinlock_t debilock; - struct semaphore dcomlock; + spinlock_t debilock; + struct semaphore dcomlock; volatile int debitype; volatile int debilen; - /* Recording and playback flags */ + /* Recording and playback flags */ - int rec_mode; - int playing; + int rec_mode; + int playing; #define RP_NONE 0 #define RP_VIDEO 1 #define RP_AUDIO 2 -#define RP_AV 3 +#define RP_AV 3 - /* OSD */ + /* OSD */ - int osdwin; /* currently active window */ - u16 osdbpp[8]; + int osdwin; /* currently active window */ + u16 osdbpp[8]; struct semaphore osd_sema; - /* CA */ + /* CA */ - ca_slot_info_t ci_slot[2]; + ca_slot_info_t ci_slot[2]; - int vidmode; - struct dmxdev dmxdev; - struct dvb_demux demux; + int vidmode; + struct dmxdev dmxdev; + struct dvb_demux demux; - struct dmx_frontend hw_frontend; - struct dmx_frontend mem_frontend; + struct dmx_frontend hw_frontend; + struct dmx_frontend mem_frontend; /* for budget mode demux1 */ struct dmxdev dmxdev1; @@ -170,66 +170,66 @@ struct av7110 { struct saa7146_pgtable pt; struct tasklet_struct vpe_tasklet; - int fe_synced; - struct semaphore pid_mutex; + int fe_synced; + struct semaphore pid_mutex; - int video_blank; - struct video_status videostate; - int display_ar; - int trickmode; + int video_blank; + struct video_status videostate; + int display_ar; + int trickmode; #define TRICK_NONE 0 #define TRICK_FAST 1 #define TRICK_SLOW 2 #define TRICK_FREEZE 3 - struct audio_status audiostate; + struct audio_status audiostate; - struct dvb_demux_filter *handle2filter[32]; - struct av7110_p2t p2t_filter[MAXFILT]; - struct dvb_filter_pes2ts p2t[2]; - struct ipack ipack[2]; - u8 *kbuf[2]; + struct dvb_demux_filter *handle2filter[32]; + struct av7110_p2t p2t_filter[MAXFILT]; + struct dvb_filter_pes2ts p2t[2]; + struct ipack ipack[2]; + u8 *kbuf[2]; - int sinfo; - int feeding; + int sinfo; + int feeding; - int arm_errors; - int registered; + int arm_errors; + int registered; /* AV711X */ - u32 arm_fw; - u32 arm_rtsl; - u32 arm_vid; - u32 arm_app; - u32 avtype; - int arm_ready; - struct task_struct *arm_thread; + u32 arm_fw; + u32 arm_rtsl; + u32 arm_vid; + u32 arm_app; + u32 avtype; + int arm_ready; + struct task_struct *arm_thread; wait_queue_head_t arm_wait; - u16 arm_loops; - int arm_rmmod; + u16 arm_loops; + int arm_rmmod; + + void *debi_virt; + dma_addr_t debi_bus; - void *debi_virt; - dma_addr_t debi_bus; + u16 pids[DMX_PES_OTHER]; - u16 pids[DMX_PES_OTHER]; - - struct dvb_ringbuffer ci_rbuffer; - struct dvb_ringbuffer ci_wbuffer; + struct dvb_ringbuffer ci_rbuffer; + struct dvb_ringbuffer ci_wbuffer; struct audio_mixer mixer; - struct dvb_adapter *dvb_adapter; - struct dvb_device *video_dev; - struct dvb_device *audio_dev; - struct dvb_device *ca_dev; - struct dvb_device *osd_dev; + struct dvb_adapter *dvb_adapter; + struct dvb_device *video_dev; + struct dvb_device *audio_dev; + struct dvb_device *ca_dev; + struct dvb_device *osd_dev; struct dvb_video_events video_events; - video_size_t video_size; + video_size_t video_size; + + u32 ir_config; - u32 ir_config; - /* firmware stuff */ unsigned int device_initialized; @@ -260,7 +260,7 @@ extern void ChangePIDs(struct av7110 *av7110, u16 vpid, u16 apid, u16 ttpid, u16 subpid, u16 pcrpid); extern void av7110_register_irc_handler(void (*func)(u32)); -extern void av7110_unregister_irc_handler(void (*func)(u32)); +extern void av7110_unregister_irc_handler(void (*func)(u32)); extern void av7110_setup_irc_config (struct av7110 *av7110, u32 ir_config); extern int av7110_ir_init (void); @@ -283,4 +283,3 @@ extern int av7110_init_v4l(struct av7110 *av7110); extern int av7110_exit_v4l(struct av7110 *av7110); #endif /* _AV7110_H_ */ - diff --git a/drivers/media/dvb/ttpci/av7110_hw.c b/drivers/media/dvb/ttpci/av7110_hw.c index d33136df4064..bd6e5ea4aefe 100644 --- a/drivers/media/dvb/ttpci/av7110_hw.c +++ b/drivers/media/dvb/ttpci/av7110_hw.c @@ -399,7 +399,7 @@ int __av7110_send_fw_cmd(struct av7110 *av7110, u16* buf, int length) if (type != NULL) { /* non-immediate COMMAND type */ - start = jiffies; + start = jiffies; for (;;) { stat = rdebi(av7110, DEBINOSWAP, MSGSTATE, 0, 2); if (stat & flags[0]) { @@ -412,8 +412,8 @@ int __av7110_send_fw_cmd(struct av7110 *av7110, u16* buf, int length) if (time_after(jiffies, start + ARM_WAIT_FREE)) { printk(KERN_ERR "%s: timeout waiting on busy %s QUEUE\n", __FUNCTION__, type); - return -1; - } + return -1; + } msleep(1); } } @@ -889,11 +889,11 @@ static int BlitBitmap(struct av7110 *av7110, u16 win, u16 x, u16 y, u16 trans) ret, av7110->bmp_state); av7110->bmp_state = BMP_NONE; return (ret == 0) ? -ETIMEDOUT : ret; - } + } BUG_ON (av7110->bmp_state != BMP_LOADED); - return av7110_fw_cmd(av7110, COMTYPE_OSD, BlitBmp, 4, win, x, y, trans); + return av7110_fw_cmd(av7110, COMTYPE_OSD, BlitBmp, 4, win, x, y, trans); } static inline int ReleaseBitmap(struct av7110 *av7110) @@ -962,7 +962,7 @@ static int OSDSetPalette(struct av7110 *av7110, u32 __user * colors, u8 first, u } static int OSDSetBlock(struct av7110 *av7110, int x0, int y0, - int x1, int y1, int inc, u8 __user *data) + int x1, int y1, int inc, u8 __user * data) { uint w, h, bpp, bpl, size, lpb, bnum, brest; int i; @@ -1061,9 +1061,9 @@ int av7110_osd_cmd(struct av7110 *av7110, osd_cmd_t *dc) get_user(blend, colors + i * 4 + 3)) { ret = -EFAULT; goto out; - } + } OSDSetColor(av7110, dc->color + i, r, g, b, blend); - } + } } ret = 0; goto out; @@ -1162,9 +1162,9 @@ int av7110_osd_capability(struct av7110 *av7110, osd_cap_t *cap) cap->val = 1000000; else cap->val = 92000; - return 0; - default: - return -EINVAL; - } + return 0; + default: + return -EINVAL; + } } #endif /* CONFIG_DVB_AV7110_OSD */ diff --git a/drivers/media/dvb/ttpci/av7110_ipack.c b/drivers/media/dvb/ttpci/av7110_ipack.c index b10bd77f9a6d..8879368534bf 100644 --- a/drivers/media/dvb/ttpci/av7110_ipack.c +++ b/drivers/media/dvb/ttpci/av7110_ipack.c @@ -21,9 +21,9 @@ void av7110_ipack_reset(struct ipack *p) int av7110_ipack_init(struct ipack *p, int size, - void (*func)(u8 *buf, int size, void *priv)) + void (*func)(u8 *buf, int size, void *priv)) { - if ( !(p->buf = vmalloc(size*sizeof(u8))) ){ + if (!(p->buf = vmalloc(size*sizeof(u8)))) { printk ("Couldn't allocate memory for ipack\n"); return -ENOMEM; } @@ -35,10 +35,10 @@ int av7110_ipack_init(struct ipack *p, int size, } -void av7110_ipack_free(struct ipack * p) +void av7110_ipack_free(struct ipack *p) { if (p->buf) - vfree(p->buf); + vfree(p->buf); } @@ -47,44 +47,44 @@ static void send_ipack(struct ipack *p) int off; struct dvb_audio_info ai; int ac3_off = 0; - int streamid=0; - int nframes= 0; - int f=0; + int streamid = 0; + int nframes = 0; + int f = 0; - switch ( p->mpeg ){ - case 2: + switch (p->mpeg) { + case 2: if (p->count < 10) return; p->buf[3] = p->cid; p->buf[4] = (u8)(((p->count - 6) & 0xff00) >> 8); p->buf[5] = (u8)((p->count - 6) & 0x00ff); - if (p->repack_subids && p->cid == PRIVATE_STREAM1){ - off = 9+p->buf[8]; + if (p->repack_subids && p->cid == PRIVATE_STREAM1) { + off = 9 + p->buf[8]; streamid = p->buf[off]; if ((streamid & 0xf8) == 0x80) { ai.off = 0; - ac3_off = ((p->buf[off+2] << 8)| - p->buf[off+3]); + ac3_off = ((p->buf[off + 2] << 8)| + p->buf[off + 3]); if (ac3_off < p->count) - f=dvb_filter_get_ac3info(p->buf+off+3+ac3_off, - p->count-ac3_off, &ai,0); - if ( !f ){ - nframes = (p->count-off-3-ac3_off)/ + f = dvb_filter_get_ac3info(p->buf + off + 3 + ac3_off, + p->count - ac3_off, &ai, 0); + if (!f) { + nframes = (p->count - off - 3 - ac3_off) / ai.framesize + 1; p->buf[off + 2] = (ac3_off >> 8) & 0xff; p->buf[off + 3] = (ac3_off) & 0xff; - p->buf[off+1] = nframes; + p->buf[off + 1] = nframes; ac3_off += nframes * ai.framesize - p->count; } } - } + } p->func(p->buf, p->count, p->data); - + p->buf[6] = 0x80; p->buf[7] = 0x00; p->buf[8] = 0x00; p->count = 9; - if (p->repack_subids && p->cid == PRIVATE_STREAM1 + if (p->repack_subids && p->cid == PRIVATE_STREAM1 && (streamid & 0xf8) == 0x80) { p->count += 4; p->buf[9] = streamid; @@ -101,7 +101,7 @@ static void send_ipack(struct ipack *p) p->buf[4] = (u8)(((p->count - 6) & 0xff00) >> 8); p->buf[5] = (u8)((p->count - 6) & 0x00ff); p->func(p->buf, p->count, p->data); - + p->buf[6] = 0x0f; p->count = 7; break; @@ -111,9 +111,9 @@ static void send_ipack(struct ipack *p) void av7110_ipack_flush(struct ipack *p) { - if (p->plength != MMAX_PLENGTH-6 || p->found<=6) + if (p->plength != MMAX_PLENGTH - 6 || p->found <= 6) return; - p->plength = p->found-6; + p->plength = p->found - 6; p->found = 0; send_ipack(p); av7110_ipack_reset(p); @@ -122,9 +122,9 @@ void av7110_ipack_flush(struct ipack *p) static void write_ipack(struct ipack *p, const u8 *data, int count) { - u8 headr[3] = { 0x00, 0x00, 0x01} ; + u8 headr[3] = { 0x00, 0x00, 0x01 }; - if (p->count < 6){ + if (p->count < 6) { memcpy(p->buf, headr, 3); p->count = 6; } @@ -138,7 +138,7 @@ static void write_ipack(struct ipack *p, const u8 *data, int count) p->count += rest; send_ipack(p); if (count - rest > 0) - write_ipack(p, data+rest, count-rest); + write_ipack(p, data + rest, count - rest); } } @@ -146,13 +146,13 @@ static void write_ipack(struct ipack *p, const u8 *data, int count) int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) { int l; - int c=0; + int c = 0; while (c < count && (p->mpeg == 0 || (p->mpeg == 1 && p->found < 7) || (p->mpeg == 2 && p->found < 9)) - && (p->found < 5 || !p->done)){ - switch ( p->found ){ + && (p->found < 5 || !p->done)) { + switch (p->found) { case 0: case 1: if (buf[c] == 0x00) @@ -172,7 +172,7 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) break; case 3: p->cid = 0; - switch (buf[c]){ + switch (buf[c]) { case PROG_STREAM_MAP: case PRIVATE_STREAM2: case PROG_STREAM_DIR: @@ -195,16 +195,16 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) break; } break; - + case 4: - if (count-c > 1){ + if (count-c > 1) { p->plen[0] = buf[c]; c++; p->plen[1] = buf[c]; c++; - p->found+=2; - p->plength=(p->plen[0]<<8)|p->plen[1]; - } else { + p->found += 2; + p->plength = (p->plen[0] << 8) | p->plen[1]; + } else { p->plen[0] = buf[c]; p->found++; return count; @@ -214,10 +214,10 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) p->plen[1] = buf[c]; c++; p->found++; - p->plength=(p->plen[0]<<8)|p->plen[1]; + p->plength = (p->plen[0] << 8) | p->plen[1]; break; case 6: - if (!p->done){ + if (!p->done) { p->flag1 = buf[c]; c++; p->found++; @@ -233,15 +233,15 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) break; case 7: - if ( !p->done && p->mpeg == 2) { + if (!p->done && p->mpeg == 2) { p->flag2 = buf[c]; c++; p->found++; - } + } break; case 8: - if ( !p->done && p->mpeg == 2) { + if (!p->done && p->mpeg == 2) { p->hlength = buf[c]; c++; p->found++; @@ -256,28 +256,26 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) if (!p->plength) p->plength = MMAX_PLENGTH - 6; - if ( p->done || ((p->mpeg == 2 && p->found >= 9) || - (p->mpeg == 1 && p->found >= 7)) ){ - switch (p->cid){ - - case AUDIO_STREAM_S ... AUDIO_STREAM_E: + if (p->done || ((p->mpeg == 2 && p->found >= 9) || + (p->mpeg == 1 && p->found >= 7))) { + switch (p->cid) { + case AUDIO_STREAM_S ... AUDIO_STREAM_E: case VIDEO_STREAM_S ... VIDEO_STREAM_E: case PRIVATE_STREAM1: - if (p->mpeg == 2 && p->found == 9) { write_ipack(p, &p->flag1, 1); write_ipack(p, &p->flag2, 1); write_ipack(p, &p->hlength, 1); } - if (p->mpeg == 1 && p->found == 7) + if (p->mpeg == 1 && p->found == 7) write_ipack(p, &p->flag1, 1); - - if (p->mpeg == 2 && (p->flag2 & PTS_ONLY) && + + if (p->mpeg == 2 && (p->flag2 & PTS_ONLY) && p->found < 14) { while (c < count && p->found < 14) { - p->pts[p->found-9] = buf[c]; - write_ipack(p, buf+c, 1); + p->pts[p->found - 9] = buf[c]; + write_ipack(p, buf + c, 1); c++; p->found++; } @@ -292,30 +290,30 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) p->hlength = 1; } - while (!p->which && c < count && + while (!p->which && c < count && p->check == 0xff){ p->check = buf[c]; - write_ipack(p, buf+c, 1); + write_ipack(p, buf + c, 1); c++; p->found++; p->hlength++; } - + if (c == count) return count; - + if ((p->check & 0xc0) == 0x40 && !p->which) { p->check = buf[c]; - write_ipack(p, buf+c, 1); + write_ipack(p, buf + c, 1); c++; p->found++; p->hlength++; - + p->which = 1; if (c == count) return count; p->check = buf[c]; - write_ipack(p, buf+c, 1); + write_ipack(p, buf + c, 1); c++; p->found++; p->hlength++; @@ -323,10 +321,10 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) if (c == count) return count; } - - if (p->which == 1){ + + if (p->which == 1) { p->check = buf[c]; - write_ipack(p, buf+c, 1); + write_ipack(p, buf + c, 1); c++; p->found++; p->hlength++; @@ -334,20 +332,20 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) if (c == count) return count; } - + if ((p->check & 0x30) && p->check != 0xff) { p->flag2 = (p->check & 0xf0) << 2; p->pts[0] = p->check; p->which = 3; - } - + } + if (c == count) return count; if (p->which > 2){ if ((p->flag2 & PTS_DTS_FLAGS) == PTS_ONLY) { while (c < count && p->which < 7) { p->pts[p->which - 2] = buf[c]; - write_ipack(p,buf+c,1); + write_ipack(p, buf + c, 1); c++; p->found++; p->which++; @@ -357,9 +355,9 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) return count; } else if ((p->flag2 & PTS_DTS_FLAGS) == PTS_DTS) { while (c < count && p->which < 12) { - if (p->which< 7) + if (p->which < 7) p->pts[p->which - 2] = buf[c]; - write_ipack(p,buf+c,1); + write_ipack(p, buf + c, 1); c++; p->found++; p->which++; @@ -370,39 +368,37 @@ int av7110_ipack_instant_repack (const u8 *buf, int count, struct ipack *p) } p->which = 2000; } - + } - - while (c < count && p->found < p->plength+6){ - l = count -c; - if (l+p->found > p->plength+6) - l = p->plength+6-p->found; - write_ipack(p, buf+c, l); + + while (c < count && p->found < p->plength + 6) { + l = count - c; + if (l + p->found > p->plength + 6) + l = p->plength + 6 - p->found; + write_ipack(p, buf + c, l); p->found += l; c += l; - } - + } break; } - if ( p->done ){ - if( p->found + count - c < p->plength+6){ - p->found += count-c; + if (p->done) { + if (p->found + count - c < p->plength + 6) { + p->found += count - c; c = count; } else { - c += p->plength+6 - p->found; - p->found = p->plength+6; + c += p->plength + 6 - p->found; + p->found = p->plength + 6; } } - if (p->plength && p->found == p->plength+6) { + if (p->plength && p->found == p->plength + 6) { send_ipack(p); av7110_ipack_reset(p); if (c < count) - av7110_ipack_instant_repack(buf+c, count-c, p); + av7110_ipack_instant_repack(buf + c, count - c, p); } } return count; } - diff --git a/drivers/media/dvb/ttpci/av7110_ipack.h b/drivers/media/dvb/ttpci/av7110_ipack.h index 5348eb4dfbdc..becf94d3fdfa 100644 --- a/drivers/media/dvb/ttpci/av7110_ipack.h +++ b/drivers/media/dvb/ttpci/av7110_ipack.h @@ -2,7 +2,7 @@ #define _AV7110_IPACK_H_ extern int av7110_ipack_init(struct ipack *p, int size, - void (*func)(u8 *buf, int size, void *priv)); + void (*func)(u8 *buf, int size, void *priv)); extern void av7110_ipack_reset(struct ipack *p); extern int av7110_ipack_instant_repack(const u8 *buf, int count, struct ipack *p); @@ -10,4 +10,3 @@ extern void av7110_ipack_free(struct ipack * p); extern void av7110_ipack_flush(struct ipack *p); #endif - diff --git a/drivers/media/dvb/ttpci/av7110_ir.c b/drivers/media/dvb/ttpci/av7110_ir.c index eaf3cb2c9b0a..10df56b54df8 100644 --- a/drivers/media/dvb/ttpci/av7110_ir.c +++ b/drivers/media/dvb/ttpci/av7110_ir.c @@ -19,40 +19,40 @@ static u32 ir_config; static u16 key_map [256] = { KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_BACK, 0, KEY_POWER, KEY_MUTE, 0, KEY_INFO, - KEY_VOLUMEUP, KEY_VOLUMEDOWN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + KEY_VOLUMEUP, KEY_VOLUMEDOWN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_CHANNELUP, KEY_CHANNELDOWN, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_TEXT, 0, 0, KEY_TV, 0, 0, 0, 0, 0, KEY_SETUP, 0, 0, 0, 0, 0, KEY_SUBTITLE, 0, 0, KEY_LANGUAGE, 0, - KEY_RADIO, 0, 0, 0, 0, KEY_EXIT, 0, 0, + KEY_RADIO, 0, 0, 0, 0, KEY_EXIT, 0, 0, KEY_UP, KEY_DOWN, KEY_LEFT, KEY_RIGHT, KEY_OK, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_RED, KEY_GREEN, KEY_YELLOW, - KEY_BLUE, 0, 0, 0, 0, 0, 0, 0, KEY_MENU, KEY_LIST, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + KEY_BLUE, 0, 0, 0, 0, 0, 0, 0, KEY_MENU, KEY_LIST, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_UP, KEY_UP, KEY_DOWN, KEY_DOWN, - 0, 0, 0, 0, KEY_EPG, 0, 0, 0, + 0, 0, 0, 0, KEY_EPG, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, KEY_VCR }; -static void av7110_emit_keyup (unsigned long data) +static void av7110_emit_keyup(unsigned long data) { - if (!data || !test_bit (data, input_dev.key)) + if (!data || !test_bit(data, input_dev.key)) return; - input_event (&input_dev, EV_KEY, data, !!0); + input_event(&input_dev, EV_KEY, data, !!0); } static struct timer_list keyup_timer = { .function = av7110_emit_keyup }; -static void av7110_emit_key (u32 ircom) +static void av7110_emit_key(u32 ircom) { u8 data; u8 addr; @@ -72,9 +72,9 @@ static void av7110_emit_key (u32 ircom) } keycode = key_map[data]; - + dprintk(16, "#########%08x######### addr %i data 0x%02x (keycode %i)\n", - ircom, addr, data, keycode); + ircom, addr, data, keycode); /* check device address (if selected) */ if (ir_config & 0x4000) @@ -86,41 +86,41 @@ static void av7110_emit_key (u32 ircom) return; } - if (ir_config & 0x0001) + if (ir_config & 0x0001) new_toggle = 0; /* RCMM */ else new_toggle = (ircom & 0x800); /* RC5 */ - if (timer_pending (&keyup_timer)) { - del_timer (&keyup_timer); + if (timer_pending(&keyup_timer)) { + del_timer(&keyup_timer); if (keyup_timer.data != keycode || new_toggle != old_toggle) { - input_event (&input_dev, EV_KEY, keyup_timer.data, !!0); - input_event (&input_dev, EV_KEY, keycode, !0); + input_event(&input_dev, EV_KEY, keyup_timer.data, !!0); + input_event(&input_dev, EV_KEY, keycode, !0); } else - input_event (&input_dev, EV_KEY, keycode, 2); + input_event(&input_dev, EV_KEY, keycode, 2); } else - input_event (&input_dev, EV_KEY, keycode, !0); + input_event(&input_dev, EV_KEY, keycode, !0); keyup_timer.expires = jiffies + UP_TIMEOUT; keyup_timer.data = keycode; - add_timer (&keyup_timer); + add_timer(&keyup_timer); old_toggle = new_toggle; } -static void input_register_keys (void) +static void input_register_keys(void) { int i; - memset (input_dev.keybit, 0, sizeof(input_dev.keybit)); + memset(input_dev.keybit, 0, sizeof(input_dev.keybit)); - for (i=0; i<sizeof(key_map)/sizeof(key_map[0]); i++) { + for (i = 0; i < sizeof(key_map) / sizeof(key_map[0]); i++) { if (key_map[i] > KEY_MAX) key_map[i] = 0; else if (key_map[i] > KEY_RESERVED) - set_bit (key_map[i], input_dev.keybit); + set_bit(key_map[i], input_dev.keybit); } } @@ -131,62 +131,57 @@ static void input_repeat_key(unsigned long data) } -static int av7110_ir_write_proc (struct file *file, const char __user *buffer, - unsigned long count, void *data) +static int av7110_ir_write_proc(struct file *file, const char __user *buffer, + unsigned long count, void *data) { char *page; int size = 4 + 256 * sizeof(u16); if (count < size) return -EINVAL; - - page = (char *)vmalloc(size); + + page = (char *) vmalloc(size); if (!page) return -ENOMEM; - + if (copy_from_user(page, buffer, size)) { vfree(page); return -EFAULT; } - memcpy (&ir_config, page, 4); - memcpy (&key_map, page + 4, 256 * sizeof(u16)); - + memcpy(&ir_config, page, 4); + memcpy(&key_map, page + 4, 256 * sizeof(u16)); vfree(page); - - av7110_setup_irc_config (NULL, ir_config); - - input_register_keys (); - + av7110_setup_irc_config(NULL, ir_config); + input_register_keys(); return count; } -int __init av7110_ir_init (void) +int __init av7110_ir_init(void) { static struct proc_dir_entry *e; - init_timer (&keyup_timer); + init_timer(&keyup_timer); keyup_timer.data = 0; - input_dev.name = "DVB on-card IR receiver"; + input_dev.name = "DVB on-card IR receiver"; - /** - * enable keys - */ - set_bit (EV_KEY, input_dev.evbit); - set_bit (EV_REP, input_dev.evbit); + /** + * enable keys + */ + set_bit(EV_KEY, input_dev.evbit); + set_bit(EV_REP, input_dev.evbit); - input_register_keys (); + input_register_keys(); input_register_device(&input_dev); input_dev.timer.function = input_repeat_key; - av7110_setup_irc_config (NULL, 0x0001); - av7110_register_irc_handler (av7110_emit_key); - - e = create_proc_entry ("av7110_ir", S_IFREG | S_IRUGO | S_IWUSR, NULL); + av7110_setup_irc_config(NULL, 0x0001); + av7110_register_irc_handler(av7110_emit_key); + e = create_proc_entry("av7110_ir", S_IFREG | S_IRUGO | S_IWUSR, NULL); if (e) { e->write_proc = av7110_ir_write_proc; e->size = 4 + 256 * sizeof(u16); @@ -196,11 +191,11 @@ int __init av7110_ir_init (void) } -void __exit av7110_ir_exit (void) +void __exit av7110_ir_exit(void) { del_timer_sync(&keyup_timer); - remove_proc_entry ("av7110_ir", NULL); - av7110_unregister_irc_handler (av7110_emit_key); + remove_proc_entry("av7110_ir", NULL); + av7110_unregister_irc_handler(av7110_emit_key); input_unregister_device(&input_dev); } diff --git a/drivers/media/dvb/ttpci/av7110_v4l.c b/drivers/media/dvb/ttpci/av7110_v4l.c index 0c618ddd91e3..eb84fb08d95c 100644 --- a/drivers/media/dvb/ttpci/av7110_v4l.c +++ b/drivers/media/dvb/ttpci/av7110_v4l.c @@ -70,8 +70,6 @@ int msp_readreg(struct av7110 *av7110, u8 dev, u16 reg, u16 *val) return 0; } - - static struct v4l2_input inputs[2] = { { .index = 0, diff --git a/drivers/media/dvb/ttpci/budget-av.c b/drivers/media/dvb/ttpci/budget-av.c index ae9260094d76..ffbe501d4876 100644 --- a/drivers/media/dvb/ttpci/budget-av.c +++ b/drivers/media/dvb/ttpci/budget-av.c @@ -1,34 +1,34 @@ /* * budget-av.c: driver for the SAA7146 based Budget DVB cards - * with analog video in + * with analog video in * - * Compiled from various sources by Michael Hunold <michael@mihu.de> + * Compiled from various sources by Michael Hunold <michael@mihu.de> * * CI interface support (c) 2004 Olivier Gournet <ogournet@anevia.com> & * Andrew de Quincey <adq_dvb@lidskialf.net> * * Copyright (C) 2002 Ralph Metzler <rjkm@metzlerbros.de> * - * Copyright (C) 1999-2002 Ralph Metzler + * Copyright (C) 1999-2002 Ralph Metzler * & Marcus Metzler for convergence integrated media GmbH * * 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 the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 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. * Or, point your browser to http://www.gnu.org/copyleft/gpl.html - * + * * * the project's page is at http://www.linuxtv.org/dvb/ */ @@ -66,16 +66,15 @@ int enable_ci = 0; * INITIALIZATION ****************************************************************************/ - -static u8 i2c_readreg (struct i2c_adapter *i2c, u8 id, u8 reg) +static u8 i2c_readreg(struct i2c_adapter *i2c, u8 id, u8 reg) { - u8 mm1[] = {0x00}; - u8 mm2[] = {0x00}; + u8 mm1[] = { 0x00 }; + u8 mm2[] = { 0x00 }; struct i2c_msg msgs[2]; msgs[0].flags = 0; msgs[1].flags = I2C_M_RD; - msgs[0].addr = msgs[1].addr=id/2; + msgs[0].addr = msgs[1].addr = id / 2; mm1[0] = reg; msgs[0].len = 1; msgs[1].len = 1; @@ -87,31 +86,30 @@ static u8 i2c_readreg (struct i2c_adapter *i2c, u8 id, u8 reg) return mm2[0]; } -static int i2c_readregs(struct i2c_adapter *i2c, u8 id, u8 reg, u8 *buf, u8 len) +static int i2c_readregs(struct i2c_adapter *i2c, u8 id, u8 reg, u8 * buf, u8 len) { - u8 mm1[] = { reg }; - struct i2c_msg msgs[2] = { - { .addr = id/2, .flags = 0, .buf = mm1, .len = 1 }, - { .addr = id/2, .flags = I2C_M_RD, .buf = buf, .len = len } + u8 mm1[] = { reg }; + struct i2c_msg msgs[2] = { + {.addr = id / 2,.flags = 0,.buf = mm1,.len = 1}, + {.addr = id / 2,.flags = I2C_M_RD,.buf = buf,.len = len} }; - if (i2c_transfer(i2c, msgs, 2) != 2) + if (i2c_transfer(i2c, msgs, 2) != 2) return -EIO; return 0; } - -static int i2c_writereg (struct i2c_adapter *i2c, u8 id, u8 reg, u8 val) +static int i2c_writereg(struct i2c_adapter *i2c, u8 id, u8 reg, u8 val) { - u8 msg[2]={ reg, val }; - struct i2c_msg msgs; - - msgs.flags=0; - msgs.addr=id/2; - msgs.len=2; - msgs.buf=msg; - return i2c_transfer(i2c, &msgs, 1); + u8 msg[2] = { reg, val }; + struct i2c_msg msgs; + + msgs.flags = 0; + msgs.addr = id / 2; + msgs.len = 2; + msgs.buf = msg; + return i2c_transfer(i2c, &msgs, 1); } static int ciintf_read_attribute_mem(struct dvb_ca_en50221 *ca, int slot, int address) @@ -335,49 +333,47 @@ static const u8 saa7113_tab[] = { 0x0c, 0x40, 0x0d, 0x00, 0x0e, 0x01, - 0x0f, 0x44, + 0x0f, 0x44, 0x10, 0x08, 0x11, 0x0c, 0x12, 0x7b, 0x13, 0x00, - 0x15, 0x00, 0x16, 0x00, 0x17, 0x00, + 0x15, 0x00, 0x16, 0x00, 0x17, 0x00, - 0x57, 0xff, - 0x40, 0x82, 0x58, 0x00, 0x59, 0x54, 0x5a, 0x07, - 0x5b, 0x83, 0x5e, 0x00, - 0xff + 0x57, 0xff, + 0x40, 0x82, 0x58, 0x00, 0x59, 0x54, 0x5a, 0x07, + 0x5b, 0x83, 0x5e, 0x00, + 0xff }; - -static int saa7113_init (struct budget_av *budget_av) +static int saa7113_init(struct budget_av *budget_av) { struct budget *budget = &budget_av->budget; const u8 *data = saa7113_tab; - if (i2c_writereg (&budget->i2c_adap, 0x4a, 0x01, 0x08) != 1) { - dprintk(1, "saa7113 not found on KNC card\n"); - return -ENODEV; - } + if (i2c_writereg(&budget->i2c_adap, 0x4a, 0x01, 0x08) != 1) { + dprintk(1, "saa7113 not found on KNC card\n"); + return -ENODEV; + } - dprintk(1, "saa7113 detected and initializing\n"); + dprintk(1, "saa7113 detected and initializing\n"); while (*data != 0xff) { - i2c_writereg(&budget->i2c_adap, 0x4a, *data, *(data+1)); - data += 2; - } + i2c_writereg(&budget->i2c_adap, 0x4a, *data, *(data + 1)); + data += 2; + } dprintk(1, "saa7113 status=%02x\n", i2c_readreg(&budget->i2c_adap, 0x4a, 0x1f)); return 0; } - -static int saa7113_setinput (struct budget_av *budget_av, int input) +static int saa7113_setinput(struct budget_av *budget_av, int input) { struct budget *budget = &budget_av->budget; - if ( 1 != budget_av->has_saa7113 ) + if (1 != budget_av->has_saa7113) return -ENODEV; if (input == 1) { @@ -773,19 +769,19 @@ static void budget_av_irq(struct saa7146_dev *dev, u32 * isr) ttpci_budget_irq10_handler(dev, isr); } -static int budget_av_detach (struct saa7146_dev *dev) +static int budget_av_detach(struct saa7146_dev *dev) { - struct budget_av *budget_av = (struct budget_av*) dev->ext_priv; + struct budget_av *budget_av = (struct budget_av *) dev->ext_priv; int err; dprintk(2, "dev: %p\n", dev); - if ( 1 == budget_av->has_saa7113 ) { - saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTLO); + if (1 == budget_av->has_saa7113) { + saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTLO); msleep(200); - saa7146_unregister_device (&budget_av->vd, dev); + saa7146_unregister_device(&budget_av->vd, dev); } if (budget_av->budget.ci_present) @@ -793,9 +789,9 @@ static int budget_av_detach (struct saa7146_dev *dev) if (budget_av->budget.dvb_frontend != NULL) dvb_unregister_frontend(budget_av->budget.dvb_frontend); - err = ttpci_budget_deinit (&budget_av->budget); + err = ttpci_budget_deinit(&budget_av->budget); - kfree (budget_av); + kfree(budget_av); return err; } @@ -832,30 +828,30 @@ static int budget_av_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTHI); msleep(500); - if ( 0 == saa7113_init(budget_av) ) { + if (0 == saa7113_init(budget_av)) { budget_av->has_saa7113 = 1; - if ( 0 != saa7146_vv_init(dev,&vv_data)) { - /* fixme: proper cleanup here */ - ERR(("cannot init vv subsystem.\n")); - return err; - } + if (0 != saa7146_vv_init(dev, &vv_data)) { + /* fixme: proper cleanup here */ + ERR(("cannot init vv subsystem.\n")); + return err; + } if ((err = saa7146_register_device(&budget_av->vd, dev, "knc1", VFL_TYPE_GRABBER))) { - /* fixme: proper cleanup here */ - ERR(("cannot register capture v4l2 device.\n")); - return err; - } + /* fixme: proper cleanup here */ + ERR(("cannot register capture v4l2 device.\n")); + return err; + } - /* beware: this modifies dev->vv ... */ - saa7146_set_hps_source_and_sync(dev, SAA7146_HPS_SOURCE_PORT_A, - SAA7146_HPS_SYNC_PORT_A); + /* beware: this modifies dev->vv ... */ + saa7146_set_hps_source_and_sync(dev, SAA7146_HPS_SOURCE_PORT_A, + SAA7146_HPS_SYNC_PORT_A); - saa7113_setinput (budget_av, 0); + saa7113_setinput(budget_av, 0); } else { budget_av->has_saa7113 = 0; - saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTLO); + saa7146_setgpio(dev, 0, SAA7146_GPIO_OUTLO); } /* fixme: find some sane values here... */ @@ -864,13 +860,13 @@ static int budget_av_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio mac = budget_av->budget.dvb_adapter->proposed_mac; if (i2c_readregs(&budget_av->budget.i2c_adap, 0xa0, 0x30, mac, 6)) { printk("KNC1-%d: Could not read MAC from KNC1 card\n", - budget_av->budget.dvb_adapter->num); + budget_av->budget.dvb_adapter->num); memset(mac, 0, 6); } else { printk("KNC1-%d: MAC addr = %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", - budget_av->budget.dvb_adapter->num, - mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); -} + budget_av->budget.dvb_adapter->num, + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); + } budget_av->budget.dvb_adapter->priv = budget_av; frontend_init(budget_av); @@ -883,47 +879,45 @@ static int budget_av_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio #define KNC1_INPUTS 2 static struct v4l2_input knc1_inputs[KNC1_INPUTS] = { - { 0, "Composite", V4L2_INPUT_TYPE_TUNER, 1, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, - { 1, "S-Video", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG|V4L2_STD_NTSC_M, 0 }, + {0, "Composite", V4L2_INPUT_TYPE_TUNER, 1, 0, V4L2_STD_PAL_BG | V4L2_STD_NTSC_M, 0}, + {1, "S-Video", V4L2_INPUT_TYPE_CAMERA, 2, 0, V4L2_STD_PAL_BG | V4L2_STD_NTSC_M, 0}, }; - static struct saa7146_extension_ioctls ioctls[] = { - { VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE }, - { VIDIOC_G_INPUT, SAA7146_EXCLUSIVE }, - { VIDIOC_S_INPUT, SAA7146_EXCLUSIVE }, - { 0, 0 } + {VIDIOC_ENUMINPUT, SAA7146_EXCLUSIVE}, + {VIDIOC_G_INPUT, SAA7146_EXCLUSIVE}, + {VIDIOC_S_INPUT, SAA7146_EXCLUSIVE}, + {0, 0} }; - -static int av_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg) +static int av_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg) { struct saa7146_dev *dev = fh->dev; - struct budget_av *budget_av = (struct budget_av*) dev->ext_priv; + struct budget_av *budget_av = (struct budget_av *) dev->ext_priv; - switch(cmd) { + switch (cmd) { case VIDIOC_ENUMINPUT:{ struct v4l2_input *i = arg; - + dprintk(1, "VIDIOC_ENUMINPUT %d.\n", i->index); - if( i->index < 0 || i->index >= KNC1_INPUTS) { + if (i->index < 0 || i->index >= KNC1_INPUTS) { return -EINVAL; } memcpy(i, &knc1_inputs[i->index], sizeof(struct v4l2_input)); return 0; } case VIDIOC_G_INPUT:{ - int *input = (int *)arg; + int *input = (int *) arg; *input = budget_av->cur_input; dprintk(1, "VIDIOC_G_INPUT %d.\n", *input); - return 0; - } + return 0; + } case VIDIOC_S_INPUT:{ - int input = *(int *)arg; + int input = *(int *) arg; dprintk(1, "VIDIOC_S_INPUT %d.\n", input); - return saa7113_setinput (budget_av, input); + return saa7113_setinput(budget_av, input); } default: return -ENOIOCTLCMD; @@ -933,24 +927,24 @@ static int av_ioctl(struct saa7146_fh *fh, unsigned int cmd, void *arg) static struct saa7146_standard standard[] = { {.name = "PAL",.id = V4L2_STD_PAL, - .v_offset = 0x17, .v_field = 288, - .h_offset = 0x14, .h_pixels = 680, + .v_offset = 0x17,.v_field = 288, + .h_offset = 0x14,.h_pixels = 680, .v_max_out = 576,.h_max_out = 768 }, {.name = "NTSC",.id = V4L2_STD_NTSC, - .v_offset = 0x16, .v_field = 240, - .h_offset = 0x06, .h_pixels = 708, + .v_offset = 0x16,.v_field = 240, + .h_offset = 0x06,.h_pixels = 708, .v_max_out = 480,.h_max_out = 640, }, }; static struct saa7146_ext_vv vv_data = { - .inputs = 2, - .capabilities = 0, // perhaps later: V4L2_CAP_VBI_CAPTURE, but that need tweaking with the saa7113 - .flags = 0, - .stds = &standard[0], - .num_stds = sizeof(standard)/sizeof(struct saa7146_standard), - .ioctls = &ioctls[0], - .ioctl = av_ioctl, + .inputs = 2, + .capabilities = 0, // perhaps later: V4L2_CAP_VBI_CAPTURE, but that need tweaking with the saa7113 + .flags = 0, + .stds = &standard[0], + .num_stds = sizeof(standard) / sizeof(struct saa7146_standard), + .ioctls = &ioctls[0], + .ioctl = av_ioctl, }; static struct saa7146_extension budget_extension; @@ -962,7 +956,7 @@ MAKE_BUDGET_INFO(cin1200s, "TerraTec Cinergy 1200 DVB-S", BUDGET_CIN1200S); MAKE_BUDGET_INFO(cin1200c, "Terratec Cinergy 1200 DVB-C", BUDGET_CIN1200C); MAKE_BUDGET_INFO(cin1200t, "Terratec Cinergy 1200 DVB-T", BUDGET_CIN1200T); -static struct pci_device_id pci_tbl [] = { +static struct pci_device_id pci_tbl[] = { MAKE_EXTENSION_PCI(knc1s, 0x1131, 0x4f56), MAKE_EXTENSION_PCI(knc1c, 0x1894, 0x0020), MAKE_EXTENSION_PCI(knc1t, 0x1894, 0x0030), @@ -970,32 +964,32 @@ static struct pci_device_id pci_tbl [] = { MAKE_EXTENSION_PCI(cin1200c, 0x153b, 0x1156), MAKE_EXTENSION_PCI(cin1200t, 0x153b, 0x1157), { - .vendor = 0, + .vendor = 0, } }; MODULE_DEVICE_TABLE(pci, pci_tbl); static struct saa7146_extension budget_extension = { - .name = "budget dvb /w video in\0", - .pci_tbl = pci_tbl, + .name = "budget dvb /w video in\0", + .pci_tbl = pci_tbl, - .module = THIS_MODULE, - .attach = budget_av_attach, - .detach = budget_av_detach, + .module = THIS_MODULE, + .attach = budget_av_attach, + .detach = budget_av_detach, - .irq_mask = MASK_10, + .irq_mask = MASK_10, .irq_func = budget_av_irq, -}; +}; -static int __init budget_av_init(void) +static int __init budget_av_init(void) { return saa7146_register_extension(&budget_extension); } static void __exit budget_av_exit(void) { - saa7146_unregister_extension(&budget_extension); + saa7146_unregister_extension(&budget_extension); } module_init(budget_av_init); diff --git a/drivers/media/dvb/ttpci/budget-ci.c b/drivers/media/dvb/ttpci/budget-ci.c index 898a8bf3b466..521111be3558 100644 --- a/drivers/media/dvb/ttpci/budget-ci.c +++ b/drivers/media/dvb/ttpci/budget-ci.c @@ -1,7 +1,7 @@ /* - * budget-ci.c: driver for the SAA7146 based Budget DVB cards + * budget-ci.c: driver for the SAA7146 based Budget DVB cards * - * Compiled from various sources by Michael Hunold <michael@mihu.de> + * Compiled from various sources by Michael Hunold <michael@mihu.de> * * msp430 IR support contributed by Jack Thomasson <jkt@Helius.COM> * partially based on the Siemens DVB driver by Ralph+Marcus Metzler @@ -12,19 +12,19 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * * This program is distributed in the hope that it will be useful, * 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. - * + * * * 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. * Or, point your browser to http://www.gnu.org/copyleft/gpl.html - * + * * * the project's page is at http://www.linuxtv.org/dvb/ */ @@ -76,57 +76,56 @@ struct budget_ci { Hauppauge (from NOVA-CI-s box product) i've taken a "middle of the road" approach and note the differences */ -static u16 key_map[64] = { +static u16 key_map[64] = { /* 0x0X */ KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_ENTER, KEY_RED, - KEY_POWER, /* RADIO on Hauppauge */ + KEY_POWER, /* RADIO on Hauppauge */ KEY_MUTE, 0, - KEY_A, /* TV on Hauppauge */ + KEY_A, /* TV on Hauppauge */ /* 0x1X */ KEY_VOLUMEUP, KEY_VOLUMEDOWN, 0, 0, KEY_B, 0, 0, 0, 0, 0, 0, 0, KEY_UP, KEY_DOWN, - KEY_OPTION, /* RESERVED on Hauppauge */ + KEY_OPTION, /* RESERVED on Hauppauge */ KEY_BREAK, /* 0x2X */ KEY_CHANNELUP, KEY_CHANNELDOWN, - KEY_PREVIOUS, /* Prev. Ch on Zenith, SOURCE on Hauppauge */ + KEY_PREVIOUS, /* Prev. Ch on Zenith, SOURCE on Hauppauge */ 0, KEY_RESTART, KEY_OK, - KEY_CYCLEWINDOWS, /* MINIMIZE on Hauppauge */ + KEY_CYCLEWINDOWS, /* MINIMIZE on Hauppauge */ 0, - KEY_ENTER, /* VCR mode on Zenith */ + KEY_ENTER, /* VCR mode on Zenith */ KEY_PAUSE, 0, KEY_RIGHT, KEY_LEFT, 0, - KEY_MENU, /* FULL SCREEN on Hauppauge */ + KEY_MENU, /* FULL SCREEN on Hauppauge */ 0, /* 0x3X */ KEY_SLOW, - KEY_PREVIOUS, /* VCR mode on Zenith */ + KEY_PREVIOUS, /* VCR mode on Zenith */ KEY_REWIND, 0, KEY_FASTFORWARD, KEY_PLAY, KEY_STOP, KEY_RECORD, - KEY_TUNER, /* TV/VCR on Zenith */ + KEY_TUNER, /* TV/VCR on Zenith */ 0, KEY_C, 0, KEY_EXIT, KEY_POWER2, - KEY_TUNER, /* VCR mode on Zenith */ + KEY_TUNER, /* VCR mode on Zenith */ 0, }; - -static void msp430_ir_debounce (unsigned long data) +static void msp430_ir_debounce(unsigned long data) { struct input_dev *dev = (struct input_dev *) data; @@ -138,34 +137,32 @@ static void msp430_ir_debounce (unsigned long data) dev->rep[0] = 0; dev->timer.expires = jiffies + HZ * 350 / 1000; add_timer(&dev->timer); - input_event(dev, EV_KEY, key_map[dev->repeat_key], 2); /* REPEAT */ + input_event(dev, EV_KEY, key_map[dev->repeat_key], 2); /* REPEAT */ } - - -static void msp430_ir_interrupt (unsigned long data) +static void msp430_ir_interrupt(unsigned long data) { - struct budget_ci *budget_ci = (struct budget_ci*) data; + struct budget_ci *budget_ci = (struct budget_ci *) data; struct input_dev *dev = &budget_ci->input_dev; unsigned int code = ttpci_budget_debiread(&budget_ci->budget, DEBINOSWAP, DEBIADDR_IR, 2, 1, 0) >> 8; if (code & 0x40) { - code &= 0x3f; - - if (timer_pending(&dev->timer)) { - if (code == dev->repeat_key) { - ++dev->rep[0]; - return; - } - del_timer(&dev->timer); - input_event(dev, EV_KEY, key_map[dev->repeat_key], !!0); + code &= 0x3f; + + if (timer_pending(&dev->timer)) { + if (code == dev->repeat_key) { + ++dev->rep[0]; + return; + } + del_timer(&dev->timer); + input_event(dev, EV_KEY, key_map[dev->repeat_key], !!0); } if (!key_map[code]) { printk("DVB (%s): no key for %02x!\n", __FUNCTION__, code); - return; - } + return; + } /* initialize debounce and repeat */ dev->repeat_key = code; @@ -174,25 +171,24 @@ static void msp430_ir_interrupt (unsigned long data) /* 350 milliseconds */ dev->timer.expires = jiffies + HZ * 350 / 1000; /* MAKE */ - input_event(dev, EV_KEY, key_map[code], !0); + input_event(dev, EV_KEY, key_map[code], !0); add_timer(&dev->timer); } } - -static int msp430_ir_init (struct budget_ci *budget_ci) +static int msp430_ir_init(struct budget_ci *budget_ci) { struct saa7146_dev *saa = budget_ci->budget.dev; int i; memset(&budget_ci->input_dev, 0, sizeof(struct input_dev)); - sprintf (budget_ci->ir_dev_name, "Budget-CI dvb ir receiver %s", saa->name); + sprintf(budget_ci->ir_dev_name, "Budget-CI dvb ir receiver %s", saa->name); budget_ci->input_dev.name = budget_ci->ir_dev_name; set_bit(EV_KEY, budget_ci->input_dev.evbit); - for (i=0; i<sizeof(key_map)/sizeof(*key_map); i++) + for (i = 0; i < sizeof(key_map) / sizeof(*key_map); i++) if (key_map[i]) set_bit(key_map[i], budget_ci->input_dev.keybit); @@ -202,13 +198,12 @@ static int msp430_ir_init (struct budget_ci *budget_ci) saa7146_write(saa, IER, saa7146_read(saa, IER) | MASK_06); - saa7146_setgpio(saa, 3, SAA7146_GPIO_IRQHI); + saa7146_setgpio(saa, 3, SAA7146_GPIO_IRQHI); return 0; } - -static void msp430_ir_deinit (struct budget_ci *budget_ci) +static void msp430_ir_deinit(struct budget_ci *budget_ci) { struct saa7146_dev *saa = budget_ci->budget.dev; struct input_dev *dev = &budget_ci->input_dev; @@ -224,7 +219,7 @@ static void msp430_ir_deinit (struct budget_ci *budget_ci) static int ciintf_read_attribute_mem(struct dvb_ca_en50221 *ca, int slot, int address) { - struct budget_ci* budget_ci = (struct budget_ci*) ca->data; + struct budget_ci *budget_ci = (struct budget_ci *) ca->data; if (slot != 0) return -EINVAL; @@ -235,7 +230,7 @@ static int ciintf_read_attribute_mem(struct dvb_ca_en50221 *ca, int slot, int ad static int ciintf_write_attribute_mem(struct dvb_ca_en50221 *ca, int slot, int address, u8 value) { - struct budget_ci* budget_ci = (struct budget_ci*) ca->data; + struct budget_ci *budget_ci = (struct budget_ci *) ca->data; if (slot != 0) return -EINVAL; @@ -246,7 +241,7 @@ static int ciintf_write_attribute_mem(struct dvb_ca_en50221 *ca, int slot, int a static int ciintf_read_cam_control(struct dvb_ca_en50221 *ca, int slot, u8 address) { - struct budget_ci* budget_ci = (struct budget_ci*) ca->data; + struct budget_ci *budget_ci = (struct budget_ci *) ca->data; if (slot != 0) return -EINVAL; @@ -257,7 +252,7 @@ static int ciintf_read_cam_control(struct dvb_ca_en50221 *ca, int slot, u8 addre static int ciintf_write_cam_control(struct dvb_ca_en50221 *ca, int slot, u8 address, u8 value) { - struct budget_ci* budget_ci = (struct budget_ci*) ca->data; + struct budget_ci *budget_ci = (struct budget_ci *) ca->data; if (slot != 0) return -EINVAL; @@ -268,7 +263,7 @@ static int ciintf_write_cam_control(struct dvb_ca_en50221 *ca, int slot, u8 addr static int ciintf_slot_reset(struct dvb_ca_en50221 *ca, int slot) { - struct budget_ci* budget_ci = (struct budget_ci*) ca->data; + struct budget_ci *budget_ci = (struct budget_ci *) ca->data; struct saa7146_dev *saa = budget_ci->budget.dev; if (slot != 0) @@ -283,13 +278,13 @@ static int ciintf_slot_reset(struct dvb_ca_en50221 *ca, int slot) CICONTROL_RESET, 1, 0); saa7146_setgpio(saa, 1, SAA7146_GPIO_OUTHI); - ttpci_budget_set_video_port(saa, BUDGET_VIDEO_PORTB); + ttpci_budget_set_video_port(saa, BUDGET_VIDEO_PORTB); return 0; } static int ciintf_slot_shutdown(struct dvb_ca_en50221 *ca, int slot) { - struct budget_ci* budget_ci = (struct budget_ci*) ca->data; + struct budget_ci *budget_ci = (struct budget_ci *) ca->data; struct saa7146_dev *saa = budget_ci->budget.dev; if (slot != 0) @@ -302,7 +297,7 @@ static int ciintf_slot_shutdown(struct dvb_ca_en50221 *ca, int slot) static int ciintf_slot_ts_enable(struct dvb_ca_en50221 *ca, int slot) { - struct budget_ci* budget_ci = (struct budget_ci*) ca->data; + struct budget_ci *budget_ci = (struct budget_ci *) ca->data; struct saa7146_dev *saa = budget_ci->budget.dev; int tmp; @@ -315,14 +310,13 @@ static int ciintf_slot_ts_enable(struct dvb_ca_en50221 *ca, int slot) ttpci_budget_debiwrite(&budget_ci->budget, DEBICICTL, DEBIADDR_CICONTROL, 1, tmp | CICONTROL_ENABLETS, 1, 0); - ttpci_budget_set_video_port(saa, BUDGET_VIDEO_PORTA); + ttpci_budget_set_video_port(saa, BUDGET_VIDEO_PORTA); return 0; } - -static void ciintf_interrupt (unsigned long data) +static void ciintf_interrupt(unsigned long data) { - struct budget_ci *budget_ci = (struct budget_ci*) data; + struct budget_ci *budget_ci = (struct budget_ci *) data; struct saa7146_dev *saa = budget_ci->budget.dev; unsigned int flags; @@ -335,7 +329,7 @@ static void ciintf_interrupt (unsigned long data) if (flags & CICONTROL_CAMDETECT) { // GPIO should be set to trigger on falling edge if a CAM is present - saa7146_setgpio(saa, 0, SAA7146_GPIO_IRQLO); + saa7146_setgpio(saa, 0, SAA7146_GPIO_IRQLO); if (budget_ci->slot_status & SLOTSTATUS_NONE) { // CAM insertion IRQ @@ -359,7 +353,7 @@ static void ciintf_interrupt (unsigned long data) // the CAM might not actually be ready yet. saa7146_setgpio(saa, 0, SAA7146_GPIO_IRQHI); - // generate a CAM removal IRQ if we haven't already + // generate a CAM removal IRQ if we haven't already if (budget_ci->slot_status & SLOTSTATUS_OCCUPIED) { // CAM removal IRQ budget_ci->slot_status = SLOTSTATUS_NONE; @@ -369,7 +363,7 @@ static void ciintf_interrupt (unsigned long data) } } -static int ciintf_init(struct budget_ci* budget_ci) +static int ciintf_init(struct budget_ci *budget_ci) { struct saa7146_dev *saa = budget_ci->budget.dev; int flags; @@ -409,11 +403,10 @@ static int ciintf_init(struct budget_ci* budget_ci) printk("budget_ci: CI interface detected, but initialisation failed.\n"); goto error; } - // Setup CI slot IRQ - tasklet_init (&budget_ci->ciintf_irq_tasklet, ciintf_interrupt, (unsigned long) budget_ci); + tasklet_init(&budget_ci->ciintf_irq_tasklet, ciintf_interrupt, (unsigned long) budget_ci); if (budget_ci->slot_status != SLOTSTATUS_NONE) { - saa7146_setgpio(saa, 0, SAA7146_GPIO_IRQLO); + saa7146_setgpio(saa, 0, SAA7146_GPIO_IRQLO); } else { saa7146_setgpio(saa, 0, SAA7146_GPIO_IRQHI); } @@ -438,7 +431,7 @@ error: return result; } -static void ciintf_deinit(struct budget_ci* budget_ci) +static void ciintf_deinit(struct budget_ci *budget_ci) { struct saa7146_dev *saa = budget_ci->budget.dev; @@ -461,20 +454,20 @@ static void ciintf_deinit(struct budget_ci* budget_ci) saa7146_write(saa, MC1, saa7146_read(saa, MC1) | (0x800 << 16)); } -static void budget_ci_irq (struct saa7146_dev *dev, u32 *isr) +static void budget_ci_irq(struct saa7146_dev *dev, u32 * isr) { - struct budget_ci *budget_ci = (struct budget_ci*) dev->ext_priv; + struct budget_ci *budget_ci = (struct budget_ci *) dev->ext_priv; dprintk(8, "dev: %p, budget_ci: %p\n", dev, budget_ci); - if (*isr & MASK_06) - tasklet_schedule (&budget_ci->msp430_irq_tasklet); + if (*isr & MASK_06) + tasklet_schedule(&budget_ci->msp430_irq_tasklet); - if (*isr & MASK_10) - ttpci_budget_irq10_handler (dev, isr); + if (*isr & MASK_10) + ttpci_budget_irq10_handler(dev, isr); if ((*isr & MASK_03) && (budget_ci->budget.ci_present)) - tasklet_schedule (&budget_ci->ciintf_irq_tasklet); + tasklet_schedule(&budget_ci->ciintf_irq_tasklet); } @@ -902,7 +895,7 @@ static int budget_ci_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio struct budget_ci *budget_ci; int err; - if (!(budget_ci = kmalloc (sizeof(struct budget_ci), GFP_KERNEL))) + if (!(budget_ci = kmalloc(sizeof(struct budget_ci), GFP_KERNEL))) return -ENOMEM; dprintk(2, "budget_ci: %p\n", budget_ci); @@ -912,14 +905,14 @@ static int budget_ci_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio dev->ext_priv = budget_ci; if ((err = ttpci_budget_init(&budget_ci->budget, dev, info, THIS_MODULE))) { - kfree (budget_ci); + kfree(budget_ci); return err; } - tasklet_init (&budget_ci->msp430_irq_tasklet, msp430_ir_interrupt, - (unsigned long) budget_ci); + tasklet_init(&budget_ci->msp430_irq_tasklet, msp430_ir_interrupt, + (unsigned long) budget_ci); - msp430_ir_init (budget_ci); + msp430_ir_init(budget_ci); ciintf_init(budget_ci); @@ -929,11 +922,9 @@ static int budget_ci_attach(struct saa7146_dev *dev, struct saa7146_pci_extensio return 0; } - - -static int budget_ci_detach (struct saa7146_dev* dev) +static int budget_ci_detach(struct saa7146_dev *dev) { - struct budget_ci *budget_ci = (struct budget_ci*) dev->ext_priv; + struct budget_ci *budget_ci = (struct budget_ci *) dev->ext_priv; struct saa7146_dev *saa = budget_ci->budget.dev; int err; @@ -941,60 +932,57 @@ static int budget_ci_detach (struct saa7146_dev* dev) ciintf_deinit(budget_ci); if (budget_ci->budget.dvb_frontend) dvb_unregister_frontend(budget_ci->budget.dvb_frontend); - err = ttpci_budget_deinit (&budget_ci->budget); + err = ttpci_budget_deinit(&budget_ci->budget); - tasklet_kill (&budget_ci->msp430_irq_tasklet); + tasklet_kill(&budget_ci->msp430_irq_tasklet); - msp430_ir_deinit (budget_ci); + msp430_ir_deinit(budget_ci); // disable frontend and CI interface saa7146_setgpio(saa, 2, SAA7146_GPIO_INPUT); - kfree (budget_ci); + kfree(budget_ci); return err; } +static struct saa7146_extension budget_extension; - -static struct saa7146_extension budget_extension; - -MAKE_BUDGET_INFO(ttbci, "TT-Budget/WinTV-NOVA-CI PCI", BUDGET_TT_HW_DISEQC); -MAKE_BUDGET_INFO(ttbt2, "TT-Budget/WinTV-NOVA-T PCI", BUDGET_TT); +MAKE_BUDGET_INFO(ttbci, "TT-Budget/WinTV-NOVA-CI PCI", BUDGET_TT_HW_DISEQC); +MAKE_BUDGET_INFO(ttbt2, "TT-Budget/WinTV-NOVA-T PCI", BUDGET_TT); static struct pci_device_id pci_tbl[] = { MAKE_EXTENSION_PCI(ttbci, 0x13c2, 0x100c), MAKE_EXTENSION_PCI(ttbci, 0x13c2, 0x100f), - MAKE_EXTENSION_PCI(ttbt2, 0x13c2, 0x1011), + MAKE_EXTENSION_PCI(ttbt2, 0x13c2, 0x1011), { - .vendor = 0, - } + .vendor = 0, + } }; MODULE_DEVICE_TABLE(pci, pci_tbl); static struct saa7146_extension budget_extension = { - .name = "budget_ci dvb\0", - .flags = 0, - - .module = THIS_MODULE, - .pci_tbl = &pci_tbl[0], - .attach = budget_ci_attach, - .detach = budget_ci_detach, + .name = "budget_ci dvb\0", + .flags = 0, - .irq_mask = MASK_03 | MASK_06 | MASK_10, - .irq_func = budget_ci_irq, -}; + .module = THIS_MODULE, + .pci_tbl = &pci_tbl[0], + .attach = budget_ci_attach, + .detach = budget_ci_detach, + .irq_mask = MASK_03 | MASK_06 | MASK_10, + .irq_func = budget_ci_irq, +}; -static int __init budget_ci_init(void) +static int __init budget_ci_init(void) { return saa7146_register_extension(&budget_extension); } static void __exit budget_ci_exit(void) { - saa7146_unregister_extension(&budget_extension); + saa7146_unregister_extension(&budget_extension); } module_init(budget_ci_init); @@ -1005,4 +993,3 @@ MODULE_AUTHOR("Michael Hunold, Jack Thomasson, Andrew de Quincey, others"); MODULE_DESCRIPTION("driver for the SAA7146 based so-called " "budget PCI DVB cards w/ CI-module produced by " "Siemens, Technotrend, Hauppauge"); - diff --git a/drivers/media/dvb/ttpci/budget-core.c b/drivers/media/dvb/ttpci/budget-core.c index 669105a9b118..edfa5c1f108d 100644 --- a/drivers/media/dvb/ttpci/budget-core.c +++ b/drivers/media/dvb/ttpci/budget-core.c @@ -40,7 +40,6 @@ #include "ttpci-eeprom.h" int budget_debug; - module_param_named(debug, budget_debug, int, 0644); MODULE_PARM_DESC(budget_debug, "Turn on/off budget debugging (default:off)."); @@ -52,32 +51,31 @@ static int stop_ts_capture(struct budget *budget) { dprintk(2, "budget: %p\n", budget); - if (--budget->feeding) - return budget->feeding; + if (--budget->feeding) + return budget->feeding; - saa7146_write(budget->dev, MC1, MASK_20); // DMA3 off + saa7146_write(budget->dev, MC1, MASK_20); // DMA3 off SAA7146_IER_DISABLE(budget->dev, MASK_10); - return 0; + return 0; } - -static int start_ts_capture (struct budget *budget) +static int start_ts_capture(struct budget *budget) { - struct saa7146_dev *dev=budget->dev; + struct saa7146_dev *dev = budget->dev; dprintk(2, "budget: %p\n", budget); - if (budget->feeding) - return ++budget->feeding; + if (budget->feeding) + return ++budget->feeding; - saa7146_write(dev, MC1, MASK_20); // DMA3 off + saa7146_write(dev, MC1, MASK_20); // DMA3 off - memset(budget->grabbing, 0x00, TS_HEIGHT*TS_WIDTH); + memset(budget->grabbing, 0x00, TS_HEIGHT * TS_WIDTH); saa7146_write(dev, PCI_BT_V1, 0x001c0000 | (saa7146_read(dev, PCI_BT_V1) & ~0x001f0000)); - budget->tsf=0xff; - budget->ttbp=0; + budget->tsf = 0xff; + budget->ttbp = 0; /* * Signal path on the Activy: @@ -86,7 +84,7 @@ static int start_ts_capture (struct budget *budget) * * Since the tuner feeds 204 bytes packets into the SAA7146, * DMA3 is configured to strip the trailing 16 FEC bytes: - * Pitch: 188, NumBytes3: 188, NumLines3: 1024 + * Pitch: 188, NumBytes3: 188, NumLines3: 1024 */ switch(budget->card->type) { @@ -106,63 +104,62 @@ static int start_ts_capture (struct budget *budget) saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); saa7146_write(dev, BRS_CTRL, 0x00000000); } else { - saa7146_write(dev, DD1_INIT, 0x02000600); - saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - saa7146_write(dev, BRS_CTRL, 0x60000000); + saa7146_write(dev, DD1_INIT, 0x02000600); + saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); + saa7146_write(dev, BRS_CTRL, 0x60000000); } } - saa7146_write(dev, MC2, (MASK_08 | MASK_24)); - mdelay(10); + saa7146_write(dev, MC2, (MASK_08 | MASK_24)); + mdelay(10); - saa7146_write(dev, BASE_ODD3, 0); - saa7146_write(dev, BASE_EVEN3, 0); - saa7146_write(dev, PROT_ADDR3, TS_WIDTH*TS_HEIGHT); - saa7146_write(dev, BASE_PAGE3, budget->pt.dma |ME1|0x90); + saa7146_write(dev, BASE_ODD3, 0); + saa7146_write(dev, BASE_EVEN3, 0); + saa7146_write(dev, PROT_ADDR3, TS_WIDTH * TS_HEIGHT); + saa7146_write(dev, BASE_PAGE3, budget->pt.dma | ME1 | 0x90); if (budget->card->type == BUDGET_FS_ACTIVY) { - saa7146_write(dev, PITCH3, TS_WIDTH/2); - saa7146_write(dev, NUM_LINE_BYTE3, ((TS_HEIGHT*2)<<16)|(TS_WIDTH/2)); + saa7146_write(dev, PITCH3, TS_WIDTH / 2); + saa7146_write(dev, NUM_LINE_BYTE3, ((TS_HEIGHT * 2) << 16) | (TS_WIDTH / 2)); } else { saa7146_write(dev, PITCH3, TS_WIDTH); - saa7146_write(dev, NUM_LINE_BYTE3, (TS_HEIGHT<<16)|TS_WIDTH); + saa7146_write(dev, NUM_LINE_BYTE3, (TS_HEIGHT << 16) | TS_WIDTH); } - saa7146_write(dev, MC2, (MASK_04 | MASK_20)); + saa7146_write(dev, MC2, (MASK_04 | MASK_20)); SAA7146_ISR_CLEAR(budget->dev, MASK_10); /* VPE */ SAA7146_IER_ENABLE(budget->dev, MASK_10); /* VPE */ saa7146_write(dev, MC1, (MASK_04 | MASK_20)); /* DMA3 on */ - return ++budget->feeding; + return ++budget->feeding; } - -static void vpeirq (unsigned long data) +static void vpeirq(unsigned long data) { - struct budget *budget = (struct budget*) data; - u8 *mem = (u8 *)(budget->grabbing); - u32 olddma = budget->ttbp; - u32 newdma = saa7146_read(budget->dev, PCI_VDP3); + struct budget *budget = (struct budget *) data; + u8 *mem = (u8 *) (budget->grabbing); + u32 olddma = budget->ttbp; + u32 newdma = saa7146_read(budget->dev, PCI_VDP3); - /* nearest lower position divisible by 188 */ - newdma -= newdma % 188; + /* nearest lower position divisible by 188 */ + newdma -= newdma % 188; - if (newdma >= TS_BUFLEN) - return; + if (newdma >= TS_BUFLEN) + return; budget->ttbp = newdma; - - if(budget->feeding == 0 || newdma == olddma) + + if (budget->feeding == 0 || newdma == olddma) return; - if (newdma > olddma) { /* no wraparound, dump olddma..newdma */ + if (newdma > olddma) { /* no wraparound, dump olddma..newdma */ dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, (newdma - olddma) / 188); - } else { /* wraparound, dump olddma..buflen and 0..newdma */ + } else { /* wraparound, dump olddma..buflen and 0..newdma */ dvb_dmx_swfilter_packets(&budget->demux, mem + olddma, (TS_BUFLEN - olddma) / 188); dvb_dmx_swfilter_packets(&budget->demux, mem, newdma / 188); } - } +} int ttpci_budget_debiread(struct budget *budget, u32 config, int addr, int count, @@ -247,106 +244,104 @@ int ttpci_budget_debiwrite(struct budget *budget, u32 config, int addr, static int budget_start_feed(struct dvb_demux_feed *feed) { - struct dvb_demux *demux = feed->demux; - struct budget *budget = (struct budget*) demux->priv; + struct dvb_demux *demux = feed->demux; + struct budget *budget = (struct budget *) demux->priv; int status; dprintk(2, "budget: %p\n", budget); - if (!demux->dmx.frontend) - return -EINVAL; + if (!demux->dmx.frontend) + return -EINVAL; - spin_lock(&budget->feedlock); + spin_lock(&budget->feedlock); feed->pusi_seen = 0; /* have a clean section start */ - status = start_ts_capture (budget); - spin_unlock(&budget->feedlock); + status = start_ts_capture(budget); + spin_unlock(&budget->feedlock); return status; } static int budget_stop_feed(struct dvb_demux_feed *feed) { - struct dvb_demux *demux = feed->demux; - struct budget *budget = (struct budget *) demux->priv; + struct dvb_demux *demux = feed->demux; + struct budget *budget = (struct budget *) demux->priv; int status; dprintk(2, "budget: %p\n", budget); - spin_lock(&budget->feedlock); - status = stop_ts_capture (budget); - spin_unlock(&budget->feedlock); + spin_lock(&budget->feedlock); + status = stop_ts_capture(budget); + spin_unlock(&budget->feedlock); return status; } - static int budget_register(struct budget *budget) { - struct dvb_demux *dvbdemux=&budget->demux; - int ret; + struct dvb_demux *dvbdemux = &budget->demux; + int ret; dprintk(2, "budget: %p\n", budget); - dvbdemux->priv = (void *) budget; + dvbdemux->priv = (void *) budget; dvbdemux->filternum = 256; - dvbdemux->feednum = 256; - dvbdemux->start_feed = budget_start_feed; - dvbdemux->stop_feed = budget_stop_feed; - dvbdemux->write_to_decoder = NULL; + dvbdemux->feednum = 256; + dvbdemux->start_feed = budget_start_feed; + dvbdemux->stop_feed = budget_stop_feed; + dvbdemux->write_to_decoder = NULL; + + dvbdemux->dmx.capabilities = (DMX_TS_FILTERING | DMX_SECTION_FILTERING | + DMX_MEMORY_BASED_FILTERING); - dvbdemux->dmx.capabilities = (DMX_TS_FILTERING | DMX_SECTION_FILTERING | - DMX_MEMORY_BASED_FILTERING); + dvb_dmx_init(&budget->demux); - dvb_dmx_init(&budget->demux); + budget->dmxdev.filternum = 256; + budget->dmxdev.demux = &dvbdemux->dmx; + budget->dmxdev.capabilities = 0; - budget->dmxdev.filternum = 256; - budget->dmxdev.demux = &dvbdemux->dmx; - budget->dmxdev.capabilities = 0; + dvb_dmxdev_init(&budget->dmxdev, budget->dvb_adapter); - dvb_dmxdev_init(&budget->dmxdev, budget->dvb_adapter); + budget->hw_frontend.source = DMX_FRONTEND_0; - budget->hw_frontend.source = DMX_FRONTEND_0; + ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->hw_frontend); - ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->hw_frontend); + if (ret < 0) + return ret; - if (ret < 0) - return ret; - - budget->mem_frontend.source = DMX_MEMORY_FE; + budget->mem_frontend.source = DMX_MEMORY_FE; ret = dvbdemux->dmx.add_frontend(&dvbdemux->dmx, &budget->mem_frontend); - if (ret<0) - return ret; - + if (ret < 0) + return ret; + ret = dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, &budget->hw_frontend); - if (ret < 0) - return ret; + if (ret < 0) + return ret; - dvb_net_init(budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx); + dvb_net_init(budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx); return 0; } - static void budget_unregister(struct budget *budget) { - struct dvb_demux *dvbdemux=&budget->demux; + struct dvb_demux *dvbdemux = &budget->demux; dprintk(2, "budget: %p\n", budget); dvb_net_release(&budget->dvb_net); dvbdemux->dmx.close(&dvbdemux->dmx); - dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->hw_frontend); - dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->mem_frontend); + dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->hw_frontend); + dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &budget->mem_frontend); - dvb_dmxdev_release(&budget->dmxdev); - dvb_dmx_release(&budget->demux); + dvb_dmxdev_release(&budget->dmxdev); + dvb_dmx_release(&budget->demux); } int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, struct saa7146_pci_extension_data *info, struct module *owner) { - int length = TS_WIDTH*TS_HEIGHT; + int length = TS_WIDTH * TS_HEIGHT; int ret = 0; struct budget_info *bi = info->ext_priv; @@ -360,13 +355,13 @@ int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, dvb_register_adapter(&budget->dvb_adapter, budget->card->name, owner); /* set dd1 stream a & b */ - saa7146_write(dev, DD1_STREAM_B, 0x00000000); + saa7146_write(dev, DD1_STREAM_B, 0x00000000); saa7146_write(dev, MC2, (MASK_09 | MASK_25)); saa7146_write(dev, MC2, (MASK_10 | MASK_26)); saa7146_write(dev, DD1_INIT, 0x02000000); saa7146_write(dev, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - if (bi->type != BUDGET_FS_ACTIVY) + if (bi->type != BUDGET_FS_ACTIVY) budget->video_port = BUDGET_VIDEO_PORTB; else budget->video_port = BUDGET_VIDEO_PORTA; @@ -374,10 +369,10 @@ int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, spin_lock_init(&budget->debilock); /* the Siemens DVB needs this if you want to have the i2c chips - get recognized before the main driver is loaded */ + get recognized before the main driver is loaded */ if (bi->type != BUDGET_FS_ACTIVY) - saa7146_write(dev, GPIO_CTRL, 0x500000); /* GPIO 3 = 1 */ - + saa7146_write(dev, GPIO_CTRL, 0x500000); /* GPIO 3 = 1 */ + #ifdef I2C_ADAP_CLASS_TV_DIGITAL budget->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL; #else @@ -390,7 +385,7 @@ int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, strcpy(budget->i2c_adap.name, budget->card->name); if (i2c_add_adapter(&budget->i2c_adap) < 0) { - dvb_unregister_adapter (budget->dvb_adapter); + dvb_unregister_adapter(budget->dvb_adapter); return -ENOMEM; } @@ -404,9 +399,9 @@ int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, saa7146_write(dev, PCI_BT_V1, 0x001c0000); /* upload all */ - saa7146_write(dev, GPIO_CTRL, 0x000000); + saa7146_write(dev, GPIO_CTRL, 0x000000); - tasklet_init (&budget->vpe_tasklet, vpeirq, (unsigned long) budget); + tasklet_init(&budget->vpe_tasklet, vpeirq, (unsigned long) budget); /* frontend power on */ if (bi->type == BUDGET_FS_ACTIVY) @@ -414,7 +409,7 @@ int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, else saa7146_setgpio(dev, 2, SAA7146_GPIO_OUTHI); - if (budget_register(budget) == 0) { + if (budget_register(budget) == 0) { return 0; } err: @@ -423,57 +418,56 @@ err: if (budget->grabbing) vfree(budget->grabbing); - dvb_unregister_adapter (budget->dvb_adapter); + dvb_unregister_adapter(budget->dvb_adapter); return ret; } - -int ttpci_budget_deinit (struct budget *budget) +int ttpci_budget_deinit(struct budget *budget) { struct saa7146_dev *dev = budget->dev; dprintk(2, "budget: %p\n", budget); - budget_unregister (budget); + budget_unregister(budget); i2c_del_adapter(&budget->i2c_adap); - dvb_unregister_adapter (budget->dvb_adapter); + dvb_unregister_adapter(budget->dvb_adapter); - tasklet_kill (&budget->vpe_tasklet); + tasklet_kill(&budget->vpe_tasklet); - saa7146_pgtable_free (dev->pci, &budget->pt); + saa7146_pgtable_free(dev->pci, &budget->pt); - vfree (budget->grabbing); + vfree(budget->grabbing); return 0; } -void ttpci_budget_irq10_handler (struct saa7146_dev* dev, u32 *isr) +void ttpci_budget_irq10_handler(struct saa7146_dev *dev, u32 * isr) { - struct budget *budget = (struct budget*)dev->ext_priv; + struct budget *budget = (struct budget *) dev->ext_priv; - dprintk(8, "dev: %p, budget: %p\n",dev,budget); + dprintk(8, "dev: %p, budget: %p\n", dev, budget); if (*isr & MASK_10) - tasklet_schedule (&budget->vpe_tasklet); + tasklet_schedule(&budget->vpe_tasklet); } -void ttpci_budget_set_video_port(struct saa7146_dev* dev, int video_port) +void ttpci_budget_set_video_port(struct saa7146_dev *dev, int video_port) { - struct budget *budget = (struct budget*)dev->ext_priv; + struct budget *budget = (struct budget *) dev->ext_priv; spin_lock(&budget->feedlock); budget->video_port = video_port; if (budget->feeding) { int oldfeeding = budget->feeding; - budget->feeding = 1; + budget->feeding = 1; stop_ts_capture(budget); start_ts_capture(budget); - budget->feeding = oldfeeding; + budget->feeding = oldfeeding; } - spin_unlock(&budget->feedlock); + spin_unlock(&budget->feedlock); } EXPORT_SYMBOL_GPL(ttpci_budget_debiread); @@ -485,4 +479,3 @@ EXPORT_SYMBOL_GPL(ttpci_budget_set_video_port); EXPORT_SYMBOL_GPL(budget_debug); MODULE_LICENSE("GPL"); - diff --git a/drivers/media/dvb/ttpci/budget-patch.c b/drivers/media/dvb/ttpci/budget-patch.c index 619e87f06357..10653ce69b68 100644 --- a/drivers/media/dvb/ttpci/budget-patch.c +++ b/drivers/media/dvb/ttpci/budget-patch.c @@ -13,19 +13,19 @@ * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 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. * Or, point your browser to http://www.gnu.org/copyleft/gpl.html - * + * * * the project's page is at http://www.linuxtv.org/dvb/ */ @@ -55,7 +55,7 @@ static struct pci_device_id pci_tbl[] = { /* those lines are for budget-patch to be tried ** on a true budget card and observe the ** behaviour of VSYNC generated by rps1. -** this code was shamelessly copy/pasted from budget.c +** this code was shamelessly copy/pasted from budget.c */ static void gpio_Set22K (struct budget *budget, int state) { @@ -96,10 +96,10 @@ static void DiseqcSendByte (struct budget *budget, int data) static int SendDiSEqCMsg (struct budget *budget, int len, u8 *msg, unsigned long burst) { - struct saa7146_dev *dev=budget->dev; + struct saa7146_dev *dev=budget->dev; int i; - dprintk(2, "budget: %p\n", budget); + dprintk(2, "budget: %p\n", budget); saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTLO); mdelay(16); @@ -123,7 +123,7 @@ static int SendDiSEqCMsg (struct budget *budget, int len, u8 *msg, unsigned long return 0; } -/* shamelessly copy/pasted from budget.c +/* shamelessly copy/pasted from budget.c */ static int budget_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone) { @@ -151,7 +151,7 @@ static int budget_diseqc_send_master_cmd(struct dvb_frontend* fe, struct dvb_dis SendDiSEqCMsg (budget, cmd->msg_len, cmd->msg, 0); - return 0; + return 0; } static int budget_diseqc_send_burst(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd) @@ -173,27 +173,25 @@ static int budget_av7110_send_fw_cmd(struct budget_patch *budget, u16* buf, int { ttpci_budget_debiwrite(budget, DEBINOSWAP, COMMAND + 2*i, 2, (u32) buf[i], 0,0); msleep(5); - } + } if (length) ttpci_budget_debiwrite(budget, DEBINOSWAP, COMMAND + 2, 2, (u32) buf[1], 0,0); else ttpci_budget_debiwrite(budget, DEBINOSWAP, COMMAND + 2, 2, 0, 0,0); - msleep(5); + msleep(5); ttpci_budget_debiwrite(budget, DEBINOSWAP, COMMAND, 2, (u32) buf[0], 0,0); msleep(5); return 0; } - static void av7110_set22k(struct budget_patch *budget, int state) { u16 buf[2] = {( COMTYPE_AUDIODAC << 8) | (state ? ON22K : OFF22K), 0}; - + dprintk(2, "budget: %p\n", budget); budget_av7110_send_fw_cmd(budget, buf, 2); } - static int av7110_send_diseqc_msg(struct budget_patch *budget, int len, u8 *msg, int burst) { int i; @@ -212,7 +210,7 @@ static int av7110_send_diseqc_msg(struct budget_patch *budget, int len, u8 *msg, buf[3]=burst ? 0x01 : 0x00; else buf[3]=0xffff; - + for (i=0; i<len; i++) buf[i+4]=msg[i]; @@ -225,27 +223,29 @@ static int budget_patch_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t ton struct budget_patch* budget = (struct budget_patch*) fe->dvb->priv; switch (tone) { - case SEC_TONE_ON: - av7110_set22k (budget, 1); - break; - case SEC_TONE_OFF: - av7110_set22k (budget, 0); - break; - default: - return -EINVAL; - } + case SEC_TONE_ON: + av7110_set22k (budget, 1); + break; + + case SEC_TONE_OFF: + av7110_set22k (budget, 0); + break; + + default: + return -EINVAL; + } return 0; } static int budget_patch_diseqc_send_master_cmd(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd) - { +{ struct budget_patch* budget = (struct budget_patch*) fe->dvb->priv; - av7110_send_diseqc_msg (budget, cmd->msg_len, cmd->msg, 0); + av7110_send_diseqc_msg (budget, cmd->msg_len, cmd->msg, 0); return 0; - } +} static int budget_patch_diseqc_send_burst(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd) { @@ -254,7 +254,7 @@ static int budget_patch_diseqc_send_burst(struct dvb_frontend* fe, fe_sec_mini_c av7110_send_diseqc_msg (budget, 0, NULL, minicmd); return 0; - } +} static int alps_bsrv2_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params) { @@ -350,7 +350,7 @@ static int alps_bsru6_set_symbol_rate(struct dvb_frontend* fe, u32 srate, u32 ra stv0299_writereg (fe, 0x20, (ratio >> 8) & 0xff); stv0299_writereg (fe, 0x21, (ratio ) & 0xf0); - return 0; + return 0; } static int alps_bsru6_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params) @@ -498,7 +498,7 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte saa7146_write(dev, CLIP_FORMAT_CTRL, 0); // r78 // Set HPS prescaler for port B input saa7146_write(dev, HPS_CTRL, (1<<30) | (0<<29) | (1<<28) | (0<<12) ); - saa7146_write(dev, MC2, + saa7146_write(dev, MC2, 0 * (MASK_08 | MASK_24) | // BRS control 0 * (MASK_09 | MASK_25) | // a 0 * (MASK_10 | MASK_26) | // b @@ -512,15 +512,15 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte // RPS1 timeout disable saa7146_write(dev, RPS_TOV1, 0); - // code for autodetection + // code for autodetection // will wait for VBI_B event (vertical blank at port B) // and will reset GPIO3 after VBI_B is detected. // (GPIO3 should be raised high by CPU to - // test if GPIO3 will generate vertical blank signal + // test if GPIO3 will generate vertical blank signal // in budget patch GPIO3 is connected to VSYNC_B count = 0; #if 0 - WRITE_RPS1(cpu_to_le32(CMD_UPLOAD | + WRITE_RPS1(cpu_to_le32(CMD_UPLOAD | MASK_10 | MASK_09 | MASK_08 | MASK_06 | MASK_05 | MASK_04 | MASK_03 | MASK_02 )); #endif WRITE_RPS1(cpu_to_le32(CMD_PAUSE | EVT_VBI_B)); @@ -557,7 +557,7 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte saa7146_setgpio(dev, 3, SAA7146_GPIO_OUTHI); mdelay(150); - + if( (saa7146_read(dev, GPIO_CTRL) & 0x10000000) == 0) detected = 1; @@ -570,51 +570,51 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte if(detected == 0) printk("budget-patch not detected or saa7146 in non-default state.\n" "try enabling ressetting of 7146 with MASK_31 in MC1 register\n"); - + else printk("BUDGET-PATCH DETECTED.\n"); /* OLD (Original design by Roberto Deza): -** This code will setup the SAA7146_RPS1 to generate a square -** wave on GPIO3, changing when a field (TS_HEIGHT/2 "lines" of -** TS_WIDTH packets) has been acquired on SAA7146_D1B video port; -** then, this GPIO3 output which is connected to the D1B_VSYNC -** input, will trigger the acquisition of the alternate field +** This code will setup the SAA7146_RPS1 to generate a square +** wave on GPIO3, changing when a field (TS_HEIGHT/2 "lines" of +** TS_WIDTH packets) has been acquired on SAA7146_D1B video port; +** then, this GPIO3 output which is connected to the D1B_VSYNC +** input, will trigger the acquisition of the alternate field ** and so on. -** Currently, the TT_budget / WinTV_Nova cards have two ICs -** (74HCT4040, LVC74) for the generation of this VSYNC signal, +** Currently, the TT_budget / WinTV_Nova cards have two ICs +** (74HCT4040, LVC74) for the generation of this VSYNC signal, ** which seems that can be done perfectly without this :-)). -*/ +*/ /* New design (By Emard) ** this rps1 code will copy internal HS event to GPIO3 pin. ** GPIO3 is in budget-patch hardware connectd to port B VSYNC ** HS is an internal event of 7146, accessible with RPS -** and temporarily raised high every n lines +** and temporarily raised high every n lines ** (n in defined in the RPS_THRESH1 counter threshold) ** I think HS is raised high on the beginning of the n-th line ** and remains high until this n-th line that triggered ** it is completely received. When the receiption of n-th line ** ends, HS is lowered. -** To transmit data over DMA, 7146 needs changing state at -** port B VSYNC pin. Any changing of port B VSYNC will +** To transmit data over DMA, 7146 needs changing state at +** port B VSYNC pin. Any changing of port B VSYNC will ** cause some DMA data transfer, with more or less packets loss. -** It depends on the phase and frequency of VSYNC and +** It depends on the phase and frequency of VSYNC and ** the way of 7146 is instructed to trigger on port B (defined ** in DD1_INIT register, 3rd nibble from the right valid ** numbers are 0-7, see datasheet) ** -** The correct triggering can minimize packet loss, +** The correct triggering can minimize packet loss, ** dvbtraffic should give this stable bandwidths: ** 22k transponder = 33814 kbit/s ** 27.5k transponder = 38045 kbit/s -** by experiment it is found that the best results -** (stable bandwidths and almost no packet loss) -** are obtained using DD1_INIT triggering number 2 -** (Va at rising edge of VS Fa = HS x VS-failing forced toggle) +** by experiment it is found that the best results +** (stable bandwidths and almost no packet loss) +** are obtained using DD1_INIT triggering number 2 +** (Va at rising edge of VS Fa = HS x VS-failing forced toggle) ** and a VSYNC phase that occurs in the middle of DMA transfer ** (about byte 188*512=96256 in the DMA window). ** @@ -625,20 +625,20 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte ** increment. That's how the 7146 is programmed to do event ** counting in this budget-patch.c ** I *think* HPS setting has something to do with the phase -** of HS but I cant be 100% sure in that. +** of HS but I cant be 100% sure in that. ** hardware debug note: a working budget card (including budget patch) ** with vpeirq() interrupt setup in mode "0x90" (every 64K) will ** generate 3 interrupts per 25-Hz DMA frame of 2*188*512 bytes ** and that means 3*25=75 Hz of interrupt freqency, as seen by -** watch cat /proc/interrupts +** watch cat /proc/interrupts ** ** If this frequency is 3x lower (and data received in the DMA ** buffer don't start with 0x47, but in the middle of packets, ** whose lengths appear to be like 188 292 188 104 etc. -** this means VSYNC line is not connected in the hardware. +** this means VSYNC line is not connected in the hardware. ** (check soldering pcb and pins) -** The same behaviour of missing VSYNC can be duplicated on budget +** The same behaviour of missing VSYNC can be duplicated on budget ** cards, by seting DD1_INIT trigger mode 7 in 3rd nibble. */ @@ -681,14 +681,14 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte // low 16 bits are set to TS_WIDTH bytes (TS_WIDTH=2*188 //,then RPS_THRESH1 // should be set to trigger every TS_HEIGHT (512) lines. - // + // saa7146_write(dev, RPS_THRESH1, (TS_HEIGHT*1) | MASK_12 ); - + // saa7146_write(dev, RPS_THRESH0, ((TS_HEIGHT/2)<<16) |MASK_28| (TS_HEIGHT/2) |MASK_12 ); // Enable RPS1 (rFC p33) saa7146_write(dev, MC1, (MASK_13 | MASK_29)); - + if (!(budget = kmalloc (sizeof(struct budget_patch), GFP_KERNEL))) return -ENOMEM; @@ -708,7 +708,6 @@ static int budget_patch_attach (struct saa7146_dev* dev, struct saa7146_pci_exte return 0; } - static int budget_patch_detach (struct saa7146_dev* dev) { struct budget_patch *budget = (struct budget_patch*) dev->ext_priv; @@ -723,22 +722,20 @@ static int budget_patch_detach (struct saa7146_dev* dev) return err; } - -static int __init budget_patch_init(void) +static int __init budget_patch_init(void) { return saa7146_register_extension(&budget_extension); } static void __exit budget_patch_exit(void) { - saa7146_unregister_extension(&budget_extension); + saa7146_unregister_extension(&budget_extension); } - static struct saa7146_extension budget_extension = { .name = "budget_patch dvb\0", .flags = 0, - + .module = THIS_MODULE, .pci_tbl = pci_tbl, .attach = budget_patch_attach, @@ -748,7 +745,6 @@ static struct saa7146_extension budget_extension = { .irq_func = ttpci_budget_irq10_handler, }; - module_init(budget_patch_init); module_exit(budget_patch_exit); @@ -756,4 +752,3 @@ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Emard, Roberto Deza, Holger Waechtler, Michael Hunold, others"); MODULE_DESCRIPTION("Driver for full TS modified DVB-S SAA7146+AV7110 " "based so-called Budget Patch cards"); - diff --git a/drivers/media/dvb/ttpci/budget.c b/drivers/media/dvb/ttpci/budget.c index 031105c1d48e..a6476bad4f2a 100644 --- a/drivers/media/dvb/ttpci/budget.c +++ b/drivers/media/dvb/ttpci/budget.c @@ -1,35 +1,35 @@ /* - * budget.c: driver for the SAA7146 based Budget DVB cards + * budget.c: driver for the SAA7146 based Budget DVB cards * - * Compiled from various sources by Michael Hunold <michael@mihu.de> + * Compiled from various sources by Michael Hunold <michael@mihu.de> * * Copyright (C) 2002 Ralph Metzler <rjkm@metzlerbros.de> * - * Copyright (C) 1999-2002 Ralph Metzler + * Copyright (C) 1999-2002 Ralph Metzler * & Marcus Metzler for convergence integrated media GmbH * * 26feb2004 Support for FS Activy Card (Grundig tuner) by * Michael Dreher <michael@5dot1.de>, * Oliver Endriss <o.endriss@gmx.de> and * Andreas 'randy' Weinberger - * + * * 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 the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 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. * Or, point your browser to http://www.gnu.org/copyleft/gpl.html - * + * * * the project's page is at http://www.linuxtv.org/dvb/ */ @@ -48,7 +48,6 @@ static void Set22K (struct budget *budget, int state) saa7146_setgpio(dev, 3, (state ? SAA7146_GPIO_OUTHI : SAA7146_GPIO_OUTLO)); } - /* Diseqc functions only for TT Budget card */ /* taken from the Skyvision DVB driver by Ralph Metzler <rjkm@metzlerbros.de> */ @@ -64,7 +63,6 @@ static void DiseqcSendBit (struct budget *budget, int data) udelay(data ? 1000 : 500); } - static void DiseqcSendByte (struct budget *budget, int data) { int i, par=1, d; @@ -80,7 +78,6 @@ static void DiseqcSendByte (struct budget *budget, int data) DiseqcSendBit(budget, par); } - static int SendDiSEqCMsg (struct budget *budget, int len, u8 *msg, unsigned long burst) { struct saa7146_dev *dev=budget->dev; @@ -119,7 +116,7 @@ static int SetVoltage_Activy (struct budget *budget, fe_sec_voltage_t voltage) { struct saa7146_dev *dev=budget->dev; - dprintk(2, "budget: %p\n", budget); + dprintk(2, "budget: %p\n", budget); switch (voltage) { case SEC_VOLTAGE_13: @@ -147,28 +144,29 @@ static int budget_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone) struct budget* budget = (struct budget*) fe->dvb->priv; switch (tone) { - case SEC_TONE_ON: - Set22K (budget, 1); - break; - case SEC_TONE_OFF: - Set22K (budget, 0); - break; - - default: - return -EINVAL; + case SEC_TONE_ON: + Set22K (budget, 1); + break; + + case SEC_TONE_OFF: + Set22K (budget, 0); + break; + + default: + return -EINVAL; } return 0; } static int budget_diseqc_send_master_cmd(struct dvb_frontend* fe, struct dvb_diseqc_master_cmd* cmd) - { +{ struct budget* budget = (struct budget*) fe->dvb->priv; - SendDiSEqCMsg (budget, cmd->msg_len, cmd->msg, 0); + SendDiSEqCMsg (budget, cmd->msg_len, cmd->msg, 0); return 0; - } +} static int budget_diseqc_send_burst(struct dvb_frontend* fe, fe_sec_mini_cmd_t minicmd) { @@ -176,7 +174,7 @@ static int budget_diseqc_send_burst(struct dvb_frontend* fe, fe_sec_mini_cmd_t m SendDiSEqCMsg (budget, 0, NULL, minicmd); - return 0; + return 0; } static int alps_bsrv2_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params) @@ -275,7 +273,7 @@ static int alps_bsru6_set_symbol_rate(struct dvb_frontend* fe, u32 srate, u32 ra stv0299_writereg (fe, 0x21, (ratio ) & 0xf0); return 0; - } +} static int alps_bsru6_pll_set(struct dvb_frontend* fe, struct dvb_frontend_parameters* params) { @@ -368,7 +366,7 @@ static int grundig_29504_401_pll_set(struct dvb_frontend* fe, struct dvb_fronten if (i2c_transfer (&budget->i2c_adap, &msg, 1) != 1) return -EIO; return 0; - } +} static struct l64781_config grundig_29504_401_config = { .demod_address = 0x55, @@ -434,13 +432,13 @@ static void frontend_init(struct budget *budget) } break; - case 0x1004: // Hauppauge/TT DVB-C budget (ves1820/ALPS TDBE2(sp5659)) + case 0x1004: // Hauppauge/TT DVB-C budget (ves1820/ALPS TDBE2(sp5659)) budget->dvb_frontend = ves1820_attach(&alps_tdbe2_config, &budget->i2c_adap, read_pwm(budget)); if (budget->dvb_frontend) break; break; - case 0x1005: // Hauppauge/TT Nova-T budget (L64781/Grundig 29504-401(tsa5060)) + case 0x1005: // Hauppauge/TT Nova-T budget (L64781/Grundig 29504-401(tsa5060)) budget->dvb_frontend = l64781_attach(&grundig_29504_401_config, &budget->i2c_adap); if (budget->dvb_frontend) break; @@ -449,7 +447,7 @@ static void frontend_init(struct budget *budget) case 0x4f61: // Fujitsu Siemens Activy Budget-S PCI (tda8083/Grundig 29504-451(tsa5522)) // grundig 29504-451 - budget->dvb_frontend = tda8083_attach(&grundig_29504_451_config, &budget->i2c_adap); + budget->dvb_frontend = tda8083_attach(&grundig_29504_451_config, &budget->i2c_adap); if (budget->dvb_frontend) { budget->dvb_frontend->ops->set_voltage = siemens_budget_set_voltage; break; @@ -499,7 +497,6 @@ static int budget_attach (struct saa7146_dev* dev, struct saa7146_pci_extension_ return 0; } - static int budget_detach (struct saa7146_dev* dev) { struct budget *budget = (struct budget*) dev->ext_priv; @@ -515,8 +512,6 @@ static int budget_detach (struct saa7146_dev* dev) return err; } - - static struct saa7146_extension budget_extension; MAKE_BUDGET_INFO(ttbs, "TT-Budget/WinTV-NOVA-S PCI", BUDGET_TT); @@ -540,8 +535,8 @@ MODULE_DEVICE_TABLE(pci, pci_tbl); static struct saa7146_extension budget_extension = { .name = "budget dvb\0", - .flags = 0, - + .flags = 0, + .module = THIS_MODULE, .pci_tbl = pci_tbl, .attach = budget_attach, @@ -549,18 +544,16 @@ static struct saa7146_extension budget_extension = { .irq_mask = MASK_10, .irq_func = ttpci_budget_irq10_handler, -}; - +}; -static int __init budget_init(void) +static int __init budget_init(void) { return saa7146_register_extension(&budget_extension); } - static void __exit budget_exit(void) { - saa7146_unregister_extension(&budget_extension); + saa7146_unregister_extension(&budget_extension); } module_init(budget_init); @@ -570,4 +563,3 @@ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, Michael Hunold, others"); MODULE_DESCRIPTION("driver for the SAA7146 based so-called " "budget PCI DVB cards by Siemens, Technotrend, Hauppauge"); - diff --git a/drivers/media/dvb/ttpci/budget.h b/drivers/media/dvb/ttpci/budget.h index 726394cab8cd..10bd41f0363b 100644 --- a/drivers/media/dvb/ttpci/budget.h +++ b/drivers/media/dvb/ttpci/budget.h @@ -29,48 +29,46 @@ struct budget_info { /* place to store all the necessary device information */ struct budget { - /* devices */ - struct dvb_device dvb_dev; - struct dvb_net dvb_net; + /* devices */ + struct dvb_device dvb_dev; + struct dvb_net dvb_net; - struct saa7146_dev *dev; + struct saa7146_dev *dev; - struct i2c_adapter i2c_adap; - struct budget_info *card; + struct i2c_adapter i2c_adap; + struct budget_info *card; - unsigned char *grabbing; - struct saa7146_pgtable pt; + unsigned char *grabbing; + struct saa7146_pgtable pt; - struct tasklet_struct fidb_tasklet; - struct tasklet_struct vpe_tasklet; + struct tasklet_struct fidb_tasklet; + struct tasklet_struct vpe_tasklet; - struct dmxdev dmxdev; - struct dvb_demux demux; + struct dmxdev dmxdev; + struct dvb_demux demux; - struct dmx_frontend hw_frontend; - struct dmx_frontend mem_frontend; + struct dmx_frontend hw_frontend; + struct dmx_frontend mem_frontend; - int fe_synced; - struct semaphore pid_mutex; + int fe_synced; + struct semaphore pid_mutex; - int ci_present; - int video_port; + int ci_present; + int video_port; - u8 tsf; - u32 ttbp; - int feeding; + u8 tsf; + u32 ttbp; + int feeding; spinlock_t feedlock; spinlock_t debilock; - struct dvb_adapter *dvb_adapter; + struct dvb_adapter *dvb_adapter; struct dvb_frontend *dvb_frontend; - void *priv; + void *priv; }; - - #define MAKE_BUDGET_INFO(x_var,x_name,x_type) \ static struct budget_info x_var ## _info = { \ .name=x_name, \ @@ -101,9 +99,9 @@ static struct saa7146_pci_extension_data x_var = { \ extern int ttpci_budget_init(struct budget *budget, struct saa7146_dev *dev, struct saa7146_pci_extension_data *info, struct module *owner); -extern int ttpci_budget_deinit (struct budget *budget); -extern void ttpci_budget_irq10_handler (struct saa7146_dev* dev, u32 *isr); -extern void ttpci_budget_set_video_port(struct saa7146_dev* dev, int video_port); +extern int ttpci_budget_deinit(struct budget *budget); +extern void ttpci_budget_irq10_handler(struct saa7146_dev *dev, u32 * isr); +extern void ttpci_budget_set_video_port(struct saa7146_dev *dev, int video_port); extern int ttpci_budget_debiread(struct budget *budget, u32 config, int addr, int count, int uselocks, int nobusyloop); extern int ttpci_budget_debiwrite(struct budget *budget, u32 config, int addr, int count, u32 value, diff --git a/drivers/media/dvb/ttpci/ttpci-eeprom.c b/drivers/media/dvb/ttpci/ttpci-eeprom.c index 0659c53f9464..e9a8457b0727 100644 --- a/drivers/media/dvb/ttpci/ttpci-eeprom.c +++ b/drivers/media/dvb/ttpci/ttpci-eeprom.c @@ -90,7 +90,7 @@ static int ttpci_eeprom_read_encodedMAC(struct i2c_adapter *adapter, u8 * encode u8 b0[] = { 0xcc }; struct i2c_msg msg[] = { - {.addr = 0x50,.flags = 0,.buf = b0,.len = 1}, + { .addr = 0x50, .flags = 0, .buf = b0, .len = 1 }, { .addr = 0x50, .flags = I2C_M_RD, .buf = encodedMAC, .len = 20 } }; @@ -144,4 +144,3 @@ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, others"); MODULE_DESCRIPTION("Decode dvb_net MAC address from EEPROM of PCI DVB cards " "made by Siemens, Technotrend, Hauppauge"); - diff --git a/drivers/media/dvb/ttusb-budget/Kconfig b/drivers/media/dvb/ttusb-budget/Kconfig index b4d3322b3b76..4aa714ab4c28 100644 --- a/drivers/media/dvb/ttusb-budget/Kconfig +++ b/drivers/media/dvb/ttusb-budget/Kconfig @@ -10,6 +10,6 @@ config DVB_TTUSB_BUDGET produced by Hauppauge, shipped under the brand name 'Nova-USB'. These devices don't have a MPEG decoder built in, so you need - an external software decoder to watch TV. + an external software decoder to watch TV. Say Y if you own such a device and want to use it. diff --git a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c index 2c5d1bd9aa50..8b0fe7b20dcd 100644 --- a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c +++ b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c @@ -33,6 +33,7 @@ #include <linux/dvb/dmx.h> #include <linux/pci.h> + /* TTUSB_HWSECTIONS: the DSP supports filtering in hardware, however, since the "muxstream" @@ -41,12 +42,12 @@ so the best way is maybe to keep TTUSB_HWSECTIONS undef'd and just parse TS data. USB bandwith will be a problem when having large datastreams, especially for dvb-net, but hey, that's not my problem. - + TTUSB_DISEQC, TTUSB_TONE: let the STC do the diseqc/tone stuff. this isn't supported at least with my TTUSB, so let it undef'd unless you want to implement another frontend. never tested. - + DEBUG: define it to > 3 for really hardcore debugging. you probably don't want this unless the device doesn't load at all. > 2 for bandwidth statistics. @@ -118,7 +119,6 @@ struct ttusb { int cc; /* MuxCounter - will increment on EVERY MUX PACKET */ /* (including stuffing. yes. really.) */ - u8 last_result[32]; struct ttusb_channel { @@ -445,7 +445,7 @@ static int ttusb_init_controller(struct ttusb *ttusb) if (memcmp(get_version + 4, "V 0.0", 5) && memcmp(get_version + 4, "V 1.1", 5) && - memcmp(get_version + 4, "V 2.1", 5)) { + memcmp(get_version + 4, "V 2.1", 5)) { printk ("%s: unknown STC version %c%c%c%c%c, please report!\n", __FUNCTION__, get_version[4], get_version[5], @@ -468,7 +468,7 @@ static int ttusb_init_controller(struct ttusb *ttusb) #ifdef TTUSB_DISEQC static int ttusb_send_diseqc(struct dvb_frontend* fe, - const struct dvb_diseqc_master_cmd *cmd) + const struct dvb_diseqc_master_cmd *cmd) { struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv; u8 b[12] = { 0xaa, ++ttusb->c, 0x18 }; @@ -1448,9 +1448,9 @@ static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *i i2c_set_adapdata(&ttusb->i2c_adap, ttusb); #ifdef I2C_ADAP_CLASS_TV_DIGITAL - ttusb->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL; + ttusb->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL; #else - ttusb->i2c_adap.class = I2C_CLASS_TV_DIGITAL; + ttusb->i2c_adap.class = I2C_CLASS_TV_DIGITAL; #endif ttusb->i2c_adap.algo = &ttusb_dec_algo; ttusb->i2c_adap.algo_data = NULL; @@ -1555,10 +1555,10 @@ static struct usb_device_id ttusb_table[] = { MODULE_DEVICE_TABLE(usb, ttusb_table); static struct usb_driver ttusb_driver = { - .name = "Technotrend/Hauppauge USB-Nova", - .probe = ttusb_probe, - .disconnect = ttusb_disconnect, - .id_table = ttusb_table, + .name = "Technotrend/Hauppauge USB-Nova", + .probe = ttusb_probe, + .disconnect = ttusb_disconnect, + .id_table = ttusb_table, }; static int __init ttusb_init(void) diff --git a/drivers/media/dvb/ttusb-dec/Kconfig b/drivers/media/dvb/ttusb-dec/Kconfig index 61fabb668175..c334526af66f 100644 --- a/drivers/media/dvb/ttusb-dec/Kconfig +++ b/drivers/media/dvb/ttusb-dec/Kconfig @@ -10,7 +10,7 @@ config DVB_TTUSB_DEC Even if these devices have a MPEG decoder built in, they transmit only compressed MPEG data over the USB bus, so you need - an external software decoder to watch TV on your computer. + an external software decoder to watch TV on your computer. This driver needs external firmware. Please use the commands "<kerneldir>/Documentation/dvb/get_dvb_firmware dec2000t", diff --git a/drivers/media/dvb/ttusb-dec/ttusb_dec.c b/drivers/media/dvb/ttusb-dec/ttusb_dec.c index 6f29185bf2f3..525d275e87e3 100644 --- a/drivers/media/dvb/ttusb-dec/ttusb_dec.c +++ b/drivers/media/dvb/ttusb-dec/ttusb_dec.c @@ -101,14 +101,14 @@ struct ttusb_dec { u16 pid[DMX_PES_OTHER]; /* USB bits */ - struct usb_device *udev; - u8 trans_count; - unsigned int command_pipe; - unsigned int result_pipe; + struct usb_device *udev; + u8 trans_count; + unsigned int command_pipe; + unsigned int result_pipe; unsigned int in_pipe; unsigned int out_pipe; enum ttusb_dec_interface interface; - struct semaphore usb_sem; + struct semaphore usb_sem; void *iso_buffer; dma_addr_t iso_dma_handle; @@ -181,7 +181,7 @@ static int ttusb_dec_send_command(struct ttusb_dec *dec, const u8 command, u8 *b; dprintk("%s\n", __FUNCTION__); - + b = kmalloc(COMMAND_PACKET_SIZE + 4, GFP_KERNEL); if (!b) return -ENOMEM; @@ -320,9 +320,9 @@ static void ttusb_dec_set_pids(struct ttusb_dec *dec) ttusb_dec_send_command(dec, 0x50, sizeof(b), b, NULL, NULL); - dvb_filter_pes2ts_init(&dec->a_pes2ts, dec->pid[DMX_PES_AUDIO], + dvb_filter_pes2ts_init(&dec->a_pes2ts, dec->pid[DMX_PES_AUDIO], ttusb_dec_audio_pes2ts_cb, dec); - dvb_filter_pes2ts_init(&dec->v_pes2ts, dec->pid[DMX_PES_VIDEO], + dvb_filter_pes2ts_init(&dec->v_pes2ts, dec->pid[DMX_PES_VIDEO], ttusb_dec_video_pes2ts_cb, dec); dec->v_pes_length = 0; dec->v_pes_postbytes = 0; @@ -345,7 +345,7 @@ static void ttusb_dec_process_pva(struct ttusb_dec *dec, u8 *pva, int length) case 0x01: { /* VideoStream */ int prebytes = pva[5] & 0x03; int postbytes = (pva[5] & 0x0c) >> 2; - u16 v_pes_payload_length; + u16 v_pes_payload_length; if (output_pva) { dec->video_filter->feed->cb.ts(pva, length, NULL, 0, @@ -353,23 +353,23 @@ static void ttusb_dec_process_pva(struct ttusb_dec *dec, u8 *pva, int length) return; } - if (dec->v_pes_postbytes > 0 && - dec->v_pes_postbytes == prebytes) { - memcpy(&dec->v_pes[dec->v_pes_length], + if (dec->v_pes_postbytes > 0 && + dec->v_pes_postbytes == prebytes) { + memcpy(&dec->v_pes[dec->v_pes_length], &pva[12], prebytes); - dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes, + dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes, dec->v_pes_length + prebytes, 1); - } + } if (pva[5] & 0x10) { - dec->v_pes[7] = 0x80; - dec->v_pes[8] = 0x05; + dec->v_pes[7] = 0x80; + dec->v_pes[8] = 0x05; dec->v_pes[9] = 0x21 | ((pva[8] & 0xc0) >> 5); dec->v_pes[10] = ((pva[8] & 0x3f) << 2) | ((pva[9] & 0xc0) >> 6); - dec->v_pes[11] = 0x01 | + dec->v_pes[11] = 0x01 | ((pva[9] & 0x3f) << 2) | ((pva[10] & 0x80) >> 6); dec->v_pes[12] = ((pva[10] & 0x7f) << 1) | @@ -379,33 +379,33 @@ static void ttusb_dec_process_pva(struct ttusb_dec *dec, u8 *pva, int length) memcpy(&dec->v_pes[14], &pva[12 + prebytes], length - 12 - prebytes); dec->v_pes_length = 14 + length - 12 - prebytes; - } else { - dec->v_pes[7] = 0x00; - dec->v_pes[8] = 0x00; + } else { + dec->v_pes[7] = 0x00; + dec->v_pes[8] = 0x00; memcpy(&dec->v_pes[9], &pva[8], length - 8); dec->v_pes_length = 9 + length - 8; - } + } - dec->v_pes_postbytes = postbytes; + dec->v_pes_postbytes = postbytes; - if (dec->v_pes[9 + dec->v_pes[8]] == 0x00 && - dec->v_pes[10 + dec->v_pes[8]] == 0x00 && - dec->v_pes[11 + dec->v_pes[8]] == 0x01) - dec->v_pes[6] = 0x84; - else - dec->v_pes[6] = 0x80; + if (dec->v_pes[9 + dec->v_pes[8]] == 0x00 && + dec->v_pes[10 + dec->v_pes[8]] == 0x00 && + dec->v_pes[11 + dec->v_pes[8]] == 0x01) + dec->v_pes[6] = 0x84; + else + dec->v_pes[6] = 0x80; - v_pes_payload_length = htons(dec->v_pes_length - 6 + - postbytes); - memcpy(&dec->v_pes[4], &v_pes_payload_length, 2); + v_pes_payload_length = htons(dec->v_pes_length - 6 + + postbytes); + memcpy(&dec->v_pes[4], &v_pes_payload_length, 2); - if (postbytes == 0) - dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes, - dec->v_pes_length, 1); + if (postbytes == 0) + dvb_filter_pes2ts(&dec->v_pes2ts, dec->v_pes, + dec->v_pes_length, 1); - break; - } + break; + } case 0x02: /* MainAudioStream */ if (output_pva) { @@ -487,7 +487,7 @@ static void ttusb_dec_process_packet(struct ttusb_dec *dec) case TTUSB_DEC_PACKET_PVA: if (dec->pva_stream_count) ttusb_dec_process_pva(dec, dec->packet, - dec->packet_payload_length); + dec->packet_payload_length); break; case TTUSB_DEC_PACKET_SECTION: @@ -513,7 +513,7 @@ static void swap_bytes(u8 *b, int length) } } -static void ttusb_dec_process_urb_frame(struct ttusb_dec * dec, u8 * b, +static void ttusb_dec_process_urb_frame(struct ttusb_dec *dec, u8 *b, int length) { swap_bytes(b, length); @@ -562,7 +562,7 @@ static void ttusb_dec_process_urb_frame(struct ttusb_dec * dec, u8 * b, TTUSB_DEC_PACKET_EMPTY; dec->packet_payload_length = 2; dec->packet_state = 7; - } else { + } else { printk("%s: unknown packet type: " "%02x%02x\n", __FUNCTION__, dec->packet[0], dec->packet[1]); @@ -598,23 +598,23 @@ static void ttusb_dec_process_urb_frame(struct ttusb_dec * dec, u8 * b, int remainder = dec->packet_payload_length - dec->packet_length; - if (length >= remainder) { + if (length >= remainder) { memcpy(dec->packet + dec->packet_length, - b, remainder); + b, remainder); dec->packet_length += remainder; - b += remainder; - length -= remainder; + b += remainder; + length -= remainder; dec->packet_state++; - } else { + } else { memcpy(&dec->packet[dec->packet_length], - b, length); + b, length); dec->packet_length += length; - length = 0; - } - - break; + length = 0; } + break; + } + case 7: { int tail = 4; @@ -676,7 +676,6 @@ static void ttusb_dec_process_urb(struct urb *urb, struct pt_regs *ptregs) for (i = 0; i < FRAMES_PER_ISO_BUF; i++) { struct usb_iso_packet_descriptor *d; - u8 *b; int length; struct urb_frame *frame; @@ -1067,7 +1066,7 @@ static int ttusb_dec_alloc_iso_urbs(struct ttusb_dec *dec) ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF * ISO_BUF_COUNT), - &dec->iso_dma_handle); + &dec->iso_dma_handle); memset(dec->iso_buffer, 0, ISO_FRAME_SIZE * (FRAMES_PER_ISO_BUF * ISO_BUF_COUNT)); @@ -1244,7 +1243,7 @@ static int ttusb_dec_init_stb(struct ttusb_dec *dec) result = ttusb_dec_boot_dsp(dec); if (result) return result; - else + else return 1; } else { /* We can't trust the USB IDs that some firmwares @@ -1273,7 +1272,7 @@ static int ttusb_dec_init_stb(struct ttusb_dec *dec) dec->can_playback = 1; return 0; - } + } } else return result; @@ -1448,17 +1447,17 @@ static int ttusb_dec_probe(struct usb_interface *intf, memset(dec, 0, sizeof(struct ttusb_dec)); switch (le16_to_cpu(id->idProduct)) { - case 0x1006: + case 0x1006: ttusb_dec_set_model(dec, TTUSB_DEC3000S); - break; + break; - case 0x1008: + case 0x1008: ttusb_dec_set_model(dec, TTUSB_DEC2000T); break; case 0x1009: ttusb_dec_set_model(dec, TTUSB_DEC2540T); - break; + break; } dec->udev = udev; @@ -1515,10 +1514,10 @@ static void ttusb_dec_disconnect(struct usb_interface *intf) dprintk("%s\n", __FUNCTION__); if (dec->active) { - ttusb_dec_exit_tasklet(dec); + ttusb_dec_exit_tasklet(dec); ttusb_dec_exit_filters(dec); - ttusb_dec_exit_usb(dec); - ttusb_dec_exit_dvb(dec); + ttusb_dec_exit_usb(dec); + ttusb_dec_exit_dvb(dec); } kfree(dec); @@ -1557,9 +1556,9 @@ static struct usb_device_id ttusb_dec_table[] = { static struct usb_driver ttusb_dec_driver = { .name = "ttusb-dec", - .probe = ttusb_dec_probe, - .disconnect = ttusb_dec_disconnect, - .id_table = ttusb_dec_table, + .probe = ttusb_dec_probe, + .disconnect = ttusb_dec_disconnect, + .id_table = ttusb_dec_table, }; static int __init ttusb_dec_init(void) @@ -1587,4 +1586,3 @@ MODULE_AUTHOR("Alex Woods <linux-dvb@giblets.org>"); MODULE_DESCRIPTION(DRIVER_NAME); MODULE_LICENSE("GPL"); MODULE_DEVICE_TABLE(usb, ttusb_dec_table); - diff --git a/include/linux/dvb/audio.h b/include/linux/dvb/audio.h index 58956c3bba52..cc314443f1c4 100644 --- a/include/linux/dvb/audio.h +++ b/include/linux/dvb/audio.h @@ -1,9 +1,9 @@ -/* +/* * audio.h * * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> * & Marcus Metzler <marcus@convergence.de> - for convergence integrated media GmbH + * for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Lesser Public License @@ -32,35 +32,35 @@ typedef enum { - AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */ - AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */ + AUDIO_SOURCE_DEMUX, /* Select the demux as the main source */ + AUDIO_SOURCE_MEMORY /* Select internal memory as the main source */ } audio_stream_source_t; -typedef enum { - AUDIO_STOPPED, /* Device is stopped */ - AUDIO_PLAYING, /* Device is currently playing */ - AUDIO_PAUSED /* Device is paused */ +typedef enum { + AUDIO_STOPPED, /* Device is stopped */ + AUDIO_PLAYING, /* Device is currently playing */ + AUDIO_PAUSED /* Device is paused */ } audio_play_state_t; typedef enum { AUDIO_STEREO, - AUDIO_MONO_LEFT, - AUDIO_MONO_RIGHT + AUDIO_MONO_LEFT, + AUDIO_MONO_RIGHT } audio_channel_select_t; -typedef struct audio_mixer { +typedef struct audio_mixer { unsigned int volume_left; unsigned int volume_right; // what else do we need? bass, pass-through, ... } audio_mixer_t; -typedef struct audio_status { +typedef struct audio_status { int AV_sync_state; /* sync audio and video? */ - int mute_state; /* audio is muted */ + int mute_state; /* audio is muted */ audio_play_state_t play_state; /* current playback state */ audio_stream_source_t stream_source; /* current stream source */ audio_channel_select_t channel_select; /* currently selected channel */ @@ -88,7 +88,7 @@ typedef uint16_t audio_attributes_t; /* 7- 6 Quantization / DRC (mpeg audio: 1=DRC exists)(lpcm: 0=16bit, */ /* 5- 4 Sample frequency fs (0=48kHz, 1=96kHz) */ /* 2- 0 number of audio channels (n+1 channels) */ - + /* for GET_CAPABILITIES and SET_FORMAT, the latter should only set one bit */ #define AUDIO_CAP_DTS 1 @@ -101,7 +101,7 @@ typedef uint16_t audio_attributes_t; #define AUDIO_CAP_SDDS 128 #define AUDIO_CAP_AC3 256 -#define AUDIO_STOP _IO('o', 1) +#define AUDIO_STOP _IO('o', 1) #define AUDIO_PLAY _IO('o', 2) #define AUDIO_PAUSE _IO('o', 3) #define AUDIO_CONTINUE _IO('o', 4) @@ -122,4 +122,3 @@ typedef uint16_t audio_attributes_t; #define AUDIO_SET_KARAOKE _IOW('o', 18, audio_karaoke_t) #endif /* _DVBAUDIO_H_ */ - diff --git a/include/linux/dvb/ca.h b/include/linux/dvb/ca.h index 026e5c35c0ab..558af0cc7692 100644 --- a/include/linux/dvb/ca.h +++ b/include/linux/dvb/ca.h @@ -1,9 +1,9 @@ -/* +/* * ca.h * * Copyright (C) 2000 Ralph Metzler <ralph@convergence.de> * & Marcus Metzler <marcus@convergence.de> - for convergence integrated media GmbH + * for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Lesser Public License @@ -88,4 +88,3 @@ typedef struct ca_pid { #define CA_SET_PID _IOW('o', 135, ca_pid_t) #endif - diff --git a/include/linux/dvb/dmx.h b/include/linux/dvb/dmx.h index 147294414fcb..ce3f829da82c 100644 --- a/include/linux/dvb/dmx.h +++ b/include/linux/dvb/dmx.h @@ -3,7 +3,7 @@ * * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> * & Ralph Metzler <ralph@convergence.de> - for convergence integrated media GmbH + * for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -31,6 +31,7 @@ #include <time.h> #endif + #define DMX_FILTER_SIZE 16 typedef enum @@ -111,10 +112,10 @@ typedef struct dmx_filter struct dmx_sct_filter_params { - __u16 pid; - dmx_filter_t filter; - __u32 timeout; - __u32 flags; + __u16 pid; + dmx_filter_t filter; + __u32 timeout; + __u32 flags; #define DMX_CHECK_CRC 1 #define DMX_ONESHOT 2 #define DMX_IMMEDIATE_START 4 @@ -124,11 +125,11 @@ struct dmx_sct_filter_params struct dmx_pes_filter_params { - __u16 pid; - dmx_input_t input; - dmx_output_t output; - dmx_pes_type_t pes_type; - __u32 flags; + __u16 pid; + dmx_input_t input; + dmx_output_t output; + dmx_pes_type_t pes_type; + __u32 flags; }; @@ -144,7 +145,7 @@ struct dmx_event typedef struct dmx_caps { __u32 caps; - int num_decoders; + int num_decoders; } dmx_caps_t; typedef enum { @@ -165,16 +166,15 @@ struct dmx_stc { }; -#define DMX_START _IO('o',41) -#define DMX_STOP _IO('o',42) -#define DMX_SET_FILTER _IOW('o',43,struct dmx_sct_filter_params) -#define DMX_SET_PES_FILTER _IOW('o',44,struct dmx_pes_filter_params) -#define DMX_SET_BUFFER_SIZE _IO('o',45) -#define DMX_GET_EVENT _IOR('o',46,struct dmx_event) +#define DMX_START _IO('o', 41) +#define DMX_STOP _IO('o', 42) +#define DMX_SET_FILTER _IOW('o', 43, struct dmx_sct_filter_params) +#define DMX_SET_PES_FILTER _IOW('o', 44, struct dmx_pes_filter_params) +#define DMX_SET_BUFFER_SIZE _IO('o', 45) +#define DMX_GET_EVENT _IOR('o', 46, struct dmx_event) #define DMX_GET_PES_PIDS _IOR('o', 47, __u16[5]) -#define DMX_GET_CAPS _IOR('o',48,dmx_caps_t) -#define DMX_SET_SOURCE _IOW('o',49,dmx_source_t) -#define DMX_GET_STC _IOWR('o',50,struct dmx_stc) +#define DMX_GET_CAPS _IOR('o', 48, dmx_caps_t) +#define DMX_SET_SOURCE _IOW('o', 49, dmx_source_t) +#define DMX_GET_STC _IOWR('o', 50, struct dmx_stc) #endif /*_DVBDMX_H_*/ - diff --git a/include/linux/dvb/frontend.h b/include/linux/dvb/frontend.h index f31b8fc781c7..d41df7047ed7 100644 --- a/include/linux/dvb/frontend.h +++ b/include/linux/dvb/frontend.h @@ -2,10 +2,10 @@ * frontend.h * * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> - * Ralph Metzler <ralph@convergence.de> - * Holger Waechtler <holger@convergence.de> - * Andre Draszik <ad@convergence.de> - * for convergence integrated media GmbH + * Ralph Metzler <ralph@convergence.de> + * Holger Waechtler <holger@convergence.de> + * Andre Draszik <ad@convergence.de> + * for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -30,54 +30,54 @@ typedef enum fe_type { - FE_QPSK, - FE_QAM, + FE_QPSK, + FE_QAM, FE_OFDM, FE_ATSC } fe_type_t; typedef enum fe_caps { - FE_IS_STUPID = 0, - FE_CAN_INVERSION_AUTO = 0x1, - FE_CAN_FEC_1_2 = 0x2, - FE_CAN_FEC_2_3 = 0x4, - FE_CAN_FEC_3_4 = 0x8, - FE_CAN_FEC_4_5 = 0x10, - FE_CAN_FEC_5_6 = 0x20, - FE_CAN_FEC_6_7 = 0x40, - FE_CAN_FEC_7_8 = 0x80, - FE_CAN_FEC_8_9 = 0x100, - FE_CAN_FEC_AUTO = 0x200, - FE_CAN_QPSK = 0x400, - FE_CAN_QAM_16 = 0x800, - FE_CAN_QAM_32 = 0x1000, - FE_CAN_QAM_64 = 0x2000, - FE_CAN_QAM_128 = 0x4000, - FE_CAN_QAM_256 = 0x8000, - FE_CAN_QAM_AUTO = 0x10000, - FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000, - FE_CAN_BANDWIDTH_AUTO = 0x40000, - FE_CAN_GUARD_INTERVAL_AUTO = 0x80000, - FE_CAN_HIERARCHY_AUTO = 0x100000, + FE_IS_STUPID = 0, + FE_CAN_INVERSION_AUTO = 0x1, + FE_CAN_FEC_1_2 = 0x2, + FE_CAN_FEC_2_3 = 0x4, + FE_CAN_FEC_3_4 = 0x8, + FE_CAN_FEC_4_5 = 0x10, + FE_CAN_FEC_5_6 = 0x20, + FE_CAN_FEC_6_7 = 0x40, + FE_CAN_FEC_7_8 = 0x80, + FE_CAN_FEC_8_9 = 0x100, + FE_CAN_FEC_AUTO = 0x200, + FE_CAN_QPSK = 0x400, + FE_CAN_QAM_16 = 0x800, + FE_CAN_QAM_32 = 0x1000, + FE_CAN_QAM_64 = 0x2000, + FE_CAN_QAM_128 = 0x4000, + FE_CAN_QAM_256 = 0x8000, + FE_CAN_QAM_AUTO = 0x10000, + FE_CAN_TRANSMISSION_MODE_AUTO = 0x20000, + FE_CAN_BANDWIDTH_AUTO = 0x40000, + FE_CAN_GUARD_INTERVAL_AUTO = 0x80000, + FE_CAN_HIERARCHY_AUTO = 0x100000, FE_CAN_8VSB = 0x200000, FE_CAN_16VSB = 0x400000, FE_NEEDS_BENDING = 0x20000000, // not supported anymore, don't use (frontend requires frequency bending) - FE_CAN_RECOVER = 0x40000000, // frontend can recover from a cable unplug automatically - FE_CAN_MUTE_TS = 0x80000000 // frontend can stop spurious TS data output + FE_CAN_RECOVER = 0x40000000, // frontend can recover from a cable unplug automatically + FE_CAN_MUTE_TS = 0x80000000 // frontend can stop spurious TS data output } fe_caps_t; struct dvb_frontend_info { char name[128]; - fe_type_t type; - __u32 frequency_min; - __u32 frequency_max; + fe_type_t type; + __u32 frequency_min; + __u32 frequency_max; __u32 frequency_stepsize; __u32 frequency_tolerance; __u32 symbol_rate_min; - __u32 symbol_rate_max; - __u32 symbol_rate_tolerance; /* ppm */ + __u32 symbol_rate_max; + __u32 symbol_rate_tolerance; /* ppm */ __u32 notifier_delay; /* DEPRECATED */ fe_caps_t caps; }; @@ -88,76 +88,76 @@ struct dvb_frontend_info { * the meaning of this struct... */ struct dvb_diseqc_master_cmd { - __u8 msg [6]; /* { framing, address, command, data [3] } */ - __u8 msg_len; /* valid values are 3...6 */ + __u8 msg [6]; /* { framing, address, command, data [3] } */ + __u8 msg_len; /* valid values are 3...6 */ }; struct dvb_diseqc_slave_reply { - __u8 msg [4]; /* { framing, data [3] } */ - __u8 msg_len; /* valid values are 0...4, 0 means no msg */ - int timeout; /* return from ioctl after timeout ms with */ -}; /* errorcode when no message was received */ + __u8 msg [4]; /* { framing, data [3] } */ + __u8 msg_len; /* valid values are 0...4, 0 means no msg */ + int timeout; /* return from ioctl after timeout ms with */ +}; /* errorcode when no message was received */ typedef enum fe_sec_voltage { - SEC_VOLTAGE_13, - SEC_VOLTAGE_18, + SEC_VOLTAGE_13, + SEC_VOLTAGE_18, SEC_VOLTAGE_OFF } fe_sec_voltage_t; typedef enum fe_sec_tone_mode { - SEC_TONE_ON, - SEC_TONE_OFF + SEC_TONE_ON, + SEC_TONE_OFF } fe_sec_tone_mode_t; typedef enum fe_sec_mini_cmd { - SEC_MINI_A, - SEC_MINI_B + SEC_MINI_A, + SEC_MINI_B } fe_sec_mini_cmd_t; typedef enum fe_status { - FE_HAS_SIGNAL = 0x01, /* found something above the noise level */ - FE_HAS_CARRIER = 0x02, /* found a DVB signal */ - FE_HAS_VITERBI = 0x04, /* FEC is stable */ - FE_HAS_SYNC = 0x08, /* found sync bytes */ - FE_HAS_LOCK = 0x10, /* everything's working... */ - FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */ - FE_REINIT = 0x40 /* frontend was reinitialized, */ -} fe_status_t; /* application is recommended to reset */ - /* DiSEqC, tone and parameters */ + FE_HAS_SIGNAL = 0x01, /* found something above the noise level */ + FE_HAS_CARRIER = 0x02, /* found a DVB signal */ + FE_HAS_VITERBI = 0x04, /* FEC is stable */ + FE_HAS_SYNC = 0x08, /* found sync bytes */ + FE_HAS_LOCK = 0x10, /* everything's working... */ + FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */ + FE_REINIT = 0x40 /* frontend was reinitialized, */ +} fe_status_t; /* application is recommended to reset */ + /* DiSEqC, tone and parameters */ typedef enum fe_spectral_inversion { - INVERSION_OFF, - INVERSION_ON, - INVERSION_AUTO + INVERSION_OFF, + INVERSION_ON, + INVERSION_AUTO } fe_spectral_inversion_t; typedef enum fe_code_rate { - FEC_NONE = 0, - FEC_1_2, - FEC_2_3, - FEC_3_4, - FEC_4_5, - FEC_5_6, - FEC_6_7, - FEC_7_8, - FEC_8_9, - FEC_AUTO + FEC_NONE = 0, + FEC_1_2, + FEC_2_3, + FEC_3_4, + FEC_4_5, + FEC_5_6, + FEC_6_7, + FEC_7_8, + FEC_8_9, + FEC_AUTO } fe_code_rate_t; typedef enum fe_modulation { - QPSK, - QAM_16, - QAM_32, - QAM_64, - QAM_128, - QAM_256, + QPSK, + QAM_16, + QAM_32, + QAM_64, + QAM_128, + QAM_256, QAM_AUTO, VSB_8, VSB_16 @@ -196,15 +196,14 @@ typedef enum fe_hierarchy { struct dvb_qpsk_parameters { - __u32 symbol_rate; /* symbol rate in Symbols per second */ - fe_code_rate_t fec_inner; /* forward error correction (see above) */ + __u32 symbol_rate; /* symbol rate in Symbols per second */ + fe_code_rate_t fec_inner; /* forward error correction (see above) */ }; - struct dvb_qam_parameters { - __u32 symbol_rate; /* symbol rate in Symbols per second */ - fe_code_rate_t fec_inner; /* forward error correction (see above) */ - fe_modulation_t modulation; /* modulation type (see above) */ + __u32 symbol_rate; /* symbol rate in Symbols per second */ + fe_code_rate_t fec_inner; /* forward error correction (see above) */ + fe_modulation_t modulation; /* modulation type (see above) */ }; struct dvb_vsb_parameters { @@ -212,19 +211,19 @@ struct dvb_vsb_parameters { }; struct dvb_ofdm_parameters { - fe_bandwidth_t bandwidth; - fe_code_rate_t code_rate_HP; /* high priority stream code rate */ - fe_code_rate_t code_rate_LP; /* low priority stream code rate */ - fe_modulation_t constellation; /* modulation type (see above) */ - fe_transmit_mode_t transmission_mode; - fe_guard_interval_t guard_interval; - fe_hierarchy_t hierarchy_information; + fe_bandwidth_t bandwidth; + fe_code_rate_t code_rate_HP; /* high priority stream code rate */ + fe_code_rate_t code_rate_LP; /* low priority stream code rate */ + fe_modulation_t constellation; /* modulation type (see above) */ + fe_transmit_mode_t transmission_mode; + fe_guard_interval_t guard_interval; + fe_hierarchy_t hierarchy_information; }; struct dvb_frontend_parameters { __u32 frequency; /* (absolute) frequency in Hz for QAM/OFDM/ATSC */ - /* intermediate frequency in kHz for QPSK */ + /* intermediate frequency in kHz for QPSK */ fe_spectral_inversion_t inversion; union { struct dvb_qpsk_parameters qpsk; @@ -242,29 +241,27 @@ struct dvb_frontend_event { -#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info) +#define FE_GET_INFO _IOR('o', 61, struct dvb_frontend_info) #define FE_DISEQC_RESET_OVERLOAD _IO('o', 62) #define FE_DISEQC_SEND_MASTER_CMD _IOW('o', 63, struct dvb_diseqc_master_cmd) #define FE_DISEQC_RECV_SLAVE_REPLY _IOR('o', 64, struct dvb_diseqc_slave_reply) #define FE_DISEQC_SEND_BURST _IO('o', 65) /* fe_sec_mini_cmd_t */ -#define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */ -#define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */ +#define FE_SET_TONE _IO('o', 66) /* fe_sec_tone_mode_t */ +#define FE_SET_VOLTAGE _IO('o', 67) /* fe_sec_voltage_t */ #define FE_ENABLE_HIGH_LNB_VOLTAGE _IO('o', 68) /* int */ -#define FE_READ_STATUS _IOR('o', 69, fe_status_t) -#define FE_READ_BER _IOR('o', 70, __u32) +#define FE_READ_STATUS _IOR('o', 69, fe_status_t) +#define FE_READ_BER _IOR('o', 70, __u32) #define FE_READ_SIGNAL_STRENGTH _IOR('o', 71, __u16) -#define FE_READ_SNR _IOR('o', 72, __u16) +#define FE_READ_SNR _IOR('o', 72, __u16) #define FE_READ_UNCORRECTED_BLOCKS _IOR('o', 73, __u32) -#define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters) -#define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters) -#define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) +#define FE_SET_FRONTEND _IOW('o', 76, struct dvb_frontend_parameters) +#define FE_GET_FRONTEND _IOR('o', 77, struct dvb_frontend_parameters) +#define FE_GET_EVENT _IOR('o', 78, struct dvb_frontend_event) #define FE_DISHNETWORK_SEND_LEGACY_CMD _IO('o', 80) /* unsigned int */ - #endif /*_DVBFRONTEND_H_*/ - diff --git a/include/linux/dvb/net.h b/include/linux/dvb/net.h index c14101491ac9..5be474bf0d2b 100644 --- a/include/linux/dvb/net.h +++ b/include/linux/dvb/net.h @@ -1,9 +1,9 @@ -/* +/* * net.h * * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> * & Ralph Metzler <ralph@convergence.de> - for convergence integrated media GmbH + * for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -30,15 +30,15 @@ struct dvb_net_if { __u16 pid; __u16 if_num; - __u8 feedtype; + __u8 feedtype; #define DVB_NET_FEEDTYPE_MPE 0 /* multi protocol encapsulation */ #define DVB_NET_FEEDTYPE_ULE 1 /* ultra lightweight encapsulation */ }; -#define NET_ADD_IF _IOWR('o', 52, struct dvb_net_if) -#define NET_REMOVE_IF _IO('o', 53) -#define NET_GET_IF _IOWR('o', 54, struct dvb_net_if) +#define NET_ADD_IF _IOWR('o', 52, struct dvb_net_if) +#define NET_REMOVE_IF _IO('o', 53) +#define NET_GET_IF _IOWR('o', 54, struct dvb_net_if) /* binary compatibility cruft: */ diff --git a/include/linux/dvb/osd.h b/include/linux/dvb/osd.h index d236deac80f1..0e1973d54a6b 100644 --- a/include/linux/dvb/osd.h +++ b/include/linux/dvb/osd.h @@ -1,9 +1,9 @@ -/* +/* * osd.h * * Copyright (C) 2001 Ralph Metzler <ralph@convergence.de> * & Marcus Metzler <marcus@convergence.de> - for convergence integrated media GmbH + * for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Lesser Public License @@ -93,7 +93,7 @@ typedef enum { // TODO: remove "test" in final version OSD_Text, // (x0,y0,size,color,text) OSD_SetWindow, // (x0) set window with number 0<x0<8 as current - OSD_MoveWindow, // move current window to (x0, y0) + OSD_MoveWindow, // move current window to (x0, y0) OSD_OpenRaw, // Open other types of OSD windows } OSD_Command; @@ -138,8 +138,7 @@ typedef struct osd_cap_s { } osd_cap_t; -#define OSD_SEND_CMD _IOW('o', 160, osd_cmd_t) +#define OSD_SEND_CMD _IOW('o', 160, osd_cmd_t) #define OSD_GET_CAPABILITY _IOR('o', 161, osd_cap_t) #endif - diff --git a/include/linux/dvb/version.h b/include/linux/dvb/version.h index 624c40e5df59..6183c9c4849e 100644 --- a/include/linux/dvb/version.h +++ b/include/linux/dvb/version.h @@ -27,4 +27,3 @@ #define DVB_API_VERSION_MINOR 1 #endif /*_DVBVERSION_H_*/ - diff --git a/include/linux/dvb/video.h b/include/linux/dvb/video.h index 2ed5d7bc4cbc..941045e9ab89 100644 --- a/include/linux/dvb/video.h +++ b/include/linux/dvb/video.h @@ -1,9 +1,9 @@ -/* +/* * video.h * * Copyright (C) 2000 Marcus Metzler <marcus@convergence.de> * & Ralph Metzler <ralph@convergence.de> - for convergence integrated media GmbH + * for convergence integrated media GmbH * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -35,25 +35,25 @@ typedef enum { - VIDEO_FORMAT_4_3, /* Select 4:3 format */ + VIDEO_FORMAT_4_3, /* Select 4:3 format */ VIDEO_FORMAT_16_9, /* Select 16:9 format. */ VIDEO_FORMAT_221_1 /* 2.21:1 */ } video_format_t; typedef enum { - VIDEO_SYSTEM_PAL, - VIDEO_SYSTEM_NTSC, - VIDEO_SYSTEM_PALN, - VIDEO_SYSTEM_PALNc, - VIDEO_SYSTEM_PALM, - VIDEO_SYSTEM_NTSC60, + VIDEO_SYSTEM_PAL, + VIDEO_SYSTEM_NTSC, + VIDEO_SYSTEM_PALN, + VIDEO_SYSTEM_PALNc, + VIDEO_SYSTEM_PALM, + VIDEO_SYSTEM_NTSC60, VIDEO_SYSTEM_PAL60, VIDEO_SYSTEM_PALM60 } video_system_t; -typedef enum { +typedef enum { VIDEO_PAN_SCAN, /* use pan and scan format */ VIDEO_LETTER_BOX, /* use letterbox format */ VIDEO_CENTER_CUT_OUT /* use center cut out format */ @@ -66,35 +66,35 @@ typedef struct { } video_size_t; typedef enum { - VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */ - VIDEO_SOURCE_MEMORY /* If this source is selected, the stream - comes from the user through the write - system call */ + VIDEO_SOURCE_DEMUX, /* Select the demux as the main source */ + VIDEO_SOURCE_MEMORY /* If this source is selected, the stream + comes from the user through the write + system call */ } video_stream_source_t; typedef enum { - VIDEO_STOPPED, /* Video is stopped */ - VIDEO_PLAYING, /* Video is currently playing */ - VIDEO_FREEZED /* Video is freezed */ -} video_play_state_t; + VIDEO_STOPPED, /* Video is stopped */ + VIDEO_PLAYING, /* Video is currently playing */ + VIDEO_FREEZED /* Video is freezed */ +} video_play_state_t; -struct video_event { - int32_t type; -#define VIDEO_EVENT_SIZE_CHANGED 1 +struct video_event { + int32_t type; +#define VIDEO_EVENT_SIZE_CHANGED 1 #define VIDEO_EVENT_FRAME_RATE_CHANGED 2 time_t timestamp; - union { + union { video_size_t size; unsigned int frame_rate; /* in frames per 1000sec */ - } u; + } u; }; -struct video_status { +struct video_status { int video_blank; /* blank video on freeze? */ - video_play_state_t play_state; /* current state of playback */ + video_play_state_t play_state; /* current state of playback */ video_stream_source_t stream_source; /* current source (demux/memory) */ video_format_t video_format; /* current aspect ratio of stream*/ video_displayformat_t display_format;/* selected cropping mode */ @@ -103,11 +103,11 @@ struct video_status { struct video_still_picture { char __user *iFrame; /* pointer to a single iframe in memory */ - int32_t size; + int32_t size; }; -typedef +typedef struct video_highlight { int active; /* 1=show highlight, 0=hide highlight */ uint8_t contrast1; /* 7- 4 Pattern pixel contrast */ @@ -118,7 +118,7 @@ struct video_highlight { /* 3- 0 Background pixel color */ uint8_t color2; /* 7- 4 Emphasis pixel-2 color */ /* 3- 0 Emphasis pixel-1 color */ - uint32_t ypos; /* 23-22 auto action mode */ + uint32_t ypos; /* 23-22 auto action mode */ /* 21-12 start y */ /* 9- 0 end y */ uint32_t xpos; /* 23-22 button color number */ @@ -160,21 +160,21 @@ typedef uint16_t video_attributes_t; /* bit definitions for capabilities: */ /* can the hardware decode MPEG1 and/or MPEG2? */ -#define VIDEO_CAP_MPEG1 1 +#define VIDEO_CAP_MPEG1 1 #define VIDEO_CAP_MPEG2 2 /* can you send a system and/or program stream to video device? - (you still have to open the video and the audio device but only + (you still have to open the video and the audio device but only send the stream to the video device) */ #define VIDEO_CAP_SYS 4 #define VIDEO_CAP_PROG 8 -/* can the driver also handle SPU, NAVI and CSS encoded data? +/* can the driver also handle SPU, NAVI and CSS encoded data? (CSS API is not present yet) */ #define VIDEO_CAP_SPU 16 #define VIDEO_CAP_NAVI 32 #define VIDEO_CAP_CSS 64 -#define VIDEO_STOP _IO('o', 21) +#define VIDEO_STOP _IO('o', 21) #define VIDEO_PLAY _IO('o', 22) #define VIDEO_FREEZE _IO('o', 23) #define VIDEO_CONTINUE _IO('o', 24) @@ -201,4 +201,3 @@ typedef uint16_t video_attributes_t; #define VIDEO_GET_FRAME_RATE _IOR('o', 56, unsigned int) #endif /*_DVBVIDEO_H_*/ - diff --git a/include/media/saa7146.h b/include/media/saa7146.h index b9b19888aeb9..3dfb8d670eb7 100644 --- a/include/media/saa7146.h +++ b/include/media/saa7146.h @@ -65,7 +65,7 @@ struct saa7146_vv; /* saa7146 page table */ struct saa7146_pgtable { unsigned int size; - u32 *cpu; + u32 *cpu; dma_addr_t dma; /* used for offsets for u,v planes for planar capture modes */ unsigned long offset; @@ -93,20 +93,20 @@ struct saa7146_extension #define SAA7146_USE_I2C_IRQ 0x1 #define SAA7146_I2C_SHORT_DELAY 0x2 int flags; - + /* pairs of subvendor and subdevice ids for supported devices, last entry 0xffff, 0xfff */ struct module *module; struct pci_driver driver; struct pci_device_id *pci_tbl; - + /* extension functions */ int (*probe)(struct saa7146_dev *); int (*attach)(struct saa7146_dev *, struct saa7146_pci_extension_data *); int (*detach)(struct saa7146_dev*); u32 irq_mask; /* mask to indicate, which irq-events are handled by the extension */ - void (*irq_func)(struct saa7146_dev*, u32* irq_mask); + void (*irq_func)(struct saa7146_dev*, u32* irq_mask); }; struct saa7146_dma @@ -122,18 +122,18 @@ struct saa7146_dev struct list_head item; /* different device locks */ - spinlock_t slock; - struct semaphore lock; + spinlock_t slock; + struct semaphore lock; - unsigned char __iomem *mem; /* pointer to mapped IO memory */ + unsigned char __iomem *mem; /* pointer to mapped IO memory */ int revision; /* chip revision; needed for bug-workarounds*/ /* pci-device & irq stuff*/ char name[32]; struct pci_dev *pci; u32 int_todo; - spinlock_t int_slock; - + spinlock_t int_slock; + /* extension handling */ struct saa7146_extension *ext; /* indicates if handled by extension */ void *ext_priv; /* pointer for extension private use (most likely some private data) */ @@ -149,7 +149,7 @@ struct saa7146_dev struct saa7146_dma d_i2c; /* pointer to i2c memory */ wait_queue_head_t i2c_wq; int i2c_op; - + /* memories */ struct saa7146_dma d_rps0; struct saa7146_dma d_rps1; @@ -157,7 +157,7 @@ struct saa7146_dev /* from saa7146_i2c.c */ int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate); -int saa7146_i2c_transfer(struct saa7146_dev *saa, const struct i2c_msg *msgs, int num, int retries); +int saa7146_i2c_transfer(struct saa7146_dev *saa, const struct i2c_msg *msgs, int num, int retries); /* from saa7146_core.c */ extern struct list_head saa7146_devices; @@ -178,8 +178,8 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop); /* some i2c constants */ #define SAA7146_I2C_TIMEOUT 100 /* i2c-timeout-value in ms */ -#define SAA7146_I2C_RETRIES 3 /* how many times shall we retry an i2c-operation? */ -#define SAA7146_I2C_DELAY 5 /* time we wait after certain i2c-operations */ +#define SAA7146_I2C_RETRIES 3 /* how many times shall we retry an i2c-operation? */ +#define SAA7146_I2C_DELAY 5 /* time we wait after certain i2c-operations */ /* unsorted defines */ #define ME1 0x0000000800 @@ -272,7 +272,7 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop); #define MASK_W1 0xffff0000 /* Mask value for word 1 */ #define MASK_PA 0xfffffffc /* Mask value for physical address */ -#define MASK_PR 0xfffffffe /* Mask value for protection register */ +#define MASK_PR 0xfffffffe /* Mask value for protection register */ #define MASK_ER 0xffffffff /* Mask value for the entire register */ #define MASK_NONE 0x00000000 /* No mask */ @@ -295,7 +295,7 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop); #define BASE_ODD3 0x30 /* Video DMA 3 registers */ #define BASE_EVEN3 0x34 #define PROT_ADDR3 0x38 -#define PITCH3 0x3C +#define PITCH3 0x3C #define BASE_PAGE3 0x40 /* Video DMA 3 base page */ #define NUM_LINE_BYTE3 0x44 @@ -323,15 +323,15 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop); #define DEBI_CONFIG 0x7C #define DEBI_COMMAND 0x80 #define DEBI_PAGE 0x84 -#define DEBI_AD 0x88 +#define DEBI_AD 0x88 -#define I2C_TRANSFER 0x8C -#define I2C_STATUS 0x90 +#define I2C_TRANSFER 0x8C +#define I2C_STATUS 0x90 #define BASE_A1_IN 0x94 /* Audio 1 input DMA */ #define PROT_A1_IN 0x98 #define PAGE_A1_IN 0x9C - + #define BASE_A1_OUT 0xA0 /* Audio 1 output DMA */ #define PROT_A1_OUT 0xA4 #define PAGE_A1_OUT 0xA8 @@ -371,12 +371,12 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop); #define RPS_ADDR0 0x104 /* RPS task 0 address register */ #define RPS_ADDR1 0x108 /* RPS task 1 address register */ -#define ISR 0x10C /* Interrupt status register */ +#define ISR 0x10C /* Interrupt status register */ #define PSR 0x110 /* Primary status register */ #define SSR 0x114 /* Secondary status register */ #define EC1R 0x118 /* Event counter set 1 register */ -#define EC2R 0x11C /* Event counter set 2 register */ +#define EC2R 0x11C /* Event counter set 2 register */ #define PCI_VDP1 0x120 /* Video DMA pointer of FIFO 1 */ #define PCI_VDP2 0x124 /* Video DMA pointer of FIFO 2 */ @@ -450,4 +450,3 @@ int saa7146_wait_for_debi_done(struct saa7146_dev *dev, int nobusyloop); #define SAA7146_I2C_BUS_BIT_RATE_60 (0x300) #endif - diff --git a/include/media/saa7146_vv.h b/include/media/saa7146_vv.h index eddf16aa3e8e..f3aa24f8131c 100644 --- a/include/media/saa7146_vv.h +++ b/include/media/saa7146_vv.h @@ -31,7 +31,7 @@ struct saa7146_video_dma { struct saa7146_format { char *name; - u32 pixelformat; + u32 pixelformat; u32 trans; u8 depth; u8 flags; @@ -45,10 +45,10 @@ struct saa7146_standard int v_offset; /* number of lines of vertical offset before processing */ int v_field; /* number of lines in a field for HPS to process */ - + int h_offset; /* horizontal offset of processing window */ int h_pixels; /* number of horizontal pixels to process */ - + int v_max_out; int h_max_out; }; @@ -90,7 +90,7 @@ struct saa7146_fh { /* video overlay */ struct saa7146_overlay ov; - + /* video capture */ struct videobuf_queue video_q; struct v4l2_pix_format video_fmt; @@ -139,11 +139,11 @@ struct saa7146_vv all opens? currently, we do the latter, like all other drivers do... */ struct saa7146_standard *standard; - + int vflip; - int hflip; - int current_hps_source; - int current_hps_sync; + int hflip; + int current_hps_source; + int current_hps_sync; struct saa7146_dma d_clipping; /* pointer to clipping memory */ @@ -157,7 +157,7 @@ struct saa7146_vv struct saa7146_extension_ioctls { unsigned int cmd; - int flags; + int flags; }; /* flags */ @@ -166,16 +166,16 @@ struct saa7146_extension_ioctls struct saa7146_ext_vv { /* informations about the video capabilities of the device */ - int inputs; - int audios; + int inputs; + int audios; u32 capabilities; - int flags; + int flags; /* additionally supported transmission standards */ struct saa7146_standard *stds; int num_stds; int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *); - + struct saa7146_extension_ioctls *ioctls; int (*ioctl)(struct saa7146_fh*, unsigned int cmd, void *arg); }; @@ -264,7 +264,7 @@ void saa7146_res_free(struct saa7146_fh *fh, unsigned int bits); /* misc defines */ #define SAA7146_NO_SWAP (0x0) -#define SAA7146_TWO_BYTE_SWAP (0x1) +#define SAA7146_TWO_BYTE_SWAP (0x1) #define SAA7146_FOUR_BYTE_SWAP (0x2) #endif |
