Exemple #1
0
/*
 * 20100111,HSL@RK,use LUN to dicide call at task or irq.
 * lun==0: at irq , other at task.
 */
static int rkusb_function_call_callback( struct rkusb_dev *dev )
{
         int     ret;
         rk28printk("%s::cmd=%s,crash=%d\n" , __func__ , (char*) dev->req_out->buf , rk28_system_crash );
         if( !__rkusb_write_enable() ) {
                //if( !strcmp((char*) dev->req_out->buf , rkusb_en_read) ) {
                //        rk28_system_crash = 2;
                //        rkusb_send_csw_result( dev , rk28_system_crash);
                //        return RKUSB_CB_OK_NONE;
                //}
                if( !strcmp((char*) dev->req_out->buf , rkusb_en_write) ) {
                        rk28_system_crash = RKDBG_WRITE;
                        rkusb_send_csw_result( dev , rk28_system_crash);
                        return RKUSB_CB_OK_NONE;
                }
                return RKUSB_CB_FAILD;
        }
        if( DEV_LUN(dev) == 0 ) {
                ret = __rk28_scu_parse_cmd((char*) dev->req_out->buf);
                rk28printk("cmd ret = 0x%x(%d)" , ret ,ret );
                rkusb_send_csw_result( dev , ret );
        } else {
                rkusb_wakeup_thread( dev );
        }
        return RKUSB_CB_OK_NONE;
}
// ================================================================================
// Function Name --- GetFirmwareInformation
// Description --- Get firmware information
// Input --- NULL
//Output --- return true if the command execute successfully, otherwuse return false.
// ================================================================================
bool GetFirmwareInformation(struct i2c_client *client)
{
	u8 ucWriteLength, ucReadLength;
	u8 pucData[128];
	u8 ucQuery;
int i;
	ucWriteLength = 2;
	ucReadLength = 0x09;
	pucData[0] = 0x01;
	pucData[1] = 0x00;

	// Query
	do
	{
		if(!ReadQueryBuffer(client, &ucQuery))
		{
			ucQuery = QUERY_BUSY;
		}
	}while(ucQuery & QUERY_BUSY);

	// Write Command
	if(!WriteCommandBuffer(client, pucData, ucWriteLength))
	{
		return false;
	}

	// Query
	do
	{
		if(!ReadQueryBuffer(client, &ucQuery))
		{
			ucQuery = QUERY_BUSY;
		}
	}while(ucQuery & QUERY_BUSY);
	pucData[5]= 0 ;
	 pucData[6]= 0 ;
	 pucData[7]= 0 ;
	 pucData[8]= 0;
	// Read Command Response
	if(!ReadCommandResponseBuffer(client, pucData, ucReadLength))
	{
		return false;
	}


	
for (i =0;i<ucReadLength;i++)
	rk28printk("GetFirmwareInformation pucData[%d]=%d \r\n",i,pucData[i]);
	if(pucData[5]== 0 
	&& pucData[6] == 0 
	&& pucData[7] == 0 
	&& pucData[8] == 0) 
	{
		// There is no flash code
		rk28printk("There is no flash code \r\n");
		return false;
	}

	return true;
}
Exemple #3
0
//a@nzy
static irqreturn_t rk28_AD_irq_handler(s32 irq, void *dev_id)
{
	rk28printk("\n =================================rk28_AD_irq_handler===================================\n");

    rk28printk("========= pm_sleep_status=%d   PA0=%d\n", pm_sleep_status, GPIOGetPinLevel(WAKEUP_KEY_PORT));
    
   if( pm_sleep_status == 1)
    {
        g_wake_press = !GPIOGetPinLevel(WAKEUP_KEY_PORT);
        rk28printk("========== in sleep: g_wakeup_key_enable=%d  g_wake_press=%d\n", g_wakeup_key_enable, g_wake_press);
        if(g_wakeup_key_enable)
        {
        	input_report_key(prockAD_button->input_dev,AD1KEY5,1);
        	input_sync(prockAD_button->input_dev);
        	input_report_key(prockAD_button->input_dev,AD1KEY5,0);
        	input_sync(prockAD_button->input_dev);
        	
        	printk("\n%s^^level 2^^Wake Up ^^^^^!!\n",__FUNCTION__);

            g_wakeup_key_enable = 0;

            // cmy@20100326: 只有在5S后,或者系统被唤醒后(pm_sleep_status == 1),才能再处理唤醒IRQ
        	setup_timer(&g_wakeup_key_timer, rk28_enable_wakeup_key, (unsigned long)0);
        	g_wakeup_key_timer.expires  = jiffies + (5*HZ);
        	add_timer(&g_wakeup_key_timer);
        }
    }
    return IRQ_HANDLED;
}
Exemple #4
0
static int mma7660_set_rate(struct i2c_client *client, char rate)
{
	char buffer[2];
	int ret = 0;
	
	if (rate > 128)
        return -EINVAL;
	rk28printk("[ZWP]%s,rate = %d\n",__FUNCTION__,rate);
	//因为增加了滤波功能,即每RawDataLength次才上报一次,所以提升gsensor两个档级
	if(rate > 2)
		rate -= 2;
	rk28printk("[ZWP]%s,new rate = %d\n",__FUNCTION__,rate);

/*	
    for (i = 0; i < 7; i++) {
        if (rate & (0x1 << i))
            break;
    }   
    

	buffer[0] = MMA7660_REG_SR;
	buffer[1] = 0xf8 | (0x07 & (~i));
*/
	buffer[0] = MMA7660_REG_SR;
	buffer[1] = 0xf8 | (0x07 & rate);

	ret = mma7660_tx_data(client, &(buffer[0]), 2);
	ret = mma7660_rx_data(client, &(buffer[0]), 1);

	return ret;
}
static int Ctp_it7250_tx_data(struct i2c_client *client, u8 reg,char *txData, int length)
{
#if 0
    int ret,i;
	struct i2c_adapter *adap = client->adapter;
	struct i2c_msg msg;
	
	u8 buf[128];//128
//	rk28printk("reg=0x%x txData=0x%x  \r\n",reg,*txData);
	buf[0]=reg;
	for (i=0;i<length;i++)
		{
		buf[i+1]=*txData++;
		rk28printk("buf[%d]=0x%x   ",i+1,buf[i+1]);
		}
	rk28printk("\r\n");
//	rk28printk("buf[0]=0x%x buf[1]=0x%x",buf[0],buf[1]);
	msg.addr = client->addr;
//rk28printk("i2c addr=0x%x",msg.addr);
	msg.buf =&buf[0];
	msg.len = length+1;//+1 means add the reg length;by roberts
	msg.flags = client->flags;
	msg.scl_rate = 400*1000;
    
	ret = i2c_transfer(adap, &msg, 1);
return ret;
#else
 return i2c_master_reg8_send(client, reg, txData, length, 400 * 1000);
#endif




}
Exemple #6
0
static int gsensor_sysfs_init(void)
{
	int ret ;

	android_gsensor_kobj = kobject_create_and_add("android_gsensor", NULL);
	if (android_gsensor_kobj == NULL) {
		rk28printk(KERN_ERR
		       "MMA7660 gsensor_sysfs_init:"\
		       "subsystem_register failed\n");
		ret = -ENOMEM;
		goto err;
	}

	ret = sysfs_create_file(android_gsensor_kobj, &dev_attr_vendor.attr);
	if (ret) {
		rk28printk(KERN_ERR
		       "MMA7660 gsensor_sysfs_init:"\
		       "sysfs_create_group failed\n");
		goto err4;
	}

	return 0 ;
err4:
	kobject_del(android_gsensor_kobj);
err:
	return ret ;
}
Exemple #7
0
/*
*  init call at msc or adb set alt.use buf_length to distinguish.
*  adb first!
* __attribute__((weak))
*/
int  rkusb_init(struct rkusb_dev_fsg* dev , struct usb_ep* in_ep , 
        struct usb_ep* out_ep , int fsg )
{
        if( !dev ) {
                rk28printk("%s::clear rkusb\n" , __func__ );
                rkusb_reinit_req(_rkusb_dev,NULL,out_ep);
                _rkusb_dev->ep_in = NULL;
                return 0;
        }
        rk28printk("%s::init rkusb,fsg=%d\n" , __func__ , fsg );
        dev->usb_out = NULL;
        /*
         * 4 init case :
         * 0: only fsg , 1:only adb , 2:fsg first,adb second , 3:adb first,fsg second.
         * we want:if have adb,select adb ,then select fsg.
        */
        if( !_rkusb_dev->ep_in ||  fsg == 0) {
                if( _rkusb_dev->fsg_dev ) 
                        _rkusb_dev->fsg_dev->usb_out_bak = NULL;
                rkusb_reinit_req(_rkusb_dev,in_ep,out_ep);
                _rkusb_dev->fsg_dev = dev;
                _rkusb_dev->fsg = fsg;
                dev->usb_out_bak = rkusb_complete_out;
        }
        dev->rk_dev = _rkusb_dev;
        return 0;
}
static int __init Ctp_it7250_init(void)
{
	int ret;	
	rk28printk("+++++++     %s++\n", __FUNCTION__);
	ret=i2c_add_driver(&Ctp_it7250_driver);
	rk28printk("**Ctp_it7250_init_init return %d**\n",ret);
	return ret;
}
Exemple #9
0
static int xpt2046_read_values(struct XPT2046_TS_EVENT *ts_dev)
{
    uint16 *ptmpdata;
    int ret = 0,cnt = 0;
    bool accept = false;
    int tmp_p = 0;
    ptmpdata = kzalloc(sizeof(uint16)*2, GFP_KERNEL);
    do {
        ptmpdata[0] = gLastZvalue[0];
        ptmpdata[1] = gLastZvalue[1];
        accept = xpt2046_pressure_filter(ts_dev);
        //accept = true;
        if(accept)
        {
            ptmpdata[0]= PT2046_read_op(ts_dev,READ_X);
            udelay(ADC_DELAYS);
            ptmpdata[1]= PT2046_read_op(ts_dev,READ_Y);
            udelay(ADC_DELAYS);
            gLastZvalue[0] = ptmpdata[0];
            gLastZvalue[1] = ptmpdata[1];
            ret++;
        }
        //printk("pressure = %d,	x = %d	y = %d	   accept = %d \n",gDebugData[0], ptmpdata[0], ptmpdata[1], accept);
        cnt++;
    } while(cnt<2||0!=TouchFilter(&ptmpdata[0],&ptmpdata[1],ts_dev->pendown));
    tmp_p = tmp_save_ad_point_num % SAVEPOINTMAXNUM;
    if(ret)
    {
        ts_dev->x = gLastZvalue[0];
        ts_dev->y = gLastZvalue[1];
        if(cal_status_android < 5 && cal_status_android >= 0)
        {
            tmp_save_ad_point_x[tmp_p] = ts_dev->x;
            tmp_save_ad_point_y[tmp_p] = ts_dev->y;
            tmp_save_ad_point_num ++;
        }
    }
    else
    {
        ts_dev->x = 0;
        ts_dev->y = 4095;
    }

    //printk("xpt2046_read_values()   ts_dev->x = %d,	  ts_dev->y = %d	 cal_status_android = %d  tmp_save_ad_point_num = %d   tmp_p = %d \n",
    //	ts_dev->x, ts_dev->y, cal_status_android, tmp_save_ad_point_num, tmp_p);

    gDebugData[1] = ts_dev->x;
    gDebugData[2] = ts_dev->y;
    rk28printk("pressure = %d	adx = %d	ady = %d\n",gDebugData[0],gDebugData[1],gDebugData[2]);
    rk28printk("pressure = %d\n",gDebugData[0]);
    kfree(ptmpdata);
    return ret;
}
//a@nzy
static irqreturn_t rk28_AD_irq_handler(s32 irq, void *dev_id)
{
	rk28printk("\n =================================rk28_AD_irq_handler===================================\n");

   if( rk28_pm_status == 1)
    {
    	input_report_key(prockAD_button->input_dev,AD1KEY5,1);
    	input_sync(prockAD_button->input_dev);
    	input_report_key(prockAD_button->input_dev,AD1KEY5,0);
    	input_sync(prockAD_button->input_dev);
	g_wake =1;
    }
	rk28printk("\n%s^^^^Wake Up ^^^^^!!\n",__FUNCTION__);
    return IRQ_HANDLED;
}
Exemple #11
0
static int ts_input_init(struct i2c_client *client)
{
	int ret = -1,i;
	struct Ctp_it7250_data *Ctp_it7250;
	Ctp_it7250 = i2c_get_clientdata(client);
	/* register input device */
	Ctp_it7250->input_dev = input_allocate_device();
	if (Ctp_it7250->input_dev == NULL) {
		pr_emerg( "%s: failed to allocate input dev\n",
			__FUNCTION__);
		return -ENOMEM;
	}
rk28printk("+++++++     %s+++++++\n", __FUNCTION__);
	Ctp_it7250->input_dev->name = "CTS_Ctp_it7250";
	Ctp_it7250->input_dev->phys = "CTS_Ctp_it7250/input1";
	Ctp_it7250->input_dev->dev.parent = &client->dev;
     //no need to open & close it,it will do it automaticlly;noted by robert
	Ctp_it7250->input_dev->open = Ctp_it7250_touch_open;
	Ctp_it7250->input_dev->close = Ctp_it7250_touch_close;

	__set_bit(EV_ABS, Ctp_it7250->input_dev->evbit);
	__set_bit(ABS_X, Ctp_it7250->input_dev->absbit);
	__set_bit(ABS_Y, Ctp_it7250->input_dev->absbit);

	__set_bit(EV_SYN, Ctp_it7250->input_dev->evbit);
	__set_bit(EV_KEY, Ctp_it7250->input_dev->evbit);
	__set_bit(BTN_TOUCH, Ctp_it7250->input_dev->keybit);

for (i = 0; i < ARRAY_SIZE(panel_key_info); i++)
{rk28printk("ts_input_init  i=%d\r\n",i);
	__set_bit(panel_key_info[i].key,Ctp_it7250->input_dev->keybit);
}
	//__clear_bit(0, input_dev->keybit);

	input_set_abs_params(Ctp_it7250->input_dev, ABS_X, 0, 1000, 0, 0);
	input_set_abs_params(Ctp_it7250->input_dev, ABS_Y, 0, 1000, 0, 0);
//pr_emerg("+++++++ %s\n", __FUNCTION__); 
	ret = input_register_device(Ctp_it7250->input_dev);
	if (ret) {
		pr_emerg(
			"%s: unabled to register input device, ret = %d\n",
			__FUNCTION__, ret);
		return ret;
	}
	rk28printk("+++++++     %s+++++++END\n", __FUNCTION__);
	return 0;

}
Exemple #12
0
static int mma7660_get_data(struct i2c_client *client)
{
	char buffer[3];
	int ret;
	int x, y, z;
    struct mma7660_axis axis;
    struct mma8452_platform_data *pdata = client->dev.platform_data;
    do {
        memset(buffer, 0, 3);
        buffer[0] = MMA7660_REG_X_OUT;
        ret = mma7660_rx_data(client, &buffer[0], 3);
        if (ret < 0)
            return ret;
    } while ((buffer[0] & 0x40) || (buffer[1] & 0x40) || (buffer[2] & 0x40));

	x =  mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT])*YSENSIT;
	y =  mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT])*XSENSIT;
	z =  mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT])*ZSENSIT;

#if defined(CONFIG_MACH_RK29_ODYS_NEOX8)
	axis.x = x;
	axis.y = -z;
	axis.z = y;
#elif defined(CONFIG_MACH_RK29_ODYS_NEOX7)
	axis.x = -x;
	axis.y = -z;
	axis.z = -y;
#elif  defined(CONFIG_MACH_ODYS_LOOX_PLUS) || defined(CONFIG_MACH_ODYS_NEXT)
	axis.x = x;
	axis.y = z;
	axis.z = -y;
#else
	axis.x = y;
	axis.y = -x;
	axis.z = z;
#endif

	//	printk("l=%-4d,x=%-5d, y=%-5d, z=%-5d. %s:\n",__LINE__,axis.x, axis.y, axis.z, __func__);
	//	printk("%s: x=%-5d, y=%-5d, z=%-d\n",__func__, axis.x, axis.y, axis.z);
		mma7660_report_value(client, &axis);
	//	Xaverage = Yaverage = Zaverage = 0;

	//����RawDataLength��ֵ��ƽ��ֵ
	Xaverage += axis.x;
	Yaverage += axis.y;
	Zaverage += axis.z;
    rk28printk( "%s: ------------------mma7660_GetData axis = %d  %d  %d,average=%d %d %d--------------\n",
           __func__, axis.x, axis.y, axis.z,Xaverage,Yaverage,Zaverage); 
	
	if((++RawDataNum)>=RawDataLength){
		RawDataNum = 0;
		axis.x = Xaverage/RawDataLength;
		axis.y = Yaverage/RawDataLength;
		axis.z = Zaverage/RawDataLength;
	    mma7660_report_value(client, &axis);
		Xaverage = Yaverage = Zaverage = 0;
	}

	return 0;
}
Exemple #13
0
static void mma7660_resume(struct early_suspend *h)
{
	struct i2c_client *client = container_of(mma7660_device.parent, struct i2c_client, dev);
    struct mma7660_data *mma7660 = (struct mma7660_data *)i2c_get_clientdata(client);
	rk28printk("Gsensor mma7760 resume!!\n");
	mma7660_start_dev(client, mma7660->curr_tate);
}
Exemple #14
0
/*
 *   return : = count ok, else failed 
 */
static int rkusb_shell_log_write( struct log_buffer *p , char *buf, int count )
{
        char *pt = buf;
        struct tty_struct *tty_s = (struct tty_struct *)p->private_data;
        int     i = 0;
        int flag = TTY_NORMAL;

        buf[count] = 0;
        rk28printk("%s:log=%s,buf=%s,count=%d,tty_s=0x%p\n" ,__func__ , p->name , pt , count , tty_s );
        if( !tty_s ) {
                return 0;
        }
        #if 0 /* add at pc tools */
        if ( buf[count-1]  != '\n' ) {
                buf[count++] = '\n';
                buf[count] = 0;
        }
        #endif
                
        while( *pt && i < count ) {
                tty_insert_flip_char(tty_s, *pt , flag);
                pt++;
                i++;
        }
        tty_flip_buffer_push( tty_s );
        p->property |= LOG_PROT_MAYWRITE;
        return count;
}
Exemple #15
0
static int rkusb_get_symbol( struct rkusb_dev *dev )
{
        switch ( DEV_FUNC(dev) ) {
        case FUNC_GSYM_KERNEL:
                return rkusb_get_kernel_symbols( dev );
        case FUNC_GSYM_GETTASKS:
                return rksub_get_sym_tasks( dev );
        case FUNC_GSYM_GETTASKVM:
                return rkusb_get_task_mm( dev );
        case FUNC_GSYM_PROFILE:
                {
                char * buf = __rkusb_rwbuffer_start(dev);
                PROFILE_INFO   pe;
                pe.size = sizeof( pe );
                pe.npc = profile_check( buf );
                pe.buf = (unsigned long)buf;
                pe.now = ktime_to_ns( ktime_get() );
                rk28printk("%s::profile n=%ld\n" , __func__ , pe.npc );
                rkusb_normal_data_xfer_onetime( dev , &pe );
                return 0;
                }
        default:
                break;
        }
        return RKUSB_CB_FAILD;
}
Exemple #16
0
static int rkusb_get_kernel_symbols( struct rkusb_dev *dev )
{
        struct __kernel_symbol ks;
        ks.size = sizeof( ks );
        ks._stext = _stext;
        ks._text = _text;
        ks._etext = _etext;
        ks._data = __data_start ; //_data;
        ks._edata = _edata;
        ks.__bss_start = __bss_start;
        ks._end = _end;

        ks.kallsyms_start = (unsigned char*)kallsyms_addresses;
        ks.total_syms_size = (unsigned char*)__start_rodata - ks.kallsyms_start;
        ks._kallsyms_num_syms = kallsyms_num_syms;
        ks._kallsyms_addresses = (unsigned long*)kallsyms_addresses;
        ks._kallsyms_markers = (unsigned long*)kallsyms_markers;
        ks._kallsyms_names = (unsigned char*)kallsyms_names;
        ks._kallsyms_token_index = (unsigned short*)kallsyms_token_index;
        ks._kallsyms_token_table = (unsigned char*)kallsyms_token_table;
        rkusb_normal_data_xfer_onetime( dev , &ks );
        rk28printk("symbols addres=0x%p,names=0x%p,syms=0x%lx\n",
                ks._kallsyms_addresses,ks._kallsyms_names,ks._kallsyms_num_syms);
        return RKUSB_CB_OK_NONE;
}
Exemple #17
0
// *******************************************************************************************
// Function Name: CaptouchHWInitial
// Description: 
//   This function is mainly used to initialize cap-touch controller to active state.
// Parameters: NULL
// Return value: 
//   return zero if success, otherwise return non zero value
// *******************************************************************************************
int CaptouchHWInitial(struct i2c_client *client)
{
	u32 wXResolution=0,wYResolution=0;
	u8 ucStep=0;
	if (!IdentifyCapSensor(client))
	{
		rk28printk("%s IdentifyCapSensor error \r\n",__FUNCTION__);
		printk("%s IdentifyCapSensor error \r\n",__FUNCTION__);
		return false;
		//goto resetagin;
}
	#if 1
if (!GetFirmwareInformation (client))
	{
	rk28printk("%s GetFirmwareInformation error \r\n",__FUNCTION__);
	printk("%s GetFirmwareInformation error \r\n",__FUNCTION__);
	//	goto resetagin;
}

	if (!Get2DResolutions(client, &wXResolution, &wYResolution, &ucStep))
	{
	rk28printk("%s Get2DResolutions error \r\n",__FUNCTION__);
	printk("%s Get2DResolutions error \r\n",__FUNCTION__);
	//	goto resetagin;
}

//no need to set interrupt mode because firmware has done that;note by robert
	#if 0
	if (!SetInterruptNotification(client, 0x01, 0x00))
	{
	rk28printk("%s SetInterruptNotification error \r\n",__FUNCTION__);
	goto resetagin;
}
	#endif
	//note end
#endif
	return true;

#if 0
resetagin:
	if (!CaptouchReset(client))
		rk28printk("CaptouchReset success \r\n");
	mdelay(100);
	#endif
//	if (!CaptouchMode(client, 0x00))
	//	rk28printk("CaptouchMode success \r\n");
}
Exemple #18
0
 static int  Ctp_it7250_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
	struct Ctp_it7250_data *Ctp_it7250;

	Ctp_it7250_client = client;
	rk28printk("+++++++     %s+++++++\n", __FUNCTION__);
	Ctp_it7250 = kzalloc(sizeof(struct Ctp_it7250_data), GFP_KERNEL);
	if (!Ctp_it7250) 
		{
		rk28printk("[Ctp_it7250_probe]:alloc data failed.\n");
		return  -ENOMEM;
		}

//	INIT_WORK(&Ctp_it7250->irq_work, Ctp_it7250_irq_worker);
	INIT_DELAYED_WORK(&Ctp_it7250->delaywork, Ctp_it7250_delaywork_func);

	Ctp_it7250->client = client;
	i2c_set_clientdata(client, Ctp_it7250);
	
	if (!CaptouchHWInitial(client))
		goto  err_free_mem;
	Ctp_it7250_init_irq(client);	
	ts_input_init(client);
//	CTS_configure_pin(client);

#if 0
	lp8725_lilo_en(2,0);
	mdelay(100);

	lp8725_lilo_en(2,1);
	mdelay(100);
	lp8725_set_lilo_vol(2,300);
	mdelay(5);
#endif

//不是查询模式,不需要轮询
//schedule_delayed_work(&Ctp_it7250->delaywork,msecs_to_jiffies(50));


	rk28printk("+++++++     %s+++++++\n", __FUNCTION__);
	return 0;
	err_free_mem:
 	kfree(Ctp_it7250);
	 return false;

}
Exemple #19
0
/*
 *  20100108,HSL@RK,new r/w sdram code. if not kernel space,read at thread one time.
 */
static int rkusb_do_read_sdram( struct rkusb_dev *dev )
{
        int r;
        char *dest = __rkusb_rwbuffer_start( dev );
        #if 0
        r= copy_from_user(dest , (void __user *) DEV_OFFSET( dev ),
                DEV_LENGTH(dev) );
        #else
        r = access_process_vm(dev->slave_task,  DEV_OFFSET( dev ), dest , DEV_LENGTH(dev) , 0);
        #endif
        rk28printk("%s::read task=%s,lba=0x%x,len=%d\n" , __func__ , dev->slave_task->comm,
                DEV_OFFSET( dev ) , DEV_LENGTH(dev));
        if( r  !=  DEV_LENGTH(dev)) {
                rk28printk("get user data error,task=%s,lba=0x%x,r=0x%x\n" , dev->slave_task->comm,DEV_OFFSET( dev ) , r);
        }
        rkusb_normal_data_xfer_onetime( dev , dest );
        return RKUSB_CB_OK_NONE;
}
Exemple #20
0
static int rkusb_write_shell_callback( struct rkusb_dev *dev )
{
        rk28printk("%s:actual len=%d\n" ,__func__ , dev->req_out->actual);
        
        if( dev->log[DEV_LUN(dev)].setlog( &dev->log[DEV_LUN(dev)] , dev->req_out->buf , dev->req_out->actual ) 
                >= dev->req_out->actual ) {
                return RKUSB_CB_OK_CSW;
        }
        return RKUSB_CB_FAILD_CSW;
}
Exemple #21
0
static	int __devexit xpt2046_ts_remove(struct spi_device *pdev)
{
    struct XPT2046_TS_EVENT *ts_dev =dev_get_drvdata(&pdev->dev);
    rk28printk("*****************************xpt2046_ts_remove******************\n");
    free_irq(ts_dev->irq,ts_dev);
    hrtimer_cancel(&ts_dev->timer);
    input_free_device(ts_dev->input);
    kfree(ts_dev);
    return 0;
}
Exemple #22
0
static void mma7660_work_func(struct work_struct *work)
{
	struct mma7660_data *mma7660 = container_of(work, struct mma7660_data, work);
	struct i2c_client *client = mma7660->client;
	
	if (mma7660_get_data(client) < 0) 
		rk28printk(KERN_ERR "MMA7660 mma_work_func: Get data failed\n");
		
	enable_irq(client->irq);		
}
Exemple #23
0
/*
 *      write sdram, just send command to shell.
 */
static int rkusb_set_log( struct rkusb_dev *dev )
{
        rk28printk("%s:lun=%d,lba=0x%08x\n" ,__func__ , DEV_LUN(dev) , DEV_OFFSET(dev));
        if( DEV_LUN(dev) < dev->luns && (dev->log[DEV_LUN(dev)].property & LOG_PROT_WRITE )
                && !__system_crashed() ) {
                rkusb_normal_data_xfer( dev , rkusb_write_shell_callback );
                return RKUSB_CB_OK_NONE;
        } 
        return RKUSB_CB_FAILD;
}
Exemple #24
0
static irqreturn_t xpt2046_ts_interrupt(int irq,void *handle)
{
    struct XPT2046_TS_EVENT *ts_dev = handle;
    unsigned long flags;
    rk28printk("************>%s.....%s.....%d\n",__FILE__,__FUNCTION__,__LINE__);
    spin_lock_irqsave(&ts_dev->lock,flags);
    gpio_irq_disable(PT2046_PENIRQ);
    hrtimer_start(&ts_dev->timer,ktime_set(0,TS_POLL_DELAY),HRTIMER_MODE_REL);
    spin_unlock_irqrestore(&ts_dev->lock, flags);
    return IRQ_HANDLED;
}
Exemple #25
0
static int mma7660_reset_rate(struct i2c_client *client, char rate)
{
	int ret = 0;
	
	rk28printk("\n----------------------------mma7660_reset_rate------------------------\n");
	
    ret = mma7660_close_dev(client);
    ret = mma7660_start_dev(client, rate);
    
	return ret ;
}
Exemple #26
0
static void __exit xpt2046_ts_exit(void)
{
    rk28printk("Touch panel drive XPT2046 driver exit...\n");


    driver_remove_file(&xpt2046_ts_driver.driver, &driver_attr_calistatus);
    driver_remove_file(&xpt2046_ts_driver.driver, &driver_attr_pressure);

    return spi_unregister_driver(&xpt2046_ts_driver);

}
Exemple #27
0
static int Ctp_it7250_suspend(struct i2c_client *client, pm_message_t state)
{//pr_emerg("\n irq1=%d \n",irq1);
	struct Ctp_it7250_data *Ctp_it7250 = (struct Ctp_it7250_data *)i2c_get_clientdata(client);

	rk28printk("%s\n",__func__);

	CaptouchMode(client, 2);
	disable_irq(Ctp_it7250->irq);

	return 0;
}
Exemple #28
0
static int rkusb_xfer_read_filesize( struct rkusb_dev *dev )
{
        FILE_INFO               *fi = rkusb_xfer_cmd_valid( dev );
        if( !fi  || DEV_LENGTH(dev)  < sizeof(unsigned long ) ) {
                rkusb_xfer_error( fi , dev , -FI_ERR_CLEAR);
                return RKUSB_CB_FAILD;
        }
        rk28printk("read file size =0x%lx,trans len=%d\n" , fi->file_size , DEV_LENGTH(dev))
        rkusb_normal_data_xfer_onetime(dev , &fi->file_size);
        return RKUSB_CB_OK_NONE;
}
Exemple #29
0
static void mma7660_report_value(struct i2c_client *client, struct mma7660_axis *axis)
{
	struct mma7660_data *mma7660 = i2c_get_clientdata(client);
    //struct mma7660_axis *axis = (struct mma7660_axis *)rbuf;

	/* Report acceleration sensor information */
    input_report_abs(mma7660->input_dev, ABS_X, - axis->x);
    input_report_abs(mma7660->input_dev, ABS_Y, axis->y);
    input_report_abs(mma7660->input_dev, ABS_Z, axis->z);
    input_sync(mma7660->input_dev);
    rk28printk("Gsensor x==%d  y==%d z==%d\n",axis->x,axis->y,axis->z);
}
Exemple #30
0
static int mma7660_init_client(struct i2c_client *client)
{
	struct mma7660_data *mma7660;
	int ret;
	mma7660 = i2c_get_clientdata(client);
	rk28printk("gpio_to_irq(%d) is %d\n",client->irq,gpio_to_irq(client->irq));
	if ( !gpio_is_valid(client->irq)) {
		rk28printk("+++++++++++gpio_is_invalid\n");
		return -EINVAL;
	}
	ret = gpio_request(client->irq, "mma7660_int");
	if (ret) {
		rk28printk( "failed to request mma7990_trig GPIO%d\n",gpio_to_irq(client->irq));
		return ret;
	}
    ret = gpio_direction_input(client->irq);
    if (ret) {
        rk28printk("failed to set mma7990_trig GPIO gpio input\n");
		return ret;
    }
	gpio_pull_updown(client->irq, GPIOPullUp);
	client->irq = gpio_to_irq(client->irq);
	ret = request_irq(client->irq, mma7660_interrupt, IRQF_TRIGGER_LOW, client->dev.driver->name, mma7660);
	rk28printk("request irq is %d,ret is  0x%x\n",client->irq,ret);
	if (ret ) {
		rk28printk(KERN_ERR "mma7660_init_client: request irq failed,ret is %d\n",ret);
        return ret;
	}
	disable_irq(client->irq);
	init_waitqueue_head(&data_ready_wq);
 
	return 0;
}