/* * echo bank_address > ECRom , for EC ROM read * echo bank_address_data > ECRom , for EC ROM write */ static ssize_t ECRom_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { u8 val8_0, val8_1; u16 val16_bank, val16_address, val16_address_data; if(n == 7) //write data to EC ROM { val8_0 = TransformCharToByte(buf,4); //data val8_1 = TransformCharToByte(buf,2); //address val16_address_data = TransformToWord(val8_0, val8_1); val8_0 = TransformCharToByte(buf,0); //Rom Bank number val16_bank = TransformToWord(val8_0, 0); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x75,val16_bank); //write bank i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x76,val16_address_data); //write address_data } else if(n == 5) //write address for EC ROM read { val8_0 = TransformCharToByte(buf,2); //address val8_1 = TransformCharToByte(buf,0); //Rom Bank number val16_address = TransformToWord(val8_0, 0); val16_bank = TransformToWord(val8_1, 0); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x75,val16_bank); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x77,val16_address); } msleep(10); return n; }
//echo addresshbyte_addresslbyte_val > ECWrite static ssize_t ECWrite_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { u8 val8_0, val8_1; u16 val16; val8_0 = TransformCharToByte(buf,2); val8_1 = TransformCharToByte(buf,0); val16 = TransformToWord(val8_0, val8_1); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0xF0,val16); //write address val8_1 = 0; val8_0 = TransformCharToByte(buf,4); val16 = TransformToWord(val8_0, val8_1); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0xF2,val16); //write value 00xx return n; }
static ssize_t Suspend_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x53,0); msleep(100); return n; }
//echo cmd_val16 > ECflashwrite static ssize_t ECflashwrite_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { u16 val16; val16 = TransformToWord(buf[2], buf[1]); i2c_smbus_write_word_data_retry(EC_Bat_device->client, buf[0], val16); return n; }
/* Using for enable/disable CABC when recording by internal MIC. */ void setAudioCABC(int enable) { s32 ret; u16 cur; ret = i2c_smbus_read_word_data_retry(EC_Bat_device->client,0x4c); cur = ret & 0x0000ffff; msleep(10); if (enable) { cur = cur | (0x1 << 8); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x4d,cur); msleep(10); } else { cur = cur & (!(0x1 << 8)); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x4d,cur); msleep(10); } }
static ssize_t DeviceStatus_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { int buffer; u16 val; buffer = atoi(buf); val = buffer & 0x0000FFFF; i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x49,val); return n; }
extern void start_stop_psensor(bool on) { if(on) PsensorPower_val = 1 & 0xf; else PsensorPower_val = 0 & 0xf; i2c_smbus_write_word_data_retry(EC_Bat_device->client, 0x4b, PsensorPower_val); msleep(50); }
static ssize_t BatCtlEnable_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { int buffer; s16 BatCtlEnable_val; buffer = atoi(buf); BatCtlEnable_val = buffer & 0x0000FFFF; i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x50,BatCtlEnable_val); msleep(100); return n; }
//echo 1 > ThreeGPower(poweron) , echo 0 > ThreeGPower(poweroff), echo 2 > ThreeGPower(backtoOriginstate) static ssize_t ThreeGPower_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { int buffer; buffer = atoi(buf); ThreeGPower_val = buffer & 0x0000FFFF; i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x45,ThreeGPower_val); msleep(100); return n; }
static ssize_t ManufactureDate_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { u8 val8_0, val8_1; u16 val16; val8_0 = TransformCharToByte(buf,6); val8_1 = TransformCharToByte(buf,4); val16 = TransformToWord(val8_0, val8_1); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x6f,val16); msleep(10); val8_0 = TransformCharToByte(buf,2); val8_1 = TransformCharToByte(buf,0); val16 = TransformToWord(val8_0, val8_1); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x6f,val16); msleep(10); return n; }
static int EC_Bat_suspend(struct i2c_client *client, pm_message_t state) { s32 ret; struct EC_Bat_device_info *EC_Bat_device = i2c_get_clientdata(client); del_timer_sync(&poll_timer); if(Resume_val != 0) i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x56,Resume_val); return 0; }
//echo 0 > GPS(off), echo 1 > GPS(on) static ssize_t GPSPower_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { int buffer; buffer = atoi(buf); GPS_val = buffer & 0x0000FFFF; if(GPS_val == 0) { i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x47,0); } else if(GPS_val == 1) { i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x4a,0); } else { goto fail; } fail: return n; }
/* * echo 0 > HomekeyLED (Return to normal control) * echo 1 > HomekeyLED (Always on) * echo 2 > HomekeyLED (Fast blink) * echo 3 > HomekeyLED (Low blink) */ static ssize_t HomekeyLED_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { int buffer; buffer = atoi(buf); if (buffer >= 0 && buffer <= 3) { homekeyled_val = buffer & 0x0000FFFF; i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x46,homekeyled_val); msleep(10); } return n; }
//echo 0 > MicSwitch(front) , echo 1 > MicSwitch(back), echo 2 > MicSwitch(normal) //echo 3 > MicSwitch(echo cancellation test), echo 4 > MicSwitch(disable echo cancellation) static ssize_t MicSwitch_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { int buffer; buffer = atoi(buf); MicSwitch_val = buffer & 0x0000FFFF; if(MicSwitch_val < 0 || MicSwitch_val > 9) { goto fail; } i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x44,MicSwitch_val); msleep(100); fail: return n; }
static ssize_t BTMAC_store(struct kobject *kobj, struct kobj_attribute *attr, const char * buf, size_t n) { u8 val8_0, val8_1; u16 val16; int i; for(i=0;i<=2;i++) { val8_0 = TransformCharToByte(buf,10-4*i); val8_1 = TransformCharToByte(buf,8-4*i); val16 = TransformToWord(val8_0, val8_1); i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x63,val16); msleep(10); } return n; }
void enable_ThreeGPower(void) { ThreeGPower_val = 1; i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x45,ThreeGPower_val); msleep(100); }
void SysRestart(void ) { i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x55,1); }
void SysShutdown(void ) { i2c_smbus_write_word_data_retry(EC_Bat_device->client,0x52,0); }