int pm8058_dump_mpp(struct seq_file *m, int curr_len, char *gpio_buffer)
{
	static const char *ctype[] = { "d_in", "d_out", "bi_dir", "a_in",
		"a_out", "sink", "dtest_sink", "dtest_out" };
	struct pm8058_chip *pm_chip;
	u8 type, state, ctrl;
	const char *label;
	int i, len;
	char gpio_buf[128];
	char *title_msg = "---------- PMIC 8058 MPP ----------";

	if (m) {
		seq_printf(m, "%s\n", title_msg);
	} else {
		pr_info("%s\n", title_msg);
		curr_len += sprintf(gpio_buffer + curr_len,
		"%s\n", title_msg);
	}

	pm_chip = dev_get_drvdata(pm8058_mpp_chip.dev);

	for (i = 0; i < PM8058_MPPS; i++) {

		memset(gpio_buf, 0, sizeof(gpio_buf));
		len = 0;

		pm8058_read(pm_chip, SSBI_MPP_CNTRL(i), &ctrl, 1);
		label = gpiochip_is_requested(&pm8058_mpp_chip, i);
		type = (ctrl & PM8058_MPP_TYPE_MASK) >>
			PM8058_MPP_TYPE_SHIFT;
		state = pm8058_mpp_get(&pm8058_mpp_chip, i);

		len += sprintf(gpio_buf + len, "GPIO[%2d]: ", i);
		len += sprintf(gpio_buf + len, "[TYPE]%10s, ", ctype[type]);
		len += sprintf(gpio_buf + len, "[VAL]%s, ", state? "HIGH" : " LOW");
		len += sprintf(gpio_buf + len, "[CTRL][0x%02x]", ctrl);

		gpio_buf[127] = '\0';
		pr_info("%s\n", gpio_buf);
		if (m) {
			seq_printf(m, "%s\n", gpio_buf);
		} else {
			pr_info("%s\n", gpio_buf);
			curr_len += sprintf(gpio_buffer +
			curr_len, "%s\n", gpio_buf);
		}

	}

	return curr_len;
}
Exemplo n.º 2
0
int pm8058_mpp_config(unsigned mpp, unsigned type, unsigned level,
		      unsigned control)
{
	u8	config;
	int	rc;
	struct pm8058_chip *pm_chip;

	if (mpp >= PM8058_MPPS)
		return -EINVAL;

	pm_chip = dev_get_drvdata(pm8058_mpp_chip.chip.dev);

	config = (type << PM8058_MPP_TYPE_SHIFT) & PM8058_MPP_TYPE_MASK;
	config |= (level << PM8058_MPP_CONFIG_LVL_SHIFT) &
			PM8058_MPP_CONFIG_LVL_MASK;
	config |= control & PM8058_MPP_CONFIG_CTL_MASK;

	rc = pm8058_write(pm_chip, SSBI_MPP_CNTRL(mpp), &config, 1);
	if (rc)
		pr_err("%s: pm8058_write(): rc=%d\n", __func__, rc);

	return rc;
}
Exemplo n.º 3
0
static void pm8058_mpp_dbg_show(struct seq_file *s, struct gpio_chip *chip)
{
	static const char *ctype[] = { "d_in", "d_out", "bi_dir", "a_in",
		"a_out", "sink", "dtest_sink", "dtest_out" };
	struct pm8058_chip *pm_chip = dev_get_drvdata(chip->dev);
	u8 type, state, ctrl;
	const char *label;
	int i;

	for (i = 0; i < PM8058_MPPS; i++) {
		pm8058_read(pm_chip, SSBI_MPP_CNTRL(i), &ctrl, 1);
		label = gpiochip_is_requested(chip, i);
		type = (ctrl & PM8058_MPP_TYPE_MASK) >>
			PM8058_MPP_TYPE_SHIFT;
		state = pm8058_mpp_get(chip, i);
		seq_printf(s, "gpio-%-3d (%-12.12s) %-10.10s"
				" %s 0x%02x\n",
				chip->base + i,
				label ? label : "--",
				ctype[type],
				state ? "hi" : "lo",
				ctrl);
	}
}