static int set_manual_sw(struct tsu6721_muic_data *muic_data, bool on)
{
	int shift = CTRL_MANUAL_SW_SHIFT;
	int ret = 0;

	ret = set_ctrl_reg(muic_data, shift, on);

	return ret;
}
static int set_int_mask(struct tsu6721_muic_data *muic_data, bool on)
{
	int shift = CTRL_INT_MASK_SHIFT;
	int ret = 0;

	ret = set_ctrl_reg(muic_data, shift, on);

	return ret;
}
static int set_raw_data(struct tsu6721_muic_data *muic_data, bool on)
{
	int shift = CTRL_RAW_DATA_SHIFT;
	int ret = 0;

	ret = set_ctrl_reg(muic_data, shift, on);

	return ret;
}
Exemple #4
0
static int xylonfb_parse_vmode_info(struct device_node *np,
	struct xylonfb_init_data *init_data)
{
	struct device_node *dn, *vmode_dn;
	u32 const *prop;
	char *c;
	unsigned long pix_data_invert, pix_clk_act_high;
	int size, tmp;

	init_data->active_layer = 0;
	init_data->vmode_params_set = false;

	dn = of_find_node_by_name(NULL, "xylon-video-params");
	if (dn == NULL) {
		pr_err("Error getting video mode parameters\n");
		return -ENOENT;
	}

	pix_data_invert = 0;
	prop = of_get_property(dn, "xlnx,pixel-data-invert", &size);
	if (!prop)
		pr_err("Error getting pixel data invert\n");
	else
		pix_data_invert = be32_to_cpup(prop);
	pix_clk_act_high = 0;
	prop = of_get_property(dn, "xlnx,pixel-clock-active-high", &size);
	if (!prop)
		pr_err("Error getting pixel active edge\n");
	else
		pix_clk_act_high = be32_to_cpup(prop);

	prop = of_get_property(dn, "xlnx,pixel-component-format", &size);
	if (prop) {
		if (!strcmp("ABGR", (char *)prop)) {
			prop = of_get_property(dn, "xlnx,pixel-component-layer", &size);
			if (prop) {
				while(size > 0) {
					tmp = be32_to_cpup(prop);
					init_data->layer_ctrl[tmp] = LOGICVC_SWAP_RB;
					prop++;
					size -= sizeof(prop);
				}
			}
		}
	}

	prop = of_get_property(dn, "active-layer", &size);
	if (prop) {
		tmp = be32_to_cpup(prop);
		init_data->active_layer = (unsigned char)tmp;
	} else {
		pr_info("xylonfb setting default layer to %d\n",
			init_data->active_layer);
	}

	prop = of_get_property(dn, "videomode", &size);
	if (prop) {
		if (strlen((char *)prop) <= VMODE_NAME_SZ) {
			strcpy(init_data->vmode_data.fb_vmode_name, (char *)prop);
			vmode_dn =
				of_find_node_by_name(dn, init_data->vmode_data.fb_vmode_name);
			c = strchr((char *)prop, '_');
			if (c)
				*c = 0;
			strcpy(init_data->vmode_data.fb_vmode_name, (char *)prop);
		} else {
			vmode_dn = NULL;
			pr_err("Error videomode name to long\n");
		}
		if (vmode_dn) {
			prop = of_get_property(vmode_dn, "refresh", &size);
			if (!prop)
				pr_err("Error getting refresh rate\n");
			else
				init_data->vmode_data.fb_vmode.refresh = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "xres", &size);
			if (!prop)
				pr_err("Error getting xres\n");
			else
				init_data->vmode_data.fb_vmode.xres = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "yres", &size);
			if (!prop)
				pr_err("Error getting yres\n");
			else
				init_data->vmode_data.fb_vmode.yres = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "pixclock-khz", &size);
			if (!prop)
				pr_err("Error getting pixclock-khz\n");
			else
				init_data->vmode_data.fb_vmode.pixclock =
					KHZ2PICOS(be32_to_cpup(prop));

			prop = of_get_property(vmode_dn, "left-margin", &size);
			if (!prop)
				pr_err("Error getting left-margin\n");
			else
				init_data->vmode_data.fb_vmode.left_margin = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "right-margin", &size);
			if (!prop)
				pr_err("Error getting right-margin\n");
			else
				init_data->vmode_data.fb_vmode.right_margin = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "upper-margin", &size);
			if (!prop)
				pr_err("Error getting upper-margin\n");
			else
				init_data->vmode_data.fb_vmode.upper_margin = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "lower-margin", &size);
			if (!prop)
				pr_err("Error getting lower-margin\n");
			else
				init_data->vmode_data.fb_vmode.lower_margin = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "hsync-len", &size);
			if (!prop)
				pr_err("Error getting hsync-len\n");
			else
				init_data->vmode_data.fb_vmode.hsync_len = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "vsync-len", &size);
			if (!prop)
				pr_err("Error getting vsync-len\n");
			else
				init_data->vmode_data.fb_vmode.vsync_len = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "sync", &size);
			if (!prop)
				pr_err("Error getting sync\n");
			else
				init_data->vmode_data.fb_vmode.sync = be32_to_cpup(prop);

			prop = of_get_property(vmode_dn, "vmode", &size);
			if (!prop)
				pr_err("Error getting vmode\n");
			else
				init_data->vmode_data.fb_vmode.vmode = be32_to_cpup(prop);

			init_data->vmode_params_set = true;
		} else {
			init_data->vmode_data.fb_vmode.refresh = 60;
		}
	} else {
		pr_info("xylonfb using default driver video mode\n");
	}

	set_ctrl_reg(init_data, pix_data_invert, pix_clk_act_high);

	return 0;
}