/* drivers/rtc/rtc-jwwdt.c - driver for jwwdt * * Copyright (C) 2010 ROCKCHIP, Inc. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ //#define DEBUG //#define pr_fmt(fmt) "rtc: %s: " fmt, __func__ //#include //#include //#include //#include #include #include #include #include #include #include #include #include #include #include "jw_mcu_isp.h" #ifdef CONFIG_OF #include #include #include #endif //----------------read bin s #include #include #include #define ISP_FIRMWARE_FILE_SIZE (1024*12) //----------------read bin e static struct i2c_client *gClient_isp = NULL; struct device_node *node_MCU_isp = NULL; struct device *dev_MCU_isp= NULL; unsigned int pro_1=0; static unsigned char MCU_ISP_FIRMWARE[]={ #include "jw_mcu_isp.dat" }; static int Minix_Mcu_write_isp(struct i2c_client *i2c, char *buf,int count) { int ret=-1; struct i2c_adapter *adap; struct i2c_msg msg; if(!i2c) return ret; adap = i2c->adapter; msg.addr = i2c->addr; msg.buf =(char *)buf; msg.len =count; msg.flags = i2c->flags; ret = i2c_transfer(adap, &msg, 1); return ret; } static ssize_t minixIspUpdateState(struct class *cls, struct class_attribute *attr, char *buf) { u8 state=1; return snprintf(buf, 4, "%02x\n",state); } static struct class *minix_isp_class; static CLASS_ATTR(MCUIspState, 0666, minixIspUpdateState, NULL); static int isp_input_control_probe(struct i2c_client *client, const struct i2c_device_id *id) { int ret = 0; int i,lens; int count_isp; unsigned int pro=0; unsigned char MCU_ISP_CMD[64]; node_MCU_isp = client->dev.of_node; dev_MCU_isp = &client->dev; if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { printk(KERN_ERR "isp_probe: need I2C_FUNC_I2C-----------ison\n"); ret = -ENODEV; return ret; } gClient_isp = client; //--------------------------------read bin s count_isp = sizeof(MCU_ISP_FIRMWARE)/sizeof(char); printk("isp ret = %d-------------ison\n",count_isp); //---------------------------------------------------------------------- memset(MCU_ISP_CMD,0,64); MCU_ISP_CMD[0] = CMD_UPDATE_APROM; ret = Minix_Mcu_write_isp(client, MCU_ISP_CMD, 64); if (ret < 0) { printk("Minix_Mcu_write_isp fail CMD_UPDATE_APROM\n"); return -ENODEV; } msleep(500); memset(MCU_ISP_CMD,0,64); MCU_ISP_CMD[0] = CMD_UPDATE_APROM_DATA; MCU_ISP_CMD[1] = 0; MCU_ISP_CMD[2] = 0; MCU_ISP_CMD[3] = 0; for(i=4;i<64;i++){ MCU_ISP_CMD[i] = MCU_ISP_FIRMWARE[pro++]; } ret = Minix_Mcu_write_isp(client, MCU_ISP_CMD, 64); if (ret < 0) { printk("Minix_Mcu_write_isp fail CMD_UPDATE_APROM_DATA\n"); return -ENODEV; } //------------------------------------------------------------------- msleep(500); while(pro 60){ memset(MCU_ISP_CMD,0,64); MCU_ISP_CMD[0] = CMD_UPDATE_CONTINUOUS; MCU_ISP_CMD[1] = 0; MCU_ISP_CMD[2] = 0; MCU_ISP_CMD[3] = 0; for(i=4;i<64;i++){ MCU_ISP_CMD[i] = MCU_ISP_FIRMWARE[pro++]; } ret = Minix_Mcu_write_isp(client, MCU_ISP_CMD, 64); if (ret < 0) { printk("Minix_Mcu_write_isp fail CMD_UPDATE_CONTINUOUS\n"); return -ENODEV; } msleep(10); } else if(lens < 60){ memset(MCU_ISP_CMD,0,64); MCU_ISP_CMD[0] = CMD_UPDATE_CONTINUOUS_END; MCU_ISP_CMD[1] = 0; MCU_ISP_CMD[2] = 0; MCU_ISP_CMD[3] = 0; for(i=4;i