/** * ug31xx_save_config_data - save config data * @name : Power Supply name * @data : config data input pointer * @len : length of config data * */ int ug31xx_save_config_data(const char *name, u8 *data, int len) { int mip_offset, ret; int i; pr_info("%s:\n", __func__); /* write the fuel gauge config data to umip */ mip_offset = BATT_UG31_FG_TBL_BODY + BATT_UG31_RESERVED; //mip_offset = UMIP_REF_FG_TBL + BATT_FG_TBL_BODY; ret = intel_scu_ipc_write_umip(data, len, mip_offset); if (ret) { UG31_LOGE("%s: * umip write failed *\n", name); } #ifdef BATT_DATA_DEBUG else { for (i=0; i<len; i++) printk("0x%02X ", *(data + i)); printk("\n"); } #endif return ret; }
/** * mfld_fg_save_config_data - save config data * @name : Power Supply name * @data : config data input pointer * @len : length of config data * */ int mfld_fg_save_config_data(const char *name, void *data, int len) { int mip_offset, ret; /* write the fuel gauge config data to umip */ mip_offset = UMIP_REF_FG_TBL + BATT_FG_TBL_BODY; ret = intel_scu_ipc_write_umip((u8 *)data, len, mip_offset); return ret; }
int ug31xx_write_backup_tag(const char *name, u8 *data) { int mip_offset, ret; pr_warn("%s:\n", __func__); mip_offset = BATT_UG31_FG_TBL_BODY; ret = intel_scu_ipc_write_umip(data, 1, mip_offset); if (ret) UG31_LOGE("%s: * umip write failed *\n", name); return ret; }
ssize_t Factory_UMIP_store(struct device *dev, struct device_attribute *attr, const char *buffer, size_t count) { int ret = 0; u8 data_write; u8 yes; u8 no; bool bv; if (strlen(buffer) != 2) { pr_err("The length must be 1\n"); ret = -EINVAL; goto error; } ret = strtobool(buffer, &bv); if (ret) { pr_err("Not expected value [Y|y|1|N|n|0]\n"); goto error; } if (intel_mid_identify_cpu() == INTEL_MID_CPU_CHIP_PENWELL) { ret = intel_scu_ipc_read_mip(&data_write, 1, FACTORY_UMIP_OFFSET, 0); data_write &= ~(1 << FACTORY_BIT_OFFSET); data_write |= bv; ret = intel_scu_ipc_write_umip(&data_write, 1, FACTORY_UMIP_OFFSET); if (ret) { pr_err("Could not write to UMIP for Factory\n"); goto error; } } return count; error: return ret; }
static ssize_t mip_cmd_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { int ret; memset(mip_cmd, 0, sizeof(mip_cmd)); ret = sscanf(buf, "%10s", mip_cmd); if (ret == 0) { mip_dbg_error = -EINVAL; goto end; } if (!strncmp("read_mip", mip_cmd, MIP_CMD_LEN)) { memset(mip_data, 0, sizeof(mip_data)); ret = intel_scu_ipc_read_mip(mip_data, mip_len, mip_offset, mip_issigned); if (!ret) valid_data_nr = mip_len; } else if (!strncmp("write_umip", mip_cmd, MIP_CMD_LEN)) { if (mip_len == valid_data_nr) { ret = intel_scu_ipc_write_umip(mip_data, mip_len, mip_offset); } else goto error; } else goto error; if (ret) goto error; else goto end; error: mip_dbg_error = -EINVAL; end: return size; }
ssize_t usb_host_enable_timeout_store(struct device *dev, struct device_attribute *attr, const char *buffer, size_t count) { int ret_ipc, i, string_length; char timeout[MAX_USB_TIMEOUT_LEN]; string_length = strlen(buffer); if (string_length < MAX_USB_TIMEOUT_LEN) { snprintf(timeout, sizeof(timeout), "%s", buffer); } else { pr_err("Invalid value written." "Check the Availabe values that can be used\n"); return count; } for (i = 0; i < MAX_NUM_TIMEOUTS; i++) { if (strncmp(timeout, available_usb_host_enable_timeouts[i].name, strlen(available_usb_host_enable_timeouts[i].name))) continue; ret_ipc = intel_scu_ipc_write_umip( &available_usb_host_enable_timeouts[i].umip_value, 1, USB_ENABLE_UMIP_OFFSET); if (ret_ipc) pr_err("Could not write to UMIP USB Host Enable\n"); break; } /* if i is equal to arr_len, that means there is no match */ if (i == MAX_NUM_TIMEOUTS) { pr_err("Invalid value written." "Check the Availabe values that can be used\n"); } return count; }