staticvoid kb3930_off(struct kb3930 *ddata, int off_mode)
{
gpiod_direction_output(ddata->off_gpios->desc[EC_GPIO_OFF_MODE],
off_mode);
/* * This creates a 10 Hz wave on EC_GPIO_WAVE that signals a * shutdown request to the EC. Once the EC detects it, it will * proceed to turn the power off or reset the board depending on * the value of EC_GPIO_OFF_MODE.
*/ while (1) {
mdelay(50);
gpiod_direction_output(ddata->off_gpios->desc[EC_GPIO_WAVE], 0);
mdelay(50);
gpiod_direction_output(ddata->off_gpios->desc[EC_GPIO_WAVE], 1);
}
}
ddata->ram_regmap = devm_regmap_init(dev, NULL, ddata,
&kb3930_ram_regmap_config); if (IS_ERR(ddata->ram_regmap)) return PTR_ERR(ddata->ram_regmap);
ret = regmap_read(ddata->ram_regmap, EC_MODEL, &model); if (ret < 0) return ret;
/* Currently we only support the cells present on Dell Ariel model. */ if (model != 'J') {
dev_err(dev, "unknown board model: %02x\n", model); return -ENODEV;
}
ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO,
ariel_ec_cells,
ARRAY_SIZE(ariel_ec_cells),
NULL, 0, NULL); if (ret) return ret;
if (of_property_read_bool(np, "system-power-controller")) {
ddata->off_gpios =
devm_gpiod_get_array_optional(dev, "off", GPIOD_IN); if (IS_ERR(ddata->off_gpios)) return PTR_ERR(ddata->off_gpios); if (ddata->off_gpios && ddata->off_gpios->ndescs < 2) {
dev_err(dev, "invalid off-gpios property\n"); return -EINVAL;
}
}
if (ddata->off_gpios) {
register_restart_handler(&kb3930_restart_nb); if (!pm_power_off)
pm_power_off = kb3930_pm_power_off;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.