Solo6x10 driver
Hi,
I'm currently working on the SOLO6x10 driver (using SOLO 6010 and 6110 cards), with i686 and MIPS (big-endian) based systems. I'm attaching a few patches.
Signature · 4 lines
Krzysztof Halasa Research Institute for Automation and Measurements Al. Jerozolimskie 202, 02-486 Warsaw, Poland
PATCH 1/7 Solo6x10: accept WxH >= screen dimentions.
This makes it possible to request full resolution (704x576 or 704x480) independently of the color system used (PAL or NTSC).
drivers/staging/solo6x10/solo6010-v4l2-enc.c +8 -4
@@ -1034,13 +1034,17 @@ static int solo_enc_try_fmt_cap(struct file *file, void *priv,if (pix->width != solo_enc->width || pix->height != solo_enc->height)return -EBUSY ; - }else if (!(pix->width == solo_dev->video_hsize && - pix->height == solo_dev->video_vsize <<1 ) && - !(pix->width == solo_dev->video_hsize >>1 && - pix->height == solo_dev->video_vsize)) { + } + +if (pix->width < solo_dev->video_hsize || + pix->height < solo_dev->video_vsize <<1 ) {/* Default to CIF 1/2 size */ pix->width = solo_dev->video_hsize >>1 ; pix->height = solo_dev->video_vsize; + }else { +/* Full frame */ + pix->width = solo_dev->video_hsize; + pix->height = solo_dev->video_vsize <<1 ; }if (pix->field ==V4L2_FIELD_ANY )
Signature · 4 lines
Krzysztof Halasa Research Institute for Automation and Measurements Al. Jerozolimskie 202, 02-486 Warsaw, Poland
PATCH 2/7 Solo6x10: Build MPEG4 headers on the fly.
In reply to Krzysztof HałasaThis will make them maintainable. Also, it now works on big-endian systems.
This is the slow path (done every 1+ second, per channel) so I guess there is no need to cache the results.
I have removed CBR-related bits from the MPEG4 VOL header since we can't do CBR (at least yet).
drivers/staging/solo6x10/solo6010-registers.h +0 -40
@@ -402,46 +402,6 @@#define SOLO_DCT_INTERVAL (n) ((n)<<16)#define SOLO_VE_STATE (n) (0x0640+((n)*4)) -struct videnc_status { -union { -u32 status0; -struct { -u32 mp4_enc_code_size:20 , sad_motion:1 , vid_motion:1 , - vop_type:2 , video_channel:5 , source_field_idx:1 , - interlace:1 , progressive:1 ; - } status0_st; - }; -union { -u32 status1; -struct { -u32 vsize:8 , hsize:8 , last_queue:4 , foo1:8 , scale:4 ; - } status1_st; - }; -union { -u32 status4; -struct { -u32 jpeg_code_size:20 , interval:10 , foo1:2 ; - } status4_st; - }; -union { -u32 status9; -struct { -u32 channel:5 , foo1:27 ; - } status9_st; - }; -union { -u32 status10; -struct { -u32 mp4_code_size:20 , foo:12 ; - } status10_st; - }; -union { -u32 status11; -struct { -u32 last_queue:8 , foo1:24 ; - } status11_st; - }; -};#define SOLO_VE_JPEG_QP_TBL 0x0670#define SOLO_VE_JPEG_QP_CH_L 0x0674
drivers/staging/solo6x10/solo6010-v4l2-enc.c +122 -87
262 lines not on this page · raw message
Signature · 4 lines
Krzysztof Halasa Research Institute for Automation and Measurements Al. Jerozolimskie 202, 02-486 Warsaw, Poland
PATCH 3/7 Solo6x10: Align MPEG video on 8-byte boundary instead of 32-byte.
In reply to Krzysztof HałasaSolo-6110 only supports 8-byte alignment anyway.
drivers/staging/solo6x10/solo6010-enc.c +0 -1
@@ -176,7 +176,6 @@ static void solo_mp4e_config(struct solo6010_dev *solo_dev) SOLO_VE_BLOCK_BASE(SOLO_MP4E_EXT_ADDR(solo_dev) >> 16));solo_reg_write (solo_dev,SOLO_VE_CFG1 , -SOLO_VE_BYTE_ALIGN (2 ) |SOLO_VE_INSERT_INDEX |SOLO_VE_MOTION_MODE (0 ));solo_reg_write (solo_dev,SOLO_VE_WMRK_POLY ,0 );
drivers/staging/solo6x10/solo6010-v4l2-enc.c +1 -1
@@ -754,7 +754,7 @@ void solo_enc_v4l2_isr(struct solo6010_dev *solo_dev) cur_q = ((solo_reg_read (solo_dev,SOLO_VE_STATE (11 )) &0xF ) +1 ) %MP4_QS ; - reg_mpeg_size = ((solo_reg_read (solo_dev,SOLO_VE_STATE (0 )) &0xFFFFF ) +64 +32 ) & ~31 ; + reg_mpeg_size = ((solo_reg_read (solo_dev,SOLO_VE_STATE (0 )) &0xFFFFF ) +64 +8 ) & ~7 ;while (solo_dev->enc_idx != cur_q) { mpeg_current = solo_reg_read(solo_dev,
Signature · 4 lines
Krzysztof Halasa Research Institute for Automation and Measurements Al. Jerozolimskie 202, 02-486 Warsaw, Poland
PATCH 4/7 Solo6x10: Add support for SOLO6110 chip.
In reply to Krzysztof Hałasadrivers/staging/solo6x10/solo6010-core.c +36 -4
@@ -136,6 +136,7 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev,int ret;int sdram;u8 chip_id; +u32 reg; solo_dev =kzalloc (sizeof (*solo_dev),GFP_KERNEL );if (solo_dev ==NULL )
@@ -181,14 +182,43 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, solo_dev->nr_ext =1 ; } + solo_dev->flags = id->driver_data; +/* Disable all interrupts to start */ solo6010_irq_off (solo_dev, ~0 ); + reg =SOLO_SYS_CFG_SDRAM64BIT ;/* Initial global settings */ -solo_reg_write (solo_dev,SOLO_SYS_CFG ,SOLO_SYS_CFG_SDRAM64BIT | -SOLO_SYS_CFG_INPUTDIV (25 ) | -SOLO_SYS_CFG_FEEDBACKDIV ((SOLO_CLOCK_MHZ *2 ) -2 ) | -SOLO_SYS_CFG_OUTDIV (3 )); +if (!(solo_dev->flags &FLAGS_6110 )) + reg |=SOLO6010_SYS_CFG_INPUTDIV (25 ) | +SOLO6010_SYS_CFG_FEEDBACKDIV ((SOLO_CLOCK_MHZ *2 ) -2 ) | +SOLO6010_SYS_CFG_OUTDIV (3 ); +solo_reg_write (solo_dev,SOLO_SYS_CFG , reg); + +if (solo_dev->flags &FLAGS_6110 ) { +u32 sys_clock_MHz =SOLO_CLOCK_MHZ ; +u32 pll_DIVQ; +u32 pll_DIVF; + +if (sys_clock_MHz <125 ) { + pll_DIVQ =3 ; + pll_DIVF = (sys_clock_MHz *4 ) /3 ; + }else { + pll_DIVQ =2 ; + pll_DIVF = (sys_clock_MHz *2 ) /3 ; + } + +solo_reg_write (solo_dev,SOLO6110_PLL_CONFIG , +SOLO6110_PLL_RANGE_5_10MHZ | +SOLO6110_PLL_DIVR (9 ) | +SOLO6110_PLL_DIVQ_EXP (pll_DIVQ) | +SOLO6110_PLL_DIVF (pll_DIVF) |SOLO6110_PLL_FSEN ); +mdelay (1 );// PLL Locking time (1ms) + +solo_reg_write (solo_dev,SOLO_DMA_CTRL1 ,3 <<8 );/* ? */ + }else +solo_reg_write (solo_dev,SOLO_DMA_CTRL1 ,1 <<8 );/* ? */ +solo_reg_write (solo_dev,SOLO_TIMER_CLOCK_NUM ,SOLO_CLOCK_MHZ -1 );/* PLL locking time of 1ms */
@@ -264,6 +294,8 @@ static void __devexit solo6010_pci_remove(struct pci_dev *pdev)static struct pci_device_id solo6010_id_table[] = {/* 6010 based cards */ {PCI_DEVICE (PCI_VENDOR_ID_SOFTLOGIC ,PCI_DEVICE_ID_SOLO6010 )}, + {PCI_DEVICE (PCI_VENDOR_ID_SOFTLOGIC ,PCI_DEVICE_ID_SOLO6110 ), + .driver_data =FLAGS_6110 }, {PCI_DEVICE (PCI_VENDOR_ID_BLUECHERRY ,PCI_DEVICE_ID_NEUSOLO_4 )}, {PCI_DEVICE (PCI_VENDOR_ID_BLUECHERRY ,PCI_DEVICE_ID_NEUSOLO_9 )}, {PCI_DEVICE (PCI_VENDOR_ID_BLUECHERRY ,PCI_DEVICE_ID_NEUSOLO_16 )},
drivers/staging/solo6x10/solo6010-enc.c +19 -8
@@ -155,19 +155,26 @@ int solo_osd_print(struct solo_enc_dev *solo_enc)static void solo_jpeg_config (struct solo6010_dev *solo_dev) { -solo_reg_write (solo_dev,SOLO_VE_JPEG_QP_TBL , - (2 <<24 ) | (2 <<16 ) | (2 <<8 ) | (2 <<0 )); +u32 reg; +if (solo_dev->flags &FLAGS_6110 ) + reg = (4 <<24 ) | (3 <<16 ) | (2 <<8 ) | (1 <<0 ); +else + reg = (2 <<24 ) | (2 <<16 ) | (2 <<8 ) | (2 <<0 ); +solo_reg_write (solo_dev,SOLO_VE_JPEG_QP_TBL , reg);solo_reg_write (solo_dev,SOLO_VE_JPEG_QP_CH_L ,0 );solo_reg_write (solo_dev,SOLO_VE_JPEG_QP_CH_H ,0 );solo_reg_write (solo_dev,SOLO_VE_JPEG_CFG , (SOLO_JPEG_EXT_SIZE (solo_dev) &0xffff0000 ) | ((SOLO_JPEG_EXT_ADDR (solo_dev) >>16 ) &0x0000ffff ));solo_reg_write (solo_dev,SOLO_VE_JPEG_CTRL ,0xffffffff ); +/* que limit, samp limit, pos limit */ +solo_reg_write (solo_dev,0x0688 , (0 <<16 ) | (30 <<8 ) |60 ); }static void solo_mp4e_config (struct solo6010_dev *solo_dev) {int i; +u32 reg;/* We can only use VE_INTR_CTRL(0) if we want to support mjpeg */ solo_reg_write(solo_dev, SOLO_VE_CFG0,
@@ -184,17 +191,21 @@ static void solo_mp4e_config(struct solo6010_dev *solo_dev)solo_reg_write (solo_dev,SOLO_VE_ENCRYP_POLY ,0 );solo_reg_write (solo_dev,SOLO_VE_ENCRYP_INIT ,0 ); -solo_reg_write (solo_dev,SOLO_VE_ATTR , -SOLO_VE_LITTLE_ENDIAN | -SOLO_COMP_ATTR_FCODE (1 ) | -SOLO_COMP_TIME_INC (0 ) | -SOLO_COMP_TIME_WIDTH (15 ) | -SOLO_DCT_INTERVAL (36 /4 )); + reg =SOLO_VE_LITTLE_ENDIAN |SOLO_COMP_ATTR_FCODE (1 ) | +SOLO_COMP_TIME_INC (0 ) |SOLO_COMP_TIME_WIDTH (15 ); +if (solo_dev->flags &FLAGS_6110 ) + reg |=SOLO_DCT_INTERVAL (10 ); +else + reg |=SOLO_DCT_INTERVAL (36 /4 ); +solo_reg_write (solo_dev,SOLO_VE_ATTR , reg);for (i =0 ; i < solo_dev->nr_chans; i++)solo_reg_write (solo_dev,SOLO_VE_CH_REF_BASE (i), (SOLO_EREF_EXT_ADDR (solo_dev) + (i *SOLO_EREF_EXT_SIZE )) >>16 ); + +if (solo_dev->flags &FLAGS_6110 ) +solo_reg_write (solo_dev,0x0634 ,0x00040008 );/* ? */ }int solo_enc_init (struct solo6010_dev *solo_dev)
drivers/staging/solo6x10/solo6010-p2m.c +8 -8
@@ -66,18 +66,18 @@ int solo_p2m_dma_t(struct solo6010_dev *solo_dev, u8 id, int wr,void solo_p2m_push_desc (struct p2m_desc *desc,int wr,dma_addr_t dma_addr,u32 ext_addr,u32 size,int repeat,u32 ext_size) { - desc->ta = dma_addr; - desc->fa = ext_addr; + desc->ta =cpu_to_le32 (dma_addr); + desc->fa =cpu_to_le32 (ext_addr); - desc->ext =SOLO_P2M_COPY_SIZE (size >>2 ); - desc->ctrl =SOLO_P2M_BURST_SIZE (SOLO_P2M_BURST_256 ) | - (wr ?SOLO_P2M_WRITE :0 ) |SOLO_P2M_TRANS_ON ; + desc->ext =cpu_to_le32 (SOLO_P2M_COPY_SIZE (size >>2 )); + desc->ctrl =cpu_to_le32 (SOLO_P2M_BURST_SIZE (SOLO_P2M_BURST_256 ) | + (wr ?SOLO_P2M_WRITE :0 ) |SOLO_P2M_TRANS_ON );/* Ext size only matters when we're repeating */ if (repeat) { - desc->ext |=SOLO_P2M_EXT_INC (ext_size >>2 ); - desc->ctrl |=SOLO_P2M_PCI_INC (size >>2 ) | -SOLO_P2M_REPEAT (repeat); + desc->ext |=cpu_to_le32 (SOLO_P2M_EXT_INC (ext_size >>2 )); + desc->ctrl |=cpu_to_le32 (SOLO_P2M_PCI_INC (size >>2 ) | +SOLO_P2M_REPEAT (repeat)); } }
drivers/staging/solo6x10/solo6010-registers.h +30 -10
@@ -24,16 +24,16 @@/* Global 6010 system configuration */ #define SOLO_SYS_CFG 0x0000 -#define SOLO_SYS_CFG_FOUT_EN 0x00000001 -#define SOLO_SYS_CFG_PLL_BYPASS 0x00000002 -#define SOLO_SYS_CFG_PLL_PWDN 0x00000004 -#define SOLO_SYS_CFG_OUTDIV (__n) (((__n) & 0x003) << 3) -#define SOLO_SYS_CFG_FEEDBACKDIV (__n) (((__n) & 0x1ff) << 5) -#define SOLO_SYS_CFG_INPUTDIV (__n) (((__n) & 0x01f) << 14) +#define SOLO6010_SYS_CFG_FOUT_EN 0x00000001/* 6010 only */ +#define SOLO6010_SYS_CFG_PLL_BYPASS 0x00000002/* 6010 only */ +#define SOLO6010_SYS_CFG_PLL_PWDN 0x00000004/* 6010 only */ +#define SOLO6010_SYS_CFG_OUTDIV (__n) (((__n) & 0x003) << 3)/* 6010 only */ +#define SOLO6010_SYS_CFG_FEEDBACKDIV (__n) (((__n) & 0x1ff) << 5)/* 6010 only */ +#define SOLO6010_SYS_CFG_INPUTDIV (__n) (((__n) & 0x01f) << 14)/* 6010 only */ #define SOLO_SYS_CFG_CLOCK_DIV 0x00080000#define SOLO_SYS_CFG_NCLK_DELAY (__n) (((__n) & 0x003) << 24)#define SOLO_SYS_CFG_PCLK_DELAY (__n) (((__n) & 0x00f) << 26) -#define SOLO_SYS_CFG_SDRAM64BIT 0x40000000 +#define SOLO_SYS_CFG_SDRAM64BIT 0x40000000/* 6110: must be set */ #define SOLO_SYS_CFG_RESET 0x80000000#define SOLO_DMA_CTRL 0x0004
@@ -45,6 +45,7 @@#define SOLO_DMA_CTRL_READ_DATA_SELECT (1<<3)#define SOLO_DMA_CTRL_READ_CLK_SELECT (1<<2)#define SOLO_DMA_CTRL_LATENCY (n) ((n)<<0) +#define SOLO_DMA_CTRL1 0x0008#define SOLO_SYS_VCLK 0x000C#define SOLO_VCLK_INVERT (1<<22)
@@ -81,6 +82,23 @@#define SOLO_CHIP_OPTION 0x001C#define SOLO_CHIP_ID_MASK 0x00000007 +#define SOLO6110_PLL_CONFIG 0x0020 +#define SOLO6110_PLL_RANGE_BYPASS (0 << 20) +#define SOLO6110_PLL_RANGE_5_10MHZ (1 << 20) +#define SOLO6110_PLL_RANGE_8_16MHZ (2 << 20) +#define SOLO6110_PLL_RANGE_13_26MHZ (3 << 20) +#define SOLO6110_PLL_RANGE_21_42MHZ (4 << 20) +#define SOLO6110_PLL_RANGE_34_68MHZ (5 << 20) +#define SOLO6110_PLL_RANGE_54_108MHZ (6 << 20) +#define SOLO6110_PLL_RANGE_88_200MHZ (7 << 20) +#define SOLO6110_PLL_DIVR (x) (((x) - 1) << 15) +#define SOLO6110_PLL_DIVQ_EXP (x) ((x) << 12) +#define SOLO6110_PLL_DIVF (x) (((x) - 1) << 4) +#define SOLO6110_PLL_RESET (1 << 3) +#define SOLO6110_PLL_BYPASS (1 << 2) +#define SOLO6110_PLL_FSEN (1 << 1) +#define SOLO6110_PLL_FB (1 << 0) +#define SOLO_EEPROM_CTRL 0x0060#define SOLO_EEPROM_ACCESS_EN (1<<7)#define SOLO_EEPROM_CS (1<<3)
@@ -383,7 +401,9 @@#define SOLO_VE_BLOCK_BASE (n) ((n)<<0)#define SOLO_VE_CFG1 0x0614 -#define SOLO_VE_BYTE_ALIGN (n) ((n)<<24) +#define SOLO6110_VE_MPEG_SIZE_H (n) ((n)<<28)/* 6110 only */ +#define SOLO6010_VE_BYTE_ALIGN (n) ((n)<<24)/* 6010 only */ +#define SOLO6110_VE_JPEG_SIZE_H (n) ((n)<<20)/* 6110 only */ #define SOLO_VE_INSERT_INDEX (1<<18)#define SOLO_VE_MOTION_MODE (n) ((n)<<16)#define SOLO_VE_MOTION_BASE (n) ((n)<<0)
@@ -415,7 +435,7 @@#define SOLO_VE_OSD_OPT 0x069C#define SOLO_VE_CH_INTL (ch) (0x0700+((ch)*4)) -#define SOLO_VE_CH_MOT (ch) (0x0740+((ch)*4)) +#define SOLO6010_VE_CH_MOT (ch) (0x0740+((ch)*4))/* 6010 only */ #define SOLO_VE_CH_QP (ch) (0x0780+((ch)*4))#define SOLO_VE_CH_QP_E (ch) (0x07C0+((ch)*4))#define SOLO_VE_CH_GOP (ch) (0x0800+((ch)*4))
@@ -427,7 +447,7 @@#define SOLO_VE_JPEG_QUE (n) (0x0A04+((n)*8))#define SOLO_VD_CFG0 0x0900 -#define SOLO_VD_CFG_NO_WRITE_NO_WINDOW (1<<24) +#define SOLO6010_VD_CFG_NO_WRITE_NO_WINDOW (1<<24)/* 6010 only */ #define SOLO_VD_CFG_BUSY_WIAT_CODE (1<<23)#define SOLO_VD_CFG_BUSY_WIAT_REF (1<<22)#define SOLO_VD_CFG_BUSY_WIAT_RES (1<<21)
drivers/staging/solo6x10/solo6010-v4l2-enc.c +84 -2
110 lines not on this page · raw message
drivers/staging/solo6x10/solo6010.h +4 -0
@@ -40,6 +40,7 @@#ifndef PCI_VENDOR_ID_SOFTLOGIC #define PCI_VENDOR_ID_SOFTLOGIC 0x9413#define PCI_DEVICE_ID_SOLO6010 0x6010 +#define PCI_DEVICE_ID_SOLO6110 0x6110#endif #ifndef PCI_VENDOR_ID_BLUECHERRY
@@ -70,6 +71,8 @@#define SOLO6010_VER_NUM \ KERNEL_VERSION(SOLO6010_VER_MAJOR, SOLO6010_VER_MINOR, SOLO6010_VER_SUB) +#define FLAGS_6110 1 +/* * The SOLO6010 actually has 8 i2c channels, but we only use 2. * 0 - Techwell chip(s)
@@ -183,6 +186,7 @@ struct solo6010_dev {u8 __iomem *reg_base;int nr_chans;int nr_ext; +u32 flags;u32 irq_mask;u32 motion_mask;spinlock_t reg_io_lock;
Signature · 4 lines
Krzysztof Halasa Research Institute for Automation and Measurements Al. Jerozolimskie 202, 02-486 Warsaw, Poland
PATCH 5/7 Solo6x10: remove unneeded __solo parameter from SOLO_*_EXT_ADDR macros.
In reply to Krzysztof Hałasadrivers/staging/solo6x10/solo6010-disp.c +1 -1
@@ -135,7 +135,7 @@ static void solo_disp_config(struct solo6010_dev *solo_dev)solo_reg_write (solo_dev,SOLO_VO_DISP_CTRL ,SOLO_VO_DISP_ON |SOLO_VO_DISP_ERASE_COUNT (8 ) | -SOLO_VO_DISP_BASE (SOLO_DISP_EXT_ADDR (solo_dev))); +SOLO_VO_DISP_BASE (SOLO_DISP_EXT_ADDR ));solo_reg_write (solo_dev,SOLO_VO_DISP_ERASE ,SOLO_VO_DISP_ERASE_ON );
drivers/staging/solo6x10/solo6010-enc.c +3 -4
@@ -93,8 +93,7 @@ static void solo_capture_config(struct solo6010_dev *solo_dev)/* Clear OSD */ solo_reg_write (solo_dev,SOLO_VE_OSD_CH ,0 ); -solo_reg_write (solo_dev,SOLO_VE_OSD_BASE , -SOLO_EOSD_EXT_ADDR (solo_dev) >>16 ); +solo_reg_write (solo_dev,SOLO_VE_OSD_BASE ,SOLO_EOSD_EXT_ADDR >>16 );solo_reg_write (solo_dev,SOLO_VE_OSD_CLR ,0xF0 <<16 |0x80 <<8 |0x80 );solo_reg_write (solo_dev,SOLO_VE_OSD_OPT ,0 );
@@ -107,7 +106,7 @@ static void solo_capture_config(struct solo6010_dev *solo_dev)for (i =0 ; i < solo_dev->nr_chans; i++) {for (j =0 ; j <SOLO_EOSD_EXT_SIZE ; j +=OSG_BUFFER_SIZE ) {solo_p2m_dma (solo_dev,SOLO_P2M_DMA_ID_MP4E ,1 , buf, -SOLO_EOSD_EXT_ADDR (solo_dev) + +SOLO_EOSD_EXT_ADDR + (i *SOLO_EOSD_EXT_SIZE ) + j,OSG_BUFFER_SIZE ); }
@@ -143,7 +142,7 @@ int solo_osd_print(struct solo_enc_dev *solo_enc) } } -solo_p2m_dma (solo_dev,0 ,1 , buf,SOLO_EOSD_EXT_ADDR (solo_dev) + +solo_p2m_dma (solo_dev,0 ,1 , buf,SOLO_EOSD_EXT_ADDR + (solo_enc->ch *SOLO_EOSD_EXT_SIZE ),SOLO_EOSD_EXT_SIZE ); reg |= (1 << solo_enc->ch);solo_reg_write (solo_dev,SOLO_VE_OSD_CH , reg);
drivers/staging/solo6x10/solo6010-offsets.h +6 -10
@@ -21,24 +21,20 @@#define __SOLO6010_OFFSETS_H/* Offsets and sizes of the external address */ -#define SOLO_DISP_EXT_ADDR (__solo) 0x00000000 +#define SOLO_DISP_EXT_ADDR 0x00000000#define SOLO_DISP_EXT_SIZE 0x00480000 -#define SOLO_DEC2LIVE_EXT_ADDR (__solo) \ - (SOLO_DISP_EXT_ADDR(__solo) + SOLO_DISP_EXT_SIZE) +#define SOLO_DEC2LIVE_EXT_ADDR (SOLO_DISP_EXT_ADDR + SOLO_DISP_EXT_SIZE)#define SOLO_DEC2LIVE_EXT_SIZE 0x00240000 -#define SOLO_OSG_EXT_ADDR (__solo) \ - (SOLO_DEC2LIVE_EXT_ADDR(__solo) + SOLO_DEC2LIVE_EXT_SIZE) +#define SOLO_OSG_EXT_ADDR (SOLO_DEC2LIVE_EXT_ADDR + SOLO_DEC2LIVE_EXT_SIZE)#define SOLO_OSG_EXT_SIZE 0x00120000 -#define SOLO_EOSD_EXT_ADDR (__solo) \ - (SOLO_OSG_EXT_ADDR(__solo) + SOLO_OSG_EXT_SIZE) +#define SOLO_EOSD_EXT_ADDR (SOLO_OSG_EXT_ADDR + SOLO_OSG_EXT_SIZE)#define SOLO_EOSD_EXT_SIZE 0x00010000 -#define SOLO_MOTION_EXT_ADDR (__solo) \ - (SOLO_EOSD_EXT_ADDR(__solo) + \ - (SOLO_EOSD_EXT_SIZE * __solo->nr_chans)) +#define SOLO_MOTION_EXT_ADDR (__solo) (SOLO_EOSD_EXT_ADDR + \ + (SOLO_EOSD_EXT_SIZE * __solo->nr_chans))#define SOLO_MOTION_EXT_SIZE 0x00080000#define SOLO_G723_EXT_ADDR (__solo) \
drivers/staging/solo6x10/solo6010-v4l2.c +1 -1
@@ -280,7 +280,7 @@ static void solo_fillbuf(struct solo_filehandle *fh, sg_dma =sg_dma_address (sg); sg_size_left =sg_dma_len (sg); - fdma_addr =SOLO_DISP_EXT_ADDR (solo_dev) + (fh->old_write * + fdma_addr =SOLO_DISP_EXT_ADDR + (fh->old_write * (SOLO_HW_BPL *solo_vlines (solo_dev)));for (i =0 ; i <solo_vlines (solo_dev); i++) {
Signature · 4 lines
Krzysztof Halasa Research Institute for Automation and Measurements Al. Jerozolimskie 202, 02-486 Warsaw, Poland
PATCH 6/7 Solo6x10: Stripped "solo6010-" from file names.
In reply to Krzysztof HałasaThis driver supports both Solo-6010 and Solo-6110 chips anyway. Renamed solo6010.h -> solo6x10.h.
drivers/staging/solo6x10/Makefile +1 -4
@@ -1,6 +1,3 @@ -solo6x10-y := solo6010-core.o solo6010-i2c.o solo6010-p2m.o \ - solo6010-v4l2.o solo6010-tw28.o solo6010-gpio.o \ - solo6010-disp.o solo6010-enc.o solo6010-v4l2-enc.o \ - solo6010-g723.o +solo6x10-y := core.o i2c.o p2m.o v4l2.o tw28.o gpio.o disp.o enc.o v4l2-enc.o g723.o obj-$(CONFIG_SOLO6X10) := solo6x10.o
drivers/staging/solo6x10/core.c renamed from drivers/staging/solo6x10/solo6010-core.c +2 -3
@@ -22,9 +22,8 @@#include <linux/pci.h> #include <linux/interrupt.h> #include <linux/videodev2.h> - -#include "solo6010.h" -#include "solo6010-tw28.h" +#include "solo6x10.h" +#include "tw28.h" MODULE_DESCRIPTION ("Softlogic 6010 MP4 Encoder/Decoder V4L2/ALSA Driver" );MODULE_AUTHOR ("Ben Collins <[email protected]>" );
drivers/staging/solo6x10/disp.c renamed from drivers/staging/solo6x10/solo6010-disp.c +1 -2
@@ -21,8 +21,7 @@#include <linux/module.h> #include <linux/videodev2.h> #include <media/v4l2-ioctl.h> - -#include "solo6010.h" +#include "solo6x10.h" #define SOLO_VCLK_DELAY 3#define SOLO_PROGRESSIVE_VSIZE 1024
drivers/staging/solo6x10/enc.c renamed from drivers/staging/solo6x10/solo6010-enc.c +2 -3
@@ -18,9 +18,8 @@*/ #include <linux/kernel.h> - -#include "solo6010.h" -#include "solo6010-osd-font.h" +#include "solo6x10.h" +#include "osd-font.h" #define CAPTURE_MAX_BANDWIDTH 32/* D1 4channel (D1 == 4) */ #define OSG_BUFFER_SIZE 1024
drivers/staging/solo6x10/g723.c renamed from drivers/staging/solo6x10/solo6010-g723.c +2 -4
@@ -22,14 +22,12 @@#include <linux/poll.h> #include <linux/kthread.h> #include <linux/freezer.h> -#include <sound/core.h> #include <sound/initval.h> #include <sound/pcm.h> #include <sound/control.h> - -#include "solo6010.h" -#include "solo6010-tw28.h" +#include "solo6x10.h" +#include "tw28.h" #define G723_INTR_ORDER 0#define G723_FDMA_PAGES 32
drivers/staging/solo6x10/gpio.c renamed from drivers/staging/solo6x10/solo6010-gpio.c +1 -2
@@ -20,8 +20,7 @@#include <linux/kernel.h> #include <linux/fs.h> #include <asm/uaccess.h> - -#include "solo6010.h" +#include "solo6x10.h" static void solo_gpio_mode (struct solo6010_dev *solo_dev,unsigned int port_mask,unsigned int mode)
drivers/staging/solo6x10/i2c.c renamed from drivers/staging/solo6x10/solo6010-i2c.c +1 -2
@@ -26,8 +26,7 @@* thread context, ACK the interrupt, and move on. -- BenC */ #include <linux/kernel.h> - -#include "solo6010.h" +#include "solo6x10.h" u8 solo_i2c_readbyte (struct solo6010_dev *solo_dev,int id,u8 addr,u8 off) {
drivers/staging/solo6x10/jpeg.h renamed from drivers/staging/solo6x10/solo6010-jpeg.h +0 -0
drivers/staging/solo6x10/offsets.h renamed from drivers/staging/solo6x10/solo6010-offsets.h +0 -0
drivers/staging/solo6x10/osd-font.h renamed from drivers/staging/solo6x10/solo6010-osd-font.h +0 -0
drivers/staging/solo6x10/p2m.c renamed from drivers/staging/solo6x10/solo6010-p2m.c +1 -2
@@ -19,8 +19,7 @@#include <linux/kernel.h> #include <linux/scatterlist.h> - -#include "solo6010.h" +#include "solo6x10.h" /* #define SOLO_TEST_P2M */
drivers/staging/solo6x10/registers.h renamed from drivers/staging/solo6x10/solo6010-registers.h +1 -1
@@ -20,7 +20,7 @@#ifndef __SOLO6010_REGISTERS_H#define __SOLO6010_REGISTERS_H -#include "solo6010-offsets.h" +#include "offsets.h" /* Global 6010 system configuration */ #define SOLO_SYS_CFG 0x0000
drivers/staging/solo6x10/solo6x10.h renamed from drivers/staging/solo6x10/solo6010.h +1 -3
@@ -30,12 +30,10 @@#include <linux/delay.h> #include <asm/io.h> #include <asm/atomic.h> -#include <linux/videodev2.h> #include <media/v4l2-dev.h> #include <media/videobuf-core.h> - -#include "solo6010-registers.h" +#include "registers.h" #ifndef PCI_VENDOR_ID_SOFTLOGIC #define PCI_VENDOR_ID_SOFTLOGIC 0x9413
drivers/staging/solo6x10/tw28.c renamed from drivers/staging/solo6x10/solo6010-tw28.c +2 -3
@@ -18,9 +18,8 @@*/ #include <linux/kernel.h> - -#include "solo6010.h" -#include "solo6010-tw28.h" +#include "solo6x10.h" +#include "tw28.h" /* XXX: Some of these values are masked into an 8-bit regs, and shifted * around for other 8-bit regs. What are the magic bits in these values? */
drivers/staging/solo6x10/tw28.h renamed from drivers/staging/solo6x10/solo6010-tw28.h +1 -1
@@ -20,7 +20,7 @@#ifndef __SOLO6010_TW28_H#define __SOLO6010_TW28_H -#include "solo6010.h" +#include "solo6x10.h" #define TW_NUM_CHIP 4#define TW_BASE_ADDR 0x28
drivers/staging/solo6x10/v4l2-enc.c renamed from drivers/staging/solo6x10/solo6010-v4l2-enc.c +3 -5
@@ -21,14 +21,12 @@#include <linux/module.h> #include <linux/kthread.h> #include <linux/freezer.h> -#include <media/v4l2-ioctl.h> #include <media/v4l2-common.h> #include <media/videobuf-dma-sg.h> - -#include "solo6010.h" -#include "solo6010-tw28.h" -#include "solo6010-jpeg.h" +#include "solo6x10.h" +#include "tw28.h" +#include "jpeg.h" #define MIN_VID_BUFFERS 4#define FRAME_BUF_SIZE (128 * 1024)
drivers/staging/solo6x10/v4l2.c renamed from drivers/staging/solo6x10/solo6010-v4l2.c +2 -4
@@ -21,13 +21,11 @@#include <linux/module.h> #include <linux/kthread.h> #include <linux/freezer.h> -#include <media/v4l2-ioctl.h> #include <media/v4l2-common.h> #include <media/videobuf-dma-sg.h> - -#include "solo6010.h" -#include "solo6010-tw28.h" +#include "solo6x10.h" +#include "tw28.h" #define SOLO_HW_BPL 2048#define SOLO_DISP_PIX_FIELD V4L2_FIELD_INTERLACED
Signature · 4 lines
Krzysztof Halasa Research Institute for Automation and Measurements Al. Jerozolimskie 202, 02-486 Warsaw, Poland
PATCH 7/7 Solo6x10: Changed solo6010* -> solo*, solo6x10* etc.
In reply to Krzysztof Hałasadrivers/staging/solo6x10/core.c +30 -30
@@ -25,27 +25,27 @@#include "solo6x10.h" #include "tw28.h" -MODULE_DESCRIPTION ("Softlogic 6010 MP4 Encoder/Decoder V4L2/ALSA Driver" ); +MODULE_DESCRIPTION ("Softlogic 6x10 MP4/H.264 Encoder/Decoder V4L2/ALSA Driver" );MODULE_AUTHOR ("Ben Collins <[email protected]>" ); -MODULE_VERSION (SOLO6010_VERSION ); +MODULE_VERSION (SOLO6X10_VERSION );MODULE_LICENSE ("GPL" ); -void solo6010_irq_on (struct solo6010_dev *solo_dev,u32 mask) +void solo_irq_on (struct solo_dev *solo_dev,u32 mask) { solo_dev->irq_mask |= mask;solo_reg_write (solo_dev,SOLO_IRQ_ENABLE , solo_dev->irq_mask); } -void solo6010_irq_off (struct solo6010_dev *solo_dev,u32 mask) +void solo_irq_off (struct solo_dev *solo_dev,u32 mask) { solo_dev->irq_mask &= ~mask;solo_reg_write (solo_dev,SOLO_IRQ_ENABLE , solo_dev->irq_mask); }/* XXX We should check the return value of the sub-device ISR's */ -static irqreturn_t solo6010_isr (int irq,void *data) +static irqreturn_t solo_isr (int irq,void *data) { -struct solo6010_dev *solo_dev = data; +struct solo_dev *solo_dev = data;u32 status;int i;
@@ -88,7 +88,7 @@ static irqreturn_t solo6010_isr(int irq, void *data)return IRQ_HANDLED ; } -static void free_solo_dev (struct solo6010_dev *solo_dev) +static void free_solo_dev (struct solo_dev *solo_dev) {struct pci_dev *pdev;
@@ -116,7 +116,7 @@ static void free_solo_dev(struct solo6010_dev *solo_dev)/* Now cleanup the PCI device */ if (solo_dev->reg_base) { -solo6010_irq_off (solo_dev, ~0 ); +solo_irq_off (solo_dev, ~0 );pci_iounmap (pdev, solo_dev->reg_base);free_irq (pdev->irq, solo_dev); }
@@ -128,10 +128,10 @@ static void free_solo_dev(struct solo6010_dev *solo_dev)kfree (solo_dev); } -static int __devinit solo6010_pci_probe (struct pci_dev *pdev, -const struct pci_device_id *id) +static int __devinit solo_pci_probe (struct pci_dev *pdev, +const struct pci_device_id *id) { -struct solo6010_dev *solo_dev; +struct solo_dev *solo_dev;int ret;int sdram;u8 chip_id;
@@ -151,7 +151,7 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev,pci_set_master (pdev); - ret =pci_request_regions (pdev,SOLO6010_NAME ); + ret =pci_request_regions (pdev,SOLO6X10_NAME );if (ret) goto fail_probe;
@@ -184,7 +184,7 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev, solo_dev->flags = id->driver_data;/* Disable all interrupts to start */ -solo6010_irq_off (solo_dev, ~0 ); +solo_irq_off (solo_dev, ~0 ); reg =SOLO_SYS_CFG_SDRAM64BIT ;/* Initial global settings */
@@ -223,13 +223,13 @@ static int __devinit solo6010_pci_probe(struct pci_dev *pdev,/* PLL locking time of 1ms */ mdelay (1 ); - ret =request_irq (pdev->irq, solo6010_isr,IRQF_SHARED ,SOLO6010_NAME , + ret =request_irq (pdev->irq, solo_isr,IRQF_SHARED ,SOLO6X10_NAME , solo_dev);if (ret) goto fail_probe;/* Handle this from the start */ -solo6010_irq_on (solo_dev,SOLO_IRQ_PCI_ERR ); +solo_irq_on (solo_dev,SOLO_IRQ_PCI_ERR ); ret =solo_i2c_init (solo_dev);if (ret)
@@ -283,14 +283,14 @@ fail_probe:return ret; } -static void __devexit solo6010_pci_remove(struct pci_dev *pdev) +static void __devexit solo_pci_remove(struct pci_dev *pdev) { -struct solo6010_dev *solo_dev =pci_get_drvdata (pdev); +struct solo_dev *solo_dev =pci_get_drvdata (pdev);free_solo_dev (solo_dev); } -static struct pci_device_id solo6010_id_table[] = { +static struct pci_device_id solo_id_table[] = {/* 6010 based cards */ {PCI_DEVICE (PCI_VENDOR_ID_SOFTLOGIC ,PCI_DEVICE_ID_SOLO6010 )}, {PCI_DEVICE (PCI_VENDOR_ID_SOFTLOGIC ,PCI_DEVICE_ID_SOLO6110 ),
@@ -308,24 +308,24 @@ static struct pci_device_id solo6010_id_table[] = { {0,} }; -MODULE_DEVICE_TABLE (pci, solo6010_id_table); +MODULE_DEVICE_TABLE (pci, solo_id_table); -static struct pci_driver solo6010_pci_driver = { - .name =SOLO6010_NAME , - .id_table = solo6010_id_table, - .probe = solo6010_pci_probe, - .remove = solo6010_pci_remove, +static struct pci_driver solo_pci_driver = { + .name =SOLO6X10_NAME , + .id_table = solo_id_table, + .probe = solo_pci_probe, + .remove = solo_pci_remove, }; -static int __init solo6010_module_init (void ) +static int __init solo_module_init (void ) { -return pci_register_driver (&solo6010_pci_driver); +return pci_register_driver (&solo_pci_driver); } -static void __exit solo6010_module_exit(void) +static void __exit solo_module_exit(void) { -pci_unregister_driver (&solo6010_pci_driver); +pci_unregister_driver (&solo_pci_driver); } -module_init (solo6010_module_init); -module_exit (solo6010_module_exit); +module_init (solo_module_init); +module_exit (solo_module_exit);
drivers/staging/solo6x10/disp.c +8 -8
@@ -37,7 +37,7 @@ static unsigned video_type;module_param (video_type, uint,0644 );MODULE_PARM_DESC (video_type,"video_type (0 = NTSC/Default, 1 = PAL)" ); -static void solo_vin_config (struct solo6010_dev *solo_dev) +static void solo_vin_config (struct solo_dev *solo_dev) { solo_dev->vin_hstart =8 ; solo_dev->vin_vstart =2 ;
@@ -97,7 +97,7 @@ static void solo_vin_config(struct solo6010_dev *solo_dev) SOLO_VI_PB_HSTOP(16 + 720)); } -static void solo_disp_config (struct solo6010_dev *solo_dev) +static void solo_disp_config (struct solo_dev *solo_dev) { solo_dev->vout_hstart =6 ; solo_dev->vout_vstart =8 ;
@@ -145,7 +145,7 @@ static void solo_disp_config(struct solo6010_dev *solo_dev)solo_reg_write (solo_dev,SOLO_WATCHDOG ,0 ); } -static int solo_dma_vin_region (struct solo6010_dev *solo_dev,u32 off, +static int solo_dma_vin_region (struct solo_dev *solo_dev,u32 off,u16 val,int reg_size) {u16 buf[64 ];
@@ -163,7 +163,7 @@ static int solo_dma_vin_region(struct solo6010_dev *solo_dev, u32 off,return ret; } -void solo_set_motion_threshold (struct solo6010_dev *solo_dev,u8 ch,u16 val) +void solo_set_motion_threshold (struct solo_dev *solo_dev,u8 ch,u16 val) {if (ch > solo_dev->nr_chans)return ;
@@ -177,7 +177,7 @@ void solo_set_motion_threshold(struct solo6010_dev *solo_dev, u8 ch, u16 val)* threshold and working table for each channel. Atleast that's what the * spec says. However, this code (take from rdk) has some mystery 8k * block right after the flag area, before the first thresh table. */ -static void solo_motion_config (struct solo6010_dev *solo_dev) +static void solo_motion_config (struct solo_dev *solo_dev) {int i;
@@ -209,7 +209,7 @@ static void solo_motion_config(struct solo6010_dev *solo_dev)solo_reg_write (solo_dev,SOLO_VI_MOTION_BAR ,0 ); } -int solo_disp_init (struct solo6010_dev *solo_dev) +int solo_disp_init (struct solo_dev *solo_dev) {int i;
@@ -234,11 +234,11 @@ int solo_disp_init(struct solo6010_dev *solo_dev)return 0 ; } -void solo_disp_exit (struct solo6010_dev *solo_dev) +void solo_disp_exit (struct solo_dev *solo_dev) {int i; -solo6010_irq_off (solo_dev,SOLO_IRQ_MOTION ); +solo_irq_off (solo_dev,SOLO_IRQ_MOTION );solo_reg_write (solo_dev,SOLO_VO_DISP_CTRL ,0 );solo_reg_write (solo_dev,SOLO_VO_ZOOM_CTRL ,0 );
drivers/staging/solo6x10/enc.c +8 -8
@@ -27,7 +27,7 @@#define VI_PROG_HSIZE (1280 - 16)#define VI_PROG_VSIZE (1024 - 16) -static void solo_capture_config (struct solo6010_dev *solo_dev) +static void solo_capture_config (struct solo_dev *solo_dev) {int i, j;unsigned long height;
@@ -115,7 +115,7 @@ static void solo_capture_config(struct solo6010_dev *solo_dev)int solo_osd_print (struct solo_enc_dev *solo_enc) { -struct solo6010_dev *solo_dev = solo_enc->solo_dev; +struct solo_dev *solo_dev = solo_enc->solo_dev;char *str = solo_enc->osd_text;u8 *buf;u32 reg =solo_reg_read (solo_dev,SOLO_VE_OSD_CH );
@@ -151,7 +151,7 @@ int solo_osd_print(struct solo_enc_dev *solo_enc)return 0 ; } -static void solo_jpeg_config (struct solo6010_dev *solo_dev) +static void solo_jpeg_config (struct solo_dev *solo_dev) {u32 reg;if (solo_dev->flags &FLAGS_6110 )
@@ -169,7 +169,7 @@ static void solo_jpeg_config(struct solo6010_dev *solo_dev)solo_reg_write (solo_dev,0x0688 , (0 <<16 ) | (30 <<8 ) |60 ); } -static void solo_mp4e_config (struct solo6010_dev *solo_dev) +static void solo_mp4e_config (struct solo_dev *solo_dev) {int i;u32 reg;
@@ -206,7 +206,7 @@ static void solo_mp4e_config(struct solo6010_dev *solo_dev)solo_reg_write (solo_dev,0x0634 ,0x00040008 );/* ? */ } -int solo_enc_init (struct solo6010_dev *solo_dev) +int solo_enc_init (struct solo_dev *solo_dev) {int i;
@@ -219,16 +219,16 @@ int solo_enc_init(struct solo6010_dev *solo_dev)solo_reg_write (solo_dev,SOLO_CAP_CH_COMP_ENA_E (i),0 ); } -solo6010_irq_on (solo_dev,SOLO_IRQ_ENCODER ); +solo_irq_on (solo_dev,SOLO_IRQ_ENCODER );return 0 ; } -void solo_enc_exit (struct solo6010_dev *solo_dev) +void solo_enc_exit (struct solo_dev *solo_dev) {int i; -solo6010_irq_off (solo_dev,SOLO_IRQ_ENCODER ); +solo_irq_off (solo_dev,SOLO_IRQ_ENCODER );for (i =0 ; i < solo_dev->nr_chans; i++) {solo_reg_write (solo_dev,SOLO_CAP_CH_SCALE (i),0 );
drivers/staging/solo6x10/g723.c +21 -21
136 lines not on this page · raw message
drivers/staging/solo6x10/gpio.c +6 -6
@@ -22,7 +22,7 @@#include <asm/uaccess.h> #include "solo6x10.h" -static void solo_gpio_mode (struct solo6010_dev *solo_dev, +static void solo_gpio_mode (struct solo_dev *solo_dev,unsigned int port_mask,unsigned int mode) {int port;
@@ -57,19 +57,19 @@ static void solo_gpio_mode(struct solo6010_dev *solo_dev,solo_reg_write (solo_dev,SOLO_GPIO_CONFIG_1 , ret); } -static void solo_gpio_set (struct solo6010_dev *solo_dev,unsigned int value) +static void solo_gpio_set (struct solo_dev *solo_dev,unsigned int value) {solo_reg_write (solo_dev,SOLO_GPIO_DATA_OUT ,solo_reg_read (solo_dev,SOLO_GPIO_DATA_OUT ) | value); } -static void solo_gpio_clear (struct solo6010_dev *solo_dev,unsigned int value) +static void solo_gpio_clear (struct solo_dev *solo_dev,unsigned int value) {solo_reg_write (solo_dev,SOLO_GPIO_DATA_OUT ,solo_reg_read (solo_dev,SOLO_GPIO_DATA_OUT ) & ~value); } -static void solo_gpio_config (struct solo6010_dev *solo_dev) +static void solo_gpio_config (struct solo_dev *solo_dev) {/* Video reset */ solo_gpio_mode (solo_dev,0x30 ,1 );
@@ -89,13 +89,13 @@ static void solo_gpio_config(struct solo6010_dev *solo_dev)solo_gpio_clear (solo_dev,0xff00 ); } -int solo_gpio_init (struct solo6010_dev *solo_dev) +int solo_gpio_init (struct solo_dev *solo_dev) {solo_gpio_config (solo_dev);return 0 ; } -void solo_gpio_exit (struct solo6010_dev *solo_dev) +void solo_gpio_exit (struct solo_dev *solo_dev) {solo_gpio_clear (solo_dev,0x30 );solo_gpio_config (solo_dev);
drivers/staging/solo6x10/i2c.c +15 -16
@@ -17,7 +17,7 @@* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* XXX: The SOLO6010 i2c does not have separate interrupts for each i2c +/* XXX: The SOLO6x10 i2c does not have separate interrupts for each i2c * channel. The bus can only handle one i2c event at a time. The below handles * this all wrong. We should be using the status registers to see if the bus * is in use, and have a global lock to check the status register. Also,
@@ -28,7 +28,7 @@#include <linux/kernel.h> #include "solo6x10.h" -u8 solo_i2c_readbyte (struct solo6010_dev *solo_dev,int id,u8 addr,u8 off) +u8 solo_i2c_readbyte (struct solo_dev *solo_dev,int id,u8 addr,u8 off) {struct i2c_msg msgs[2 ];u8 data;
@@ -48,7 +48,7 @@ u8 solo_i2c_readbyte(struct solo6010_dev *solo_dev, int id, u8 addr, u8 off)return data; } -void solo_i2c_writebyte (struct solo6010_dev *solo_dev,int id,u8 addr, +void solo_i2c_writebyte (struct solo_dev *solo_dev,int id,u8 addr,u8 off,u8 data) {struct i2c_msg msgs;
@@ -64,7 +64,7 @@ void solo_i2c_writebyte(struct solo6010_dev *solo_dev, int id, u8 addr,i2c_transfer (&solo_dev->i2c_adap[id], &msgs,1 ); } -static void solo_i2c_flush (struct solo6010_dev *solo_dev,int wr) +static void solo_i2c_flush (struct solo_dev *solo_dev,int wr) {u32 ctrl;
@@ -87,7 +87,7 @@ static void solo_i2c_flush(struct solo6010_dev *solo_dev, int wr)solo_reg_write (solo_dev,SOLO_IIC_CTRL , ctrl); } -static void solo_i2c_start (struct solo6010_dev *solo_dev) +static void solo_i2c_start (struct solo_dev *solo_dev) {u32 addr = solo_dev->i2c_msg->addr <<1 ;
@@ -99,15 +99,15 @@ static void solo_i2c_start(struct solo6010_dev *solo_dev)solo_i2c_flush (solo_dev,1 ); } -static void solo_i2c_stop (struct solo6010_dev *solo_dev) +static void solo_i2c_stop (struct solo_dev *solo_dev) { -solo6010_irq_off (solo_dev,SOLO_IRQ_IIC ); +solo_irq_off (solo_dev,SOLO_IRQ_IIC );solo_reg_write (solo_dev,SOLO_IIC_CTRL ,0 ); solo_dev->i2c_state =IIC_STATE_STOP ;wake_up (&solo_dev->i2c_wait); } -static int solo_i2c_handle_read (struct solo6010_dev *solo_dev) +static int solo_i2c_handle_read (struct solo_dev *solo_dev) { prepare_read:if (solo_dev->i2c_msg_ptr != solo_dev->i2c_msg->len) {
@@ -136,7 +136,7 @@ prepare_read:return 0 ; } -static int solo_i2c_handle_write (struct solo6010_dev *solo_dev) +static int solo_i2c_handle_write (struct solo_dev *solo_dev) { retry_write:if (solo_dev->i2c_msg_ptr != solo_dev->i2c_msg->len) {
@@ -168,7 +168,7 @@ retry_write:return 0 ; } -int solo_i2c_isr (struct solo6010_dev *solo_dev) +int solo_i2c_isr (struct solo_dev *solo_dev) {u32 status =solo_reg_read (solo_dev,SOLO_IIC_CTRL );int ret = -EINVAL ;
@@ -212,7 +212,7 @@ int solo_i2c_isr(struct solo6010_dev *solo_dev)static int solo_i2c_master_xfer (struct i2c_adapter *adap,struct i2c_msg msgs[],int num) { -struct solo6010_dev *solo_dev = adap->algo_data; +struct solo_dev *solo_dev = adap->algo_data;unsigned long timeout;int ret;int i;
@@ -233,7 +233,7 @@ static int solo_i2c_master_xfer(struct i2c_adapter *adap, solo_dev->i2c_msg_ptr =0 ;solo_reg_write (solo_dev,SOLO_IIC_CTRL ,0 ); -solo6010_irq_on (solo_dev,SOLO_IRQ_IIC ); +solo_irq_on (solo_dev,SOLO_IRQ_IIC );solo_i2c_start (solo_dev); timeout =HZ /2 ;
@@ -272,7 +272,7 @@ static struct i2c_algorithm solo_i2c_algo = { .functionality = solo_i2c_functionality, }; -int solo_i2c_init (struct solo6010_dev *solo_dev) +int solo_i2c_init (struct solo_dev *solo_dev) {int i;int ret;
@@ -288,8 +288,7 @@ int solo_i2c_init(struct solo6010_dev *solo_dev)for (i =0 ; i <SOLO_I2C_ADAPTERS ; i++) {struct i2c_adapter *adap = &solo_dev->i2c_adap[i]; -snprintf (adap->name,I2C_NAME_SIZE ,"%s I2C %d" , -SOLO6010_NAME , i); +snprintf (adap->name,I2C_NAME_SIZE ,"%s I2C %d" ,SOLO6X10_NAME , i); adap->algo = &solo_i2c_algo; adap->algo_data = solo_dev; adap->retries =1 ;
@@ -318,7 +317,7 @@ int solo_i2c_init(struct solo6010_dev *solo_dev)return 0 ; } -void solo_i2c_exit (struct solo6010_dev *solo_dev) +void solo_i2c_exit (struct solo_dev *solo_dev) {int i;
drivers/staging/solo6x10/jpeg.h +3 -3
@@ -17,8 +17,8 @@* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef __SOLO6010_JPEG_H -#define __SOLO6010_JPEG_H +#ifndef __SOLO6X10_JPEG_H +#define __SOLO6X10_JPEG_Hstatic unsigned char jpeg_header[] = { 0xff, 0xd8, 0xff, 0xfe, 0x00, 0x0d, 0x42, 0x6c,
@@ -102,4 +102,4 @@ static unsigned char jpeg_header[] = {/* This is the byte marker for the start of SOF0: 0xffc0 marker */ #define SOF0_START 575 -#endif /* __SOLO6010_JPEG_H */ +#endif /* __SOLO6X10_JPEG_H */
drivers/staging/solo6x10/offsets.h +3 -3
@@ -17,8 +17,8 @@* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef __SOLO6010_OFFSETS_H -#define __SOLO6010_OFFSETS_H +#ifndef __SOLO6X10_OFFSETS_H +#define __SOLO6X10_OFFSETS_H/* Offsets and sizes of the external address */ #define SOLO_DISP_EXT_ADDR 0x00000000
@@ -71,4 +71,4 @@ (SOLO_MP4D_EXT_SIZE * __solo->nr_chans))#define SOLO_JPEG_EXT_SIZE (__solo) (0x00080000 * __solo->nr_chans) -#endif /* __SOLO6010_OFFSETS_H */ +#endif /* __SOLO6X10_OFFSETS_H */
drivers/staging/solo6x10/osd-font.h +3 -3
@@ -17,8 +17,8 @@* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef __SOLO6010_OSD_FONT_H -#define __SOLO6010_OSD_FONT_H +#ifndef __SOLO6X10_OSD_FONT_H +#define __SOLO6X10_OSD_FONT_Hstatic const unsigned int solo_osd_font[] = { 0x00000000, 0x0000c0c8, 0xccfefe0c, 0x08000000,
@@ -151,4 +151,4 @@ static const unsigned int solo_osd_font[] = {0x00000000 ,0x0010386c ,0xc6c6fe00 ,0x00000000 }; -#endif /* __SOLO6010_OSD_FONT_H */ +#endif /* __SOLO6X10_OSD_FONT_H */
drivers/staging/solo6x10/p2m.c +16 -16
@@ -23,7 +23,7 @@/* #define SOLO_TEST_P2M */ -int solo_p2m_dma (struct solo6010_dev *solo_dev,u8 id,int wr, +int solo_p2m_dma (struct solo_dev *solo_dev,u8 id,int wr,void *sys_addr,u32 ext_addr,u32 size) {dma_addr_t dma_addr;
@@ -46,7 +46,7 @@ int solo_p2m_dma(struct solo6010_dev *solo_dev, u8 id, int wr,return ret; } -int solo_p2m_dma_t (struct solo6010_dev *solo_dev,u8 id,int wr, +int solo_p2m_dma_t (struct solo_dev *solo_dev,u8 id,int wr,dma_addr_t dma_addr,u32 ext_addr,u32 size) {struct p2m_desc *desc =kzalloc (sizeof (*desc) *2 ,GFP_DMA );
@@ -80,7 +80,7 @@ void solo_p2m_push_desc(struct p2m_desc *desc, int wr, dma_addr_t dma_addr, } } -int solo_p2m_dma_desc (struct solo6010_dev *solo_dev,u8 id, +int solo_p2m_dma_desc (struct solo_dev *solo_dev,u8 id,struct p2m_desc *desc,int desc_count) {struct solo_p2m_dev *p2m_dev;
@@ -136,7 +136,7 @@ int solo_p2m_dma_desc(struct solo6010_dev *solo_dev, u8 id,return ret; } -int solo_p2m_dma_sg (struct solo6010_dev *solo_dev,u8 id, +int solo_p2m_dma_sg (struct solo_dev *solo_dev,u8 id,struct p2m_desc *pdesc,int wr,struct scatterlist *sg,u32 sg_off,u32 ext_addr,u32 size)
@@ -185,7 +185,7 @@ int solo_p2m_dma_sg(struct solo6010_dev *solo_dev, u8 id,#define P2M_TEST_CHAR 0xbe -static unsigned long long p2m_test (struct solo6010_dev *solo_dev,u8 id, +static unsigned long long p2m_test (struct solo_dev *solo_dev,u8 id,u32 base,int size) {u8 *wr_buf;
@@ -195,13 +195,13 @@ static unsigned long long p2m_test(struct solo6010_dev *solo_dev, u8 id, wr_buf =kmalloc (size,GFP_KERNEL );if (!wr_buf) { -printk (SOLO6010_NAME ": Failed to malloc for p2m_test\n" ); +printk (SOLO6X10_NAME ": Failed to malloc for p2m_test\n" );return size; } rd_buf =kmalloc (size,GFP_KERNEL );if (!rd_buf) { -printk (SOLO6010_NAME ": Failed to malloc for p2m_test\n" ); +printk (SOLO6X10_NAME ": Failed to malloc for p2m_test\n" );kfree (wr_buf);return size; }
@@ -224,21 +224,21 @@ static unsigned long long p2m_test(struct solo6010_dev *solo_dev, u8 id,#define TEST_CHUNK_SIZE (8 * 1024) -static void run_p2m_test (struct solo6010_dev *solo_dev) +static void run_p2m_test (struct solo_dev *solo_dev) {unsigned long long errs =0 ;u32 size =SOLO_JPEG_EXT_ADDR (solo_dev) +SOLO_JPEG_EXT_SIZE (solo_dev);int i, d;printk (KERN_WARNING "%s: Testing %u bytes of external ram\n" , -SOLO6010_NAME , size); +SOLO6X10_NAME , size);for (i =0 ; i < size; i +=TEST_CHUNK_SIZE )for (d =0 ; d <4 ; d++) errs +=p2m_test (solo_dev, d, i,TEST_CHUNK_SIZE );printk (KERN_WARNING "%s: Found %llu errors during p2m test\n" , -SOLO6010_NAME , errs); +SOLO6X10_NAME , errs);return ; }
@@ -246,7 +246,7 @@ static void run_p2m_test(struct solo6010_dev *solo_dev)#define run_p2m_test (__solo) do {} while (0)#endif -void solo_p2m_isr (struct solo6010_dev *solo_dev,int id) +void solo_p2m_isr (struct solo_dev *solo_dev,int id) {struct solo_p2m_dev *p2m_dev = &solo_dev->p2m_dev[id];
@@ -255,7 +255,7 @@ void solo_p2m_isr(struct solo6010_dev *solo_dev, int id)complete (&p2m_dev->completion); } -void solo_p2m_error_isr (struct solo6010_dev *solo_dev,u32 status) +void solo_p2m_error_isr (struct solo_dev *solo_dev,u32 status) {struct solo_p2m_dev *p2m_dev;int i;
@@ -271,15 +271,15 @@ void solo_p2m_error_isr(struct solo6010_dev *solo_dev, u32 status) } } -void solo_p2m_exit (struct solo6010_dev *solo_dev) +void solo_p2m_exit (struct solo_dev *solo_dev) {int i;for (i =0 ; i <SOLO_NR_P2M ; i++) -solo6010_irq_off (solo_dev,SOLO_IRQ_P2M (i)); +solo_irq_off (solo_dev,SOLO_IRQ_P2M (i)); } -int solo_p2m_init (struct solo6010_dev *solo_dev) +int solo_p2m_init (struct solo_dev *solo_dev) {struct solo_p2m_dev *p2m_dev;int i;
@@ -296,7 +296,7 @@ int solo_p2m_init(struct solo6010_dev *solo_dev)SOLO_P2M_DMA_INTERVAL (3 ) |SOLO_P2M_DESC_INTR_OPT | SOLO_P2M_PCI_MASTER_MODE); -solo6010_irq_on (solo_dev,SOLO_IRQ_P2M (i)); +solo_irq_on (solo_dev,SOLO_IRQ_P2M (i)); }run_p2m_test (solo_dev);
drivers/staging/solo6x10/registers.h +4 -4
@@ -17,12 +17,12 @@* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef __SOLO6010_REGISTERS_H -#define __SOLO6010_REGISTERS_H +#ifndef __SOLO6X10_REGISTERS_H +#define __SOLO6X10_REGISTERS_H#include "offsets.h" -/* Global 6010 system configuration */ +/* Global 6X10 system configuration */ #define SOLO_SYS_CFG 0x0000#define SOLO6010_SYS_CFG_FOUT_EN 0x00000001/* 6010 only */ #define SOLO6010_SYS_CFG_PLL_BYPASS 0x00000002/* 6010 only */
@@ -634,4 +634,4 @@#define WATCHDOG_STAT (status) (status<<8)#define WATCHDOG_TIME (sec) (sec&0xff) -#endif /* __SOLO6010_REGISTERS_H */ +#endif /* __SOLO6X10_REGISTERS_H */
drivers/staging/solo6x10/solo6x10.h +48 -49
175 lines not on this page · raw message
drivers/staging/solo6x10/tw28.c +16 -17
@@ -140,7 +140,7 @@ static u8 tbl_tw2865_pal_template[] = {#define is_tw286x (__solo, __id) (!(__solo->tw2815 & (1 << __id))) -static u8 tw_readbyte (struct solo6010_dev *solo_dev,int chip_id,u8 tw6x_off, +static u8 tw_readbyte (struct solo_dev *solo_dev,int chip_id,u8 tw6x_off,u8 tw_off) {if (is_tw286x (solo_dev, chip_id))
@@ -153,7 +153,7 @@ static u8 tw_readbyte(struct solo6010_dev *solo_dev, int chip_id, u8 tw6x_off, tw_off); } -static void tw_writebyte (struct solo6010_dev *solo_dev,int chip_id, +static void tw_writebyte (struct solo_dev *solo_dev,int chip_id,u8 tw6x_off,u8 tw_off,u8 val) {if (is_tw286x (solo_dev, chip_id))
@@ -166,7 +166,7 @@ static void tw_writebyte(struct solo6010_dev *solo_dev, int chip_id, tw_off, val); } -static void tw_write_and_verify (struct solo6010_dev *solo_dev,u8 addr,u8 off, +static void tw_write_and_verify (struct solo_dev *solo_dev,u8 addr,u8 off,u8 val) {int i;
@@ -180,11 +180,11 @@ static void tw_write_and_verify(struct solo6010_dev *solo_dev, u8 addr, u8 off,msleep_interruptible (1 ); } -/* printk("solo6010/tw28: Error writing register: %02x->%02x [%02x]\n", +/* printk("solo6x10/tw28: Error writing register: %02x->%02x [%02x]\n", addr, off, val); */ } -static int tw2865_setup (struct solo6010_dev *solo_dev,u8 dev_addr) +static int tw2865_setup (struct solo_dev *solo_dev,u8 dev_addr) {u8 tbl_tw2865_common[256 ];int i;
@@ -234,7 +234,7 @@ static int tw2865_setup(struct solo6010_dev *solo_dev, u8 dev_addr)return 0 ; } -static int tw2864_setup (struct solo6010_dev *solo_dev,u8 dev_addr) +static int tw2864_setup (struct solo_dev *solo_dev,u8 dev_addr) {u8 tbl_tw2864_common[sizeof (tbl_tw2864_template)];int i;
@@ -320,7 +320,7 @@ static int tw2864_setup(struct solo6010_dev *solo_dev, u8 dev_addr)return 0 ; } -static int tw2815_setup (struct solo6010_dev *solo_dev,u8 dev_addr) +static int tw2815_setup (struct solo_dev *solo_dev,u8 dev_addr) {u8 tbl_ntsc_tw2815_common[] = {0x00 ,0xc8 ,0x20 ,0xd0 ,0x06 ,0xf0 ,0x08 ,0x80 ,
@@ -481,7 +481,7 @@ static int tw2815_setup(struct solo6010_dev *solo_dev, u8 dev_addr)#define FIRST_ACTIVE_LINE 0x0008#define LAST_ACTIVE_LINE 0x0102 -static void saa7128_setup (struct solo6010_dev *solo_dev) +static void saa7128_setup (struct solo_dev *solo_dev) {int i;unsigned char regs[128 ] = {
@@ -539,7 +539,7 @@ static void saa7128_setup(struct solo6010_dev *solo_dev)return ; } -int solo_tw28_init (struct solo6010_dev *solo_dev) +int solo_tw28_init (struct solo_dev *solo_dev) {int i;u8 value;
@@ -602,7 +602,7 @@ int solo_tw28_init(struct solo6010_dev *solo_dev)* (address 0x012C) of the SOLO6010 chip doesn't give the correct video * status signal values. */ -int tw28_get_video_status (struct solo6010_dev *solo_dev,u8 ch) +int tw28_get_video_status (struct solo_dev *solo_dev,u8 ch) {u8 val, chip_num;
@@ -619,7 +619,7 @@ int tw28_get_video_status(struct solo6010_dev *solo_dev, u8 ch)#if 0 /* Status of audio from up to 4 techwell chips are combined into 1 variable. * See techwell datasheet for details. */ -u16 tw28_get_audio_status (struct solo6010_dev *solo_dev) +u16 tw28_get_audio_status (struct solo_dev *solo_dev) {u8 val;u16 status =0 ;
@@ -635,8 +635,7 @@ u16 tw28_get_audio_status(struct solo6010_dev *solo_dev) }#endif -int tw28_set_ctrl_val (struct solo6010_dev *solo_dev,u32 ctrl,u8 ch, -s32 val) +int tw28_set_ctrl_val (struct solo_dev *solo_dev,u32 ctrl,u8 ch,s32 val) {char sval;u8 chip_num;
@@ -708,7 +707,7 @@ int tw28_set_ctrl_val(struct solo6010_dev *solo_dev, u32 ctrl, u8 ch,return 0 ; } -int tw28_get_ctrl_val (struct solo6010_dev *solo_dev,u32 ctrl,u8 ch, +int tw28_get_ctrl_val (struct solo_dev *solo_dev,u32 ctrl,u8 ch,s32 *val) {u8 rval, chip_num;
@@ -768,7 +767,7 @@ int tw28_get_ctrl_val(struct solo6010_dev *solo_dev, u32 ctrl, u8 ch,* don't need to offset TW_CHIP_OFFSET_ADDR. The TW_CHIP_OFFSET_ADDR used * is the base address of the techwell chip. */ -void tw2815_Set_AudioOutVol (struct solo6010_dev *solo_dev,unsigned int u_val) +void tw2815_Set_AudioOutVol (struct solo_dev *solo_dev,unsigned int u_val) {unsigned int val;unsigned int chip_num;
@@ -785,7 +784,7 @@ void tw2815_Set_AudioOutVol(struct solo6010_dev *solo_dev, unsigned int u_val) }#endif -u8 tw28_get_audio_gain (struct solo6010_dev *solo_dev,u8 ch) +u8 tw28_get_audio_gain (struct solo_dev *solo_dev,u8 ch) {u8 val;u8 chip_num;
@@ -801,7 +800,7 @@ u8 tw28_get_audio_gain(struct solo6010_dev *solo_dev, u8 ch)return (ch %2 ) ? (val >>4 ) : (val &0x0f ); } -void tw28_set_audio_gain (struct solo6010_dev *solo_dev,u8 ch,u8 val) +void tw28_set_audio_gain (struct solo_dev *solo_dev,u8 ch,u8 val) {u8 old_val;u8 chip_num;
drivers/staging/solo6x10/tw28.h +11 -13
@@ -17,8 +17,8 @@* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#ifndef __SOLO6010_TW28_H -#define __SOLO6010_TW28_H +#ifndef __SOLO6X10_TW28_H +#define __SOLO6X10_TW28_H#include "solo6x10.h"
@@ -46,20 +46,18 @@#define TW286x_AUDIO_OUTPUT_VOL_ADDR 0xdf#define TW286x_AUDIO_INPUT_GAIN_ADDR (n) (0xD0 + ((n > 1) ? 1 : 0)) -int solo_tw28_init (struct solo6010_dev *solo_dev); +int solo_tw28_init (struct solo_dev *solo_dev); -int tw28_set_ctrl_val (struct solo6010_dev *solo_dev,u32 ctrl,u8 ch, -s32 val); -int tw28_get_ctrl_val (struct solo6010_dev *solo_dev,u32 ctrl,u8 ch, -s32 *val); +int tw28_set_ctrl_val (struct solo_dev *solo_dev,u32 ctrl,u8 ch,s32 val); +int tw28_get_ctrl_val (struct solo_dev *solo_dev,u32 ctrl,u8 ch,s32 *val); -u8 tw28_get_audio_gain (struct solo6010_dev *solo_dev,u8 ch); -void tw28_set_audio_gain (struct solo6010_dev *solo_dev,u8 ch,u8 val); -int tw28_get_video_status (struct solo6010_dev *solo_dev,u8 ch); +u8 tw28_get_audio_gain (struct solo_dev *solo_dev,u8 ch); +void tw28_set_audio_gain (struct solo_dev *solo_dev,u8 ch,u8 val); +int tw28_get_video_status (struct solo_dev *solo_dev,u8 ch);#if 0 -unsigned int tw2815_get_audio_status (struct SOLO6010 *solo6010); -void tw2815_Set_AudioOutVol (struct SOLO6010 *solo6010,unsigned int u_val); +unsigned int tw2815_get_audio_status (struct SOLO *solo); +void tw2815_Set_AudioOutVol (struct SOLO *solo,unsigned int u_val);#endif -#endif /* __SOLO6010_TW28_H */ +#endif /* __SOLO6X10_TW28_H */
drivers/staging/solo6x10/v4l2-enc.c +42 -42
314 lines not on this page · raw message
drivers/staging/solo6x10/v4l2.c +32 -32
233 lines not on this page · raw message
Signature · 4 lines
Krzysztof Halasa Research Institute for Automation and Measurements Al. Jerozolimskie 202, 02-486 Warsaw, Poland