static int pwm_backlight_initial_power_state(const struct pwm_bl_data *pb) { struct device_node *node = pb->dev->of_node; /* Not booted with device tree or no phandle link to the node */ if (!node || !node->phandle) return FB_BLANK_UNBLANK; /* * If the driver is probed from the device tree and there is a * phandle link pointing to the backlight node, it is safe to * assume that another driver will enable the backlight at the * appropriate time. Therefore, if it is disabled, keep it so. */ /* if the enable GPIO is disabled, do not enable the backlight */ if (pb->enable_gpio && gpiod_get_value_cansleep(pb->enable_gpio) == 0) return FB_BLANK_POWERDOWN; /* The regulator is disabled, do not enable the backlight */ if (!regulator_is_enabled(pb->power_supply)) return FB_BLANK_POWERDOWN; /* The PWM is disabled, keep it like this */ if (!pwm_is_enabled(pb->pwm)) return FB_BLANK_POWERDOWN; return FB_BLANK_UNBLANK; }
static irqreturn_t max3355_id_irq(int irq, void *dev_id) { struct max3355_data *data = dev_id; int id = gpiod_get_value_cansleep(data->id_gpiod); if (id) { /* * ID = 1 means USB HOST cable detached. * As we don't have event for USB peripheral cable attached, * we simulate USB peripheral attach here. */ extcon_set_cable_state_(data->edev, EXTCON_USB_HOST, false); extcon_set_cable_state_(data->edev, EXTCON_USB, true); } else { /* * ID = 0 means USB HOST cable attached. * As we don't have event for USB peripheral cable detached, * we simulate USB peripheral detach here. */ extcon_set_cable_state_(data->edev, EXTCON_USB, false); extcon_set_cable_state_(data->edev, EXTCON_USB_HOST, true); } return IRQ_HANDLED; }
static irqreturn_t pixcir_ts_isr(int irq, void *dev_id) { struct pixcir_i2c_ts_data *tsdata = dev_id; struct pixcir_report_data report; while (tsdata->running) { /* parse packet */ pixcir_ts_parse(tsdata, &report); /* report it */ pixcir_ts_report(tsdata, &report); if (gpiod_get_value_cansleep(tsdata->gpio_attb)) { if (report.num_touches) { /* * Last report with no finger up? * Do it now then. */ input_mt_sync_frame(tsdata->input); input_sync(tsdata->input); } break; } msleep(20); } return IRQ_HANDLED; }
static int mdio_get(struct mdiobb_ctrl *ctrl) { struct mdio_gpio_info *bitbang = container_of(ctrl, struct mdio_gpio_info, ctrl); return gpiod_get_value_cansleep(bitbang->mdio); }
/* The fixed state is... fixed except for the link state, * which may be determined by a GPIO or a callback. */ static void phylink_get_fixed_state(struct phylink *pl, struct phylink_link_state *state) { *state = pl->link_config; if (pl->get_fixed_state) pl->get_fixed_state(pl->netdev, state); else if (pl->link_gpio) state->link = !!gpiod_get_value_cansleep(pl->link_gpio); }
int mmc_gpio_get_ro(struct mmc_host *host) { struct mmc_gpio *ctx = host->slot.handler_priv; if (!ctx || !ctx->ro_gpio) return -ENOSYS; return gpiod_get_value_cansleep(ctx->ro_gpio); }
static irqreturn_t sis_ts_irq_handler(int irq, void *dev_id) { struct sis_ts_data *ts = dev_id; do { sis_ts_handle_packet(ts); } while (ts->attn_gpio && gpiod_get_value_cansleep(ts->attn_gpio)); return IRQ_HANDLED; }
static int gpio_charger_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val) { struct gpio_charger *gpio_charger = psy_to_gpio_charger(psy); switch (psp) { case POWER_SUPPLY_PROP_ONLINE: val->intval = gpiod_get_value_cansleep(gpio_charger->gpiod); break; case POWER_SUPPLY_PROP_STATUS: if (gpiod_get_value_cansleep(gpio_charger->charge_status)) val->intval = POWER_SUPPLY_STATUS_CHARGING; else val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING; break; default: return -EINVAL; } return 0; }
int mmc_gpio_get_cd(struct mmc_host *host) { struct mmc_gpio *ctx = host->slot.handler_priv; if (!ctx || !ctx->cd_gpio) return -ENOSYS; if (ctx->override_cd_active_level) return !gpiod_get_raw_value_cansleep(ctx->cd_gpio) ^ !!(host->caps2 & MMC_CAP2_CD_ACTIVE_HIGH); return gpiod_get_value_cansleep(ctx->cd_gpio); }
static unsigned int sfp_gpio_get_state(struct sfp *sfp) { unsigned int i, state, v; for (i = state = 0; i < GPIO_MAX; i++) { if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i]) continue; v = gpiod_get_value_cansleep(sfp->gpio[i]); if (v) state |= BIT(i); } return state; }
static irqreturn_t sirf_wakeup_handler(int irq, void *dev_id) { struct sirf_data *data = dev_id; struct device *dev = &data->serdev->dev; int ret; ret = gpiod_get_value_cansleep(data->wakeup); dev_dbg(dev, "%s - wakeup = %d\n", __func__, ret); if (ret < 0) goto out; data->active = !!ret; wake_up_interruptible(&data->power_wait); out: return IRQ_HANDLED; }
static unsigned int rotary_encoder_get_state(struct rotary_encoder *encoder) { int i; unsigned int ret = 0; for (i = 0; i < encoder->gpios->ndescs; ++i) { int val = gpiod_get_value_cansleep(encoder->gpios->desc[i]); /* convert from gray encoding to normal */ if (encoder->encoding == ROTENC_GRAY && ret & 1) val = !val; ret = ret << 1 | val; } return ret & 3; }
static int tpd_read_edid(struct omap_dss_device *dssdev, u8 *edid, int len) { struct panel_drv_data *ddata = to_panel_data(dssdev); struct omap_dss_device *in = ddata->in; int r; if (!gpiod_get_value_cansleep(ddata->hpd_gpio)) return -ENODEV; gpiod_set_value_cansleep(ddata->ls_oe_gpio, 1); r = in->ops.hdmi->read_edid(in, edid, len); gpiod_set_value_cansleep(ddata->ls_oe_gpio, 0); return r; }
static void palmas_gpio_id_detect(struct work_struct *work) { int id; struct palmas_usb *palmas_usb = container_of(to_delayed_work(work), struct palmas_usb, wq_detectid); struct extcon_dev *edev = palmas_usb->edev; if (!palmas_usb->id_gpiod) return; id = gpiod_get_value_cansleep(palmas_usb->id_gpiod); if (id) { extcon_set_state_sync(edev, EXTCON_USB_HOST, false); dev_info(palmas_usb->dev, "USB-HOST cable is detached\n"); } else { extcon_set_state_sync(edev, EXTCON_USB_HOST, true); dev_info(palmas_usb->dev, "USB-HOST cable is attached\n"); } }
static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata) { const struct gpio_keys_button *button = bdata->button; struct input_dev *input = bdata->input; unsigned int type = button->type ?: EV_KEY; int state; state = gpiod_get_value_cansleep(bdata->gpiod); if (state < 0) { dev_err(input->dev.parent, "failed to get gpio state: %d\n", state); return; } if (type == EV_ABS) { if (state) input_event(input, type, button->code, button->value); } else { input_event(input, type, *bdata->code, state); } input_sync(input); }
static int nokia_reset(struct hci_uart *hu) { struct nokia_bt_dev *btdev = hu->priv; struct device *dev = &btdev->serdev->dev; int err; /* reset routine */ gpiod_set_value_cansleep(btdev->reset, 1); gpiod_set_value_cansleep(btdev->wakeup_bt, 1); msleep(100); /* safety check */ err = gpiod_get_value_cansleep(btdev->wakeup_host); if (err == 1) { dev_err(dev, "reset: host wakeup not low!"); return -EPROTO; } /* flush queue */ serdev_device_write_flush(btdev->serdev); /* init uart */ nokia_flow_control(btdev->serdev, false); serdev_device_set_baudrate(btdev->serdev, INIT_BAUD_RATE); gpiod_set_value_cansleep(btdev->reset, 0); /* wait for cts */ err = serdev_device_wait_for_cts(btdev->serdev, true, 200); if (err < 0) { dev_err(dev, "CTS not received: %d", err); return err; } nokia_flow_control(btdev->serdev, true); return 0; }
static bool tpd_detect(struct omap_dss_device *dssdev) { struct panel_drv_data *ddata = to_panel_data(dssdev); return gpiod_get_value_cansleep(ddata->hpd_gpio); }