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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}