⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tm6000.c

📁 该代码介绍了天敏电视盒ut340的核心芯片tm6000在linux下的驱动代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(10*sizeof(__u8), GFP_KERNEL);	data[0]=0x00;	data[1]=0x0a;	data[2]=0x4d;	data[3]=0x8c;	data[4]=0xf2;	data[5]=0xd8;	data[6]=0xcf;	data[7]=0x30;	data[8]=0x79;	data[9]=0x9f;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x06c2, 0x00, data, 0xa);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(3*sizeof(__u8), GFP_KERNEL);	data[0]=0x0d;	data[1]=0xa4;	data[2]=0x6c;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x0bc2, 0x00, data, 0x3);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(14*sizeof(__u8), GFP_KERNEL);	data[0]=0x01;	data[1]=0x67;	data[2]=0x24;	data[3]=0x40;	data[4]=0x08;	data[5]=0xc3;	data[6]=0x20;	data[7]=0x10;	data[8]=0x64;	data[9]=0x3c;	data[10]=0xfa;	data[11]= 0xf7;	data[12]= 0xe1;	data[13]= 0x0c;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x0ac2, 0x00, data, 0xe);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x2c;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x0ac2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x0b;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x09c2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x13;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x10c2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x12;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x16c2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x02;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x1fc2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x02;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x21c2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x02;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x01c2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x10;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x2bc2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x02;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x02c2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x03;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0x02c2, 0x00, data, 0x1);	kfree(data);	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	data = kzalloc(1*sizeof(__u8), GFP_KERNEL);	data[0]=0x8c;	ret = tm6000_snd_control_msg(tm6000_dev, 0x10, 0xc2, 0x00, data, 0x1);	kfree(data);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x04, 0x002, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x01, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	ret = tm6000_snd_control_msg(tm6000_dev, 0x03, 0x0101, 0x00, 0x0, 0x0);	if(ret < 0) {		goto i2c_err;	}	tm6000_dev->dvb_frontend = zl10353_attach(&zl10353_config, &tm6000_dev->zl10353_i2c_adapter);	if(!tm6000_dev->dvb_frontend) {		printk("tm6000: couldn't attach zl10353\n");		goto i2c_err;	}	tm6000_dev->dvb_frontend->ops.set_frontend = tm6000_set_frontend;//	tm6000_dev->dvb_frontend->ops.init = tm6000_zl103530_init;	tm6000_dev->dvb_frontend->ops.init = NULL;	tm6000_dev->dvb_frontend->ops.sleep = NULL;// 	tm6000_dev->dvb_frontend->ops.read_snr = tm6000_read_snr;	tm6000_dev->dvb_frontend->ops.read_signal_strength = NULL;	tm6000_dev->dvb_frontend->ops.read_status = zl10353_read_status;	(tm6000_dev->dvb_frontend)->ops.tuner_ops.get_frequency = tm6000_get_frequency;// 	(tm6000_dev->dvb_frontend)->ops.tuner_ops.set_frequency = tm6000_set_frequency;// 	(tm6000_dev->dvb_frontend)->ops.tuner_ops.set_params = tm6000_set_frontend;	ret = dvb_register_adapter (&tm6000_dev->dvb_adapter, "Trident TVMaster 6000 DVB-T", THIS_MODULE, &dev->dev);	tm6000_dev->dvb_adapter.priv = tm6000_dev;	if(tm6000_dev->dvb_frontend) {		ret = dvb_register_frontend(&tm6000_dev->dvb_adapter, tm6000_dev->dvb_frontend);		if(ret < 0) {			printk("tm6000: couldn't register frontend\n");			goto i2c_err;		}	}	else {		printk("tm6000: no frontend found\n");	}	tm6000_dev->dvb_demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING | DMX_MEMORY_BASED_FILTERING;	tm6000_dev->dvb_demux.priv = tm6000_dev;	tm6000_dev->dvb_demux.filternum = 256;	tm6000_dev->dvb_demux.feednum = 256;	tm6000_dev->dvb_demux.start_feed = tm6000_start_feed;	tm6000_dev->dvb_demux.stop_feed = tm6000_stop_feed;	tm6000_dev->dvb_demux.write_to_decoder = NULL;	ret = dvb_dmx_init(&tm6000_dev->dvb_demux);	if(ret < 0) {		printk("tm6000: dvb_dmx_init failed (errno = %d)\n", ret);		goto i2c_err;	}	tm6000_dev->dmxdev.filternum = 	tm6000_dev->dvb_demux.filternum;	tm6000_dev->dmxdev.demux = &tm6000_dev->dvb_demux.dmx;	tm6000_dev->dmxdev.capabilities = 0; 	ret =  dvb_dmxdev_init(&tm6000_dev->dmxdev, &tm6000_dev->dvb_adapter);	if(ret < 0) {		printk("tm6000: dvb_dmxdev_init failed (errno = %d)\n", ret);		goto dvb_dmx_err;	}	// init remote polling//	INIT_WORK(&tm6000_dev->remote_work_struct, tm6000_poll_remote, tm6000_dev);//	schedule_delayed_work(&tm6000_dev->remote_work_struct, msecs_to_jiffies(30));	// we want to deal with this interface on the device	return 0;dvb_dmx_err:	dvb_dmx_release(&tm6000_dev->dvb_demux);i2c_err:	i2c_del_adapter(&tm6000_dev->xc3028_i2c_adapter);i2c_err2:	i2c_del_adapter(&tm6000_dev->zl10353_i2c_adapter);intf_err:	usb_put_dev(dev);	mutex_destroy(&tm6000_dev->mutex);	kfree(tm6000_dev);err:	return -1;}void disconnect(struct usb_interface *intf){	struct tm6000_device *tm6000_dev = usb_get_intfdata(intf);	if(tm6000_dev == NULL) {		return;	}// 	cancel_delayed_work(&tm6000_dev->remote_work_struct);// 	flush_scheduled_work();	mutex_lock(&tm6000_driver.open_close_mutex);	if(tm6000_dev->urb != NULL) {		usb_unlink_urb(tm6000_dev->urb);		usb_free_urb(tm6000_dev->urb);	}	if(tm6000_dev->transfer_buffer != NULL) {		kfree(tm6000_dev->transfer_buffer);	}	if(tm6000_dev->dvb_frontend) {		dvb_unregister_frontend(tm6000_dev->dvb_frontend);	} 	dvb_dmxdev_release(&tm6000_dev->dmxdev);	dvb_dmx_release(&tm6000_dev->dvb_demux);	dvb_unregister_adapter (&tm6000_dev->dvb_adapter);	i2c_del_adapter(&tm6000_dev->xc3028_i2c_adapter);	i2c_del_adapter(&tm6000_dev->zl10353_i2c_adapter);	usb_put_dev(tm6000_dev->usb_device);	usb_set_intfdata(intf, NULL);	mutex_unlock(&tm6000_driver.open_close_mutex);	kfree(tm6000_dev);}int init_module(void){	request_module("firmware_class");	request_module("dvb_core");	request_module("zl10353");	INIT_LIST_HEAD(&tm6000_driver.devices);	mutex_init(&tm6000_driver.open_close_mutex);	usb_register(&tm6000_driver.driver);	return 0;}void cleanup_module(void){	usb_deregister(&tm6000_driver.driver);	mutex_destroy(&tm6000_driver.open_close_mutex);} EXPORT_SYMBOL(tm6000_snd_control_msg);EXPORT_SYMBOL(tm6000_rcv_control_msg);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -