struct mdnie_table *mdnie_request_table(char *path, struct mdnie_table *s) { char string[50]; unsigned int i, j, size; mdnie_t *buf = NULL; struct mdnie_table *t; int ret = 0; ret = mdnie_check_firmware(path, s->name); if (ret < 0) return NULL; t = kzalloc(sizeof(struct mdnie_table), GFP_KERNEL); t->name = kzalloc(strlen(s->name) + 1, GFP_KERNEL); strcpy(t->name, s->name); memcpy(t, s, sizeof(struct mdnie_table)); if (ret > 0) { for (j = 1, i = MDNIE_CMD1; i <= MDNIE_CMD2; i++, j++) { memset(string, 0, sizeof(string)); sprintf(string, "%s_%d", t->name, j); size = mdnie_request_firmware(path, string, &buf); t->tune[i].sequence = buf; t->tune[i].size = size; pr_info("%s: size is %d\n", string, t->tune[i].size); } } else if (ret == 0) { size = mdnie_request_firmware(path, NULL, &buf); #if defined(CONFIG_EXYNOS_DECON_MDNIE_LITE) for (i = 0; i < size; i++) { if (buf[i] == 0xEC) break; } t->tune[MDNIE_CMD1].sequence = &buf[0]; t->tune[MDNIE_CMD1].size = i; #endif t->tune[MDNIE_CMD2].sequence = &buf[i]; t->tune[MDNIE_CMD2].size = size - i + 1; } /* for (i = 0; i < MDNIE_CMD_MAX; i++) { pr_info("%d: size is %d\n", i, t->tune[i].size); for (j = 0; j < t->tune[i].size; j++) pr_info("%d: %03d: %02x\n", i, j, t->tune[i].sequence[j]); } */ return t; }
static void mdnie_update_sequence(struct mdnie_info *mdnie, struct mdnie_tuning_info *table) { unsigned short *wbuf = NULL; int ret; if (unlikely(mdnie->tuning)) { ret = mdnie_request_firmware(mdnie->path, &wbuf, table->name); if (ret < 0 && IS_ERR_OR_NULL(wbuf)) goto exit; mdnie_send_sequence(mdnie, wbuf); kfree(wbuf); } else mdnie_send_sequence(mdnie, table->sequence); exit: return; }
static ssize_t tuning_show(struct device *dev, struct device_attribute *attr, char *buf) { struct mdnie_info *mdnie = dev_get_drvdata(dev); char *pos = buf; struct mdnie_tuning_info *table; int ret, i; unsigned short *wbuf; pos += sprintf(pos, "++ %s: %s\n", __func__, mdnie->path); if (!mdnie->tuning) { pos += sprintf(pos, "tunning mode is off\n"); goto exit; } if (strncmp(mdnie->path, MDNIE_SYSFS_PREFIX, sizeof(MDNIE_SYSFS_PREFIX) - 1)) { pos += sprintf(pos, "file path is invalid, %s\n", mdnie->path); goto exit; } table = mdnie_request_table(mdnie); if (!IS_ERR_OR_NULL(table)) { ret = mdnie_request_firmware(mdnie->path, &wbuf, table->name); i = 0; while (wbuf[i] != END_SEQ) { pos += sprintf(pos, "0x%04x, 0x%04x\n", wbuf[i], wbuf[i+1]); i += 2; } if (!IS_ERR_OR_NULL(wbuf)) kfree(wbuf); pos += sprintf(pos, "%s\n", table->name); } exit: pos += sprintf(pos, "-- %s\n", __func__); return pos - buf; }