static ssize_t accessibility_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mdnie_info *mdnie = dev_get_drvdata(dev); int value; unsigned int s[12] = {0, }, i = 0; int ret; mdnie_t *wbuf; ret = sscanf(buf, "%d %x %x %x %x %x %x %x %x %x %x %x %x", &value, &s[0], &s[1], &s[2], &s[3], &s[4], &s[5], &s[6], &s[7], &s[8], &s[9], &s[10], &s[11]); dev_info(dev, "%s: value=%d param cnt : %d\n", __func__, value, ret); if (ret < 0) return ret; else { if (value >= ACCESSIBILITY_MAX) value = ACCESSIBILITY_OFF; mutex_lock(&mdnie->lock); mdnie->accessibility = value; if (value == COLOR_BLIND) { if (ret != MDNIE_COLOR_BLIND_TUNE_CNT + 1) { mutex_unlock(&mdnie->lock); return -EINVAL; } wbuf = &accessibility_table[COLOR_BLIND].tune[MDNIE_CMD1].sequence[MDNIE_COLOR_BLIND_OFFSET]; while (i < MDNIE_COLOR_BLIND_TUNE_CNT) { wbuf[i * 2 + 0] = GET_LSB_8BIT(s[i]); wbuf[i * 2 + 1] = GET_MSB_8BIT(s[i]); i++; } dev_info(dev, "%s: %s\n", __func__, buf); } else if (value == COLOR_BLIND_HBM) { if (ret != MDNIE_COLOR_BLIND_HBM_TUNE_CNT + 1) { mutex_unlock(&mdnie->lock); return -EINVAL; } wbuf = &accessibility_table[COLOR_BLIND_HBM].tune[MDNIE_CMD1].sequence[MDNIE_COLOR_BLIND_OFFSET]; while (i < MDNIE_COLOR_BLIND_HBM_TUNE_CNT) { wbuf[i * 2 + 0] = GET_LSB_8BIT(s[i]); wbuf[i * 2 + 1] = GET_MSB_8BIT(s[i]); i++; } dev_info(dev, "%s: %s\n", __func__, buf); } mutex_unlock(&mdnie->lock); mdnie_update(mdnie); } return count; }
static ssize_t accessibility_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct mdnie_info *mdnie = dev_get_drvdata(dev); int value; unsigned int s[12] = {0, }, i = 0; int ret; mdnie_t *wbuf; struct mdnie_scr_info *scr_info = mdnie->tune->scr_info; ret = sscanf(buf, "%d %x %x %x %x %x %x %x %x %x %x %x %x", &value, &s[0], &s[1], &s[2], &s[3], &s[4], &s[5], &s[6], &s[7], &s[8], &s[9], &s[10], &s[11]); dev_info(dev, "%s: value: %d, cnt: %d\n", __func__, value, ret); if (ret < 0) return ret; else { if (value >= ACCESSIBILITY_MAX) value = ACCESSIBILITY_OFF; mutex_lock(&mdnie->lock); mdnie->accessibility = value; if (value == COLOR_BLIND || value == COLOR_BLIND_HBM) { if (ret > ARRAY_SIZE(s) + 1) { mutex_unlock(&mdnie->lock); return -EINVAL; } wbuf = &mdnie->tune->accessibility_table[value].seq[scr_info->index].cmd[scr_info->color_blind]; while (i < ret - 1) { wbuf[i * 2 + 0] = GET_LSB_8BIT(s[i]); wbuf[i * 2 + 1] = GET_MSB_8BIT(s[i]); i++; } dev_info(dev, "%s: %s\n", __func__, buf); } mutex_unlock(&mdnie->lock); mdnie_update(mdnie); } return count; }