Messages in this thread | | | Date | Wed, 29 Jan 2014 16:08:30 -0800 (PST) | From | Kuninori Morimoto <> | Subject | Re: About gpio-regulator setting on DT |
| |
Hi Mark
> The combination of the enable-active-high and enable-at-boot properties > ought be able to cause the driver to do the right thing, the flags do > this: > > if (config->enabled_at_boot) { > if (config->enable_high) > cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; > else > cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW; > } else { > if (config->enable_high) > cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW; > else > cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; > } > > of_get_named_gpio() just looks up the GPIO number, it doesn't request > the GPIO.
Hmm... I'm not sure detail, but, I need config->gpios[ptr].flags instead of cfg.ena_gpio_flags. Because it is used for drvdata->state.
static int gpio_regulator_probe(struct platform_device *pdev) { if (np) { config = of_get_gpio_regulator_config(&pdev->dev, np); if (IS_ERR(config)) return PTR_ERR(config); } ...
/* build initial state from gpio init data. */ state = 0; for (ptr = 0; ptr < drvdata->nr_gpios; ptr++) { if (config->gpios[ptr].flags & GPIOF_OUT_INIT_HIGH) <== we need this state |= (1 << ptr); } drvdata->state = state; ...
cfg.ena_gpio_invert = !config->enable_high; if (config->enabled_at_boot) { if (config->enable_high) cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; else cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW; } else { if (config->enable_high) cfg.ena_gpio_flags |= GPIOF_OUT_INIT_LOW; else cfg.ena_gpio_flags |= GPIOF_OUT_INIT_HIGH; }
)
Best regards --- Kuninori Morimoto
| |