Beispiel #1
0
static
void avia_gt_vbi_irq(u16 irq)
{
	u8 tt_error = 0;
	u8 tt_pts = 0;

	if (avia_gt_chip(ENX)) {
		tt_error = enx_reg_s(TSTATUS)->E;
		tt_pts = enx_reg_s(TSTATUS)->R;
	}
	else if (avia_gt_chip(GTX)) {
		tt_error = gtx_reg_s(TSTATUS)->E;
		tt_pts = gtx_reg_s(TSTATUS)->R;
	}

	avia_gt_reg_set(TSTATUS, E, 0);
	avia_gt_reg_set(TSTATUS, R, 0);

	if (tt_error) {
		printk(KERN_INFO "avia_gt_vbi: error in TS stream\n");
		avia_gt_vbi_stop();
		avia_gt_vbi_start();
	}

	if (tt_pts)
		printk(KERN_INFO "avia_gt_vbi: got pts\n");
}
Beispiel #2
0
void avia_gt_exit(void)
{

#if (!defined(MODULE)) || (defined(MODULE) && !defined(STANDALONE))
	if (init_state >= 13)
		avia_gt_vbi_exit();

	if (init_state >= 12)
		avia_gt_ir_exit();

	if (init_state >= 11)
		avia_gt_pig_exit();

	if (init_state >= 10)
		avia_gt_capture_exit();

	if (init_state >= 9)
		avia_gt_pcm_exit();

	if (init_state >= 8)
		avia_gt_gv_exit();

	if (init_state >= 7)
		avia_gt_dmx_exit();

	if (init_state >= 6)
		avia_gt_accel_exit();
#endif

	if (init_state >= 5) {

		if (avia_gt_chip(ENX))
			avia_gt_enx_exit();
		else if (avia_gt_chip(GTX))
			avia_gt_gtx_exit();

	}

	if (init_state >= 4) {

		if (avia_gt_chip(ENX))
			free_irq(ENX_INTERRUPT, 0);
		else if (avia_gt_chip(GTX))
			free_irq(GTX_INTERRUPT, 0);

	}

	if (init_state >= 3)
		iounmap(gt_info->mem_addr);

	if (init_state >= 2)
		iounmap(gt_info->reg_addr);

	if (init_state >= 1)
		kfree(gt_info);

}
Beispiel #3
0
void avia_gt_unmask_irq(unsigned char irq_reg, unsigned char irq_bit)
{

	if (avia_gt_chip(ENX))
		avia_gt_enx_unmask_irq(irq_reg, irq_bit);
	else if (avia_gt_chip(GTX))
		avia_gt_gtx_unmask_irq(irq_reg, irq_bit);

}
Beispiel #4
0
unsigned short avia_gt_get_irq_status(unsigned char irq_reg)
{

	if (avia_gt_chip(ENX))
		return avia_gt_enx_get_irq_status(irq_reg);
	else if (avia_gt_chip(GTX))
		return avia_gt_gtx_get_irq_status(irq_reg);

	return 0;

}
Beispiel #5
0
void avia_gt_enx_init(void)
{
	printk(KERN_INFO "avia_gt_enx: $Id: avia_gt_enx.c,v 1.21 2003/09/30 05:45:35 obi Exp $\n");
    
	gt_info = avia_gt_get_info();
    
	if (!avia_gt_chip(ENX)) {
		printk("avia_gt_enx: Unsupported chip type\n");
		return;
	}

	enx_reset();
	enx_sdram_ctrl_init();
	enx_dac_init();
	enx_video_init();
	enx_irq_enable();
  
	memset(gt_info->mem_addr, 0xF, 1024 * 1024 /*ENX_MEM_SIZE*/);

	//bring out of reset state
	enx_reg_set(RSTR0, AVI, 0);  // AV - Decoder
	enx_reg_set(RSTR0, QUE, 0);  // Queue Manager
	enx_reg_set(RSTR0, BLIT, 0);   // Blitter / Color expander

	enx_reg_set(CFGR0, TCP, 0);   // disable clip mode teletext
	enx_reg_set(CFGR0, ACP, 0);   // disable clip mode audio
	enx_reg_set(CFGR0, VCP, 0);   // disable clip mode video
}
Beispiel #6
0
void avia_gt_enx_init(void)
{

    printk("avia_gt_enx: $Id: avia_gt_enx.c,v 1.13 2002/09/02 19:25:37 Jolt Exp $\n");
    
    gt_info = avia_gt_get_info();
    
    if (!avia_gt_chip(ENX)) {
    
	printk("avia_gt_enx: Unsupported chip type\n");
	
	return;
    
    }

    enx_reset();
    enx_sdram_ctrl_init();
    enx_dac_init();
    enx_video_init();
    enx_irq_enable();
  
    memset(gt_info->mem_addr, 0xF, 1024 * 1024 /*ENX_MEM_SIZE*/);

    //bring out of reset state
    enx_reg_32(RSTR0) &= ~(1 << 27);  // AV - Decoder
    enx_reg_32(RSTR0) &= ~(1 << 13);  // Queue Manager
    enx_reg_32(RSTR0) &= ~(1 << 6);   // Blitter / Color expander

    enx_reg_32(CFGR0) &= ~(1 << 1);   // disable clip mode audio
    enx_reg_32(CFGR0) &= ~(1 << 0);   // disable clip mode video
    
}
static
int avia_gt_fb_encode_fix(struct fb_fix_screeninfo *fix, const void *fb_par, struct fb_info_gen *info)
{
	struct gtxfb_par *par = (struct gtxfb_par *)fb_par;

	strcpy(fix->id, "AViA eNX/GTX Framebuffer improved version");

	fix->type = FB_TYPE_PACKED_PIXELS;
	fix->type_aux = 0;

	if (par->bpp < 16)
		fix->visual = FB_VISUAL_PSEUDOCOLOR;
	else
		fix->visual = FB_VISUAL_TRUECOLOR;

	fix->line_length = par->stride;
	fix->smem_start = (unsigned long)fb_info.pvideobase;
	fix->smem_len = (AVIA_GT_MEM_GV_SIZE + PAGE_SIZE) & PAGE_MASK;

	fix->xpanstep = 0;
	fix->ypanstep = 1;
	fix->ywrapstep = 0;

	if (avia_gt_chip(GTX)) {
		fix->accel = FB_ACCEL_CCUBE_AVIA_GTX;
		fix->mmio_start = (unsigned long)GTX_REG_BASE;
		fix->mmio_len = (GTX_REG_SIZE + PAGE_SIZE) & PAGE_MASK;
	}
	else if (avia_gt_chip(ENX)) {
		fix->accel = FB_ACCEL_CCUBE_AVIA_ENX;
		fix->mmio_start = (unsigned long)ENX_REG_BASE;
		fix->mmio_len = (ENX_REG_SIZE + PAGE_SIZE) & PAGE_MASK;
	}

	return 0;
}
Beispiel #8
0
int __init avia_gt_init(void)
{

	struct dbox_info_struct	*dbox_info	= (struct dbox_info_struct *)NULL;
	int											 result			=	(int)0;

	printk("avia_gt_core: $Id: avia_gt_core.c,v 1.23 2002/10/05 15:01:12 Jolt Exp $\n");

	if (chip_type == -1) {

		printk("avia_gt_core: autodetecting chip type... ");

		dbox_get_info_ptr(&dbox_info);

		if (dbox_info->enxID != -1) {

			chip_type = AVIA_GT_CHIP_TYPE_ENX;

			printk("AViA eNX found\n");

		} else if (dbox_info->gtxID != -1) {

			chip_type = AVIA_GT_CHIP_TYPE_GTX;

			printk("AViA GTX found\n");

		} else {

			printk("no supported chip type found\n");

		}

	}

	if ((chip_type != AVIA_GT_CHIP_TYPE_ENX) && (chip_type != AVIA_GT_CHIP_TYPE_GTX)) {

		printk("avia_gt_core: Unsupported chip type (gt_info->chip_type = %d)\n", gt_info->chip_type);

		return -EIO;

	}

	memset(gt_isr_proc_list, 0, sizeof(gt_isr_proc_list));

	gt_info = kmalloc(sizeof(gt_info), GFP_KERNEL);

	if (!gt_info) {

		printk(KERN_ERR "avia_gt_core: Could not allocate info memory!\n");

		avia_gt_exit();

		return -1;

	}

	gt_info->chip_type = chip_type;

	init_state = 1;

	if (avia_gt_chip(ENX))
		gt_info->reg_addr = (unsigned char *)ioremap(ENX_REG_BASE, ENX_REG_SIZE);
	else if (avia_gt_chip(GTX))
		gt_info->reg_addr = (unsigned char *)ioremap(GTX_REG_BASE, GTX_REG_SIZE);

	if (!gt_info->reg_addr) {

		printk(KERN_ERR "avia_gt_core: Failed to remap register space.\n");

		return -1;

	}

	init_state = 2;

	if (avia_gt_chip(ENX))
		gt_info->mem_addr = (unsigned char*)ioremap(ENX_MEM_BASE, ENX_MEM_SIZE);
	else if (avia_gt_chip(GTX))
		gt_info->mem_addr = (unsigned char*)ioremap(GTX_MEM_BASE, GTX_MEM_SIZE);

	if (!gt_info->mem_addr) {

		printk(KERN_ERR "avia_gt_core: Failed to remap memory space.\n");

		avia_gt_exit();

		return -1;

	}

	init_state = 3;

	if (avia_gt_chip(ENX))
		result = request_8xxirq(ENX_INTERRUPT, avia_gt_irq_handler, 0, "avia_gt", 0);
	else if (avia_gt_chip(GTX))
		result = request_8xxirq(GTX_INTERRUPT, avia_gt_irq_handler, 0, "avia_gt", 0);

	if (result) {

		printk(KERN_ERR "avia_gt_core: Could not allocate IRQ!\n");

		avia_gt_exit();

		return -1;

	}

	init_state = 4;

	if (avia_gt_chip(ENX))
		avia_gt_enx_init();
	else if (avia_gt_chip(GTX))
		avia_gt_gtx_init();

	init_state = 5;

#if (!defined(MODULE)) || (defined(MODULE) && !defined(STANDALONE))
	if (avia_gt_accel_init()) {

		avia_gt_exit();

		return -1;

	}

	init_state = 6;

	if (avia_gt_dmx_init()) {

		avia_gt_exit();

		return -1;

	}

	init_state = 7;

	if (avia_gt_gv_init()) {

		avia_gt_exit();

		return -1;

	}

	init_state = 8;

	if (avia_gt_pcm_init()) {

		avia_gt_exit();

		return -1;

	}

	init_state = 9;

	if (avia_gt_capture_init()) {

		avia_gt_exit();

		return -1;

	}

	init_state = 10;

	if (avia_gt_pig_init()) {

		avia_gt_exit();

		return -1;

	}

	init_state = 11;

	if (avia_gt_ir_init()) {

		avia_gt_exit();

		return -1;

	}

	init_state = 12;

	if (avia_gt_vbi_init()) {

		avia_gt_exit();

		return -1;

	}
	
	avia_gt_vbi_start();

	init_state = 13;

#endif

	printk(KERN_NOTICE "avia_gt_core: Loaded AViA eNX/GTX driver\n");

	return 0;

}