ssize_t touchkey_update_write(struct file *filp, const char *buf, size_t count, loff_t * f_pos) { unsigned char *pdata; disable_irq(IRQ_TOUCH_INT); printk("count = %d\n", count); pdata = kzalloc(count, GFP_KERNEL); if (pdata == NULL) { printk("memory allocate fail \n"); return 0; } if (copy_from_user(pdata, buf, count)) { printk("copy fail \n"); kfree(pdata); return 0; } mcsdl_download_binary_file((unsigned char *)pdata, (unsigned short)count); kfree(pdata); init_hw(); enable_irq(IRQ_TOUCH_INT); return count; }
void touchkey_update_func(struct work_struct *p) { int retry = 10; touchkey_update_status = 1; printk("%s start\n", __FUNCTION__); while (retry--) { if (mcsdl_download_binary_file() == 1) { touchkey_update_status = 0; printk("touchkey_update successed\n"); return; } } touchkey_update_status = -1; printk("touchkey_update failed\n"); return; }