bool nordic_pm_is_active(struct device *dev) { struct nordic_pm_info *priv = (struct nordic_pm_info*)dev->priv; bool active = false; soc_gpio_read(priv->gpio_dev, priv->wakeup_pin, &active); return active; }
static DRIVER_API_RC soc_gpio_test_pin(struct device *dev, unsigned int input_pin, unsigned int output_pin) { DRIVER_API_RC ret; bool value; gpio_cfg_data_t in_pin_cfg; gpio_cfg_data_t out_pin_cfg; in_pin_cfg.gpio_type = GPIO_INPUT; in_pin_cfg.int_type = LEVEL; in_pin_cfg.int_polarity = ACTIVE_LOW; in_pin_cfg.int_debounce = DEBOUNCE_OFF; in_pin_cfg.int_ls_sync = LS_SYNC_OFF; in_pin_cfg.gpio_cb = NULL; out_pin_cfg.gpio_type = GPIO_OUTPUT; out_pin_cfg.int_type = LEVEL; out_pin_cfg.int_polarity = ACTIVE_LOW; out_pin_cfg.int_debounce = DEBOUNCE_OFF; out_pin_cfg.int_ls_sync = LS_SYNC_OFF; out_pin_cfg.gpio_cb = NULL; if((ret = soc_gpio_set_config(dev, input_pin, &in_pin_cfg)) != DRV_RC_OK) { cu_print("Error pin %d config (%d)\n", input_pin, ret); return ret; } if((ret = soc_gpio_set_config(dev, output_pin, &out_pin_cfg)) != DRV_RC_OK) { cu_print("Error pin %d config (%d)\n", output_pin, ret); soc_gpio_deconfig(dev, input_pin); return ret; } // Test LOW if((ret = soc_gpio_write(dev, output_pin, 0)) != DRV_RC_OK) { cu_print("Error pin %d write 1 (%d)\n", output_pin, ret); soc_gpio_deconfig(dev, output_pin); soc_gpio_deconfig(dev, input_pin); return ret; } trans_delay(); // Delay a little bit if((ret = soc_gpio_read(dev, input_pin, &value)) != DRV_RC_OK) { cu_print("Error pin %d read 1 (%d)\n", input_pin, ret); soc_gpio_deconfig(dev, output_pin); soc_gpio_deconfig(dev, input_pin); return ret; } if(value) { cu_print("Error pin %d is at 1, 0 expected\n", input_pin); soc_gpio_deconfig(dev, output_pin); soc_gpio_deconfig(dev, input_pin); return DRV_RC_FAIL; } // Test HIGH if((ret = soc_gpio_write(dev, output_pin, 1)) != DRV_RC_OK) { cu_print("Error pin %d write 2 (%d)\n", output_pin, ret); soc_gpio_deconfig(dev, output_pin); soc_gpio_deconfig(dev, input_pin); return ret; } trans_delay(); // Delay a little bit if((ret = soc_gpio_read(dev, input_pin, &value)) != DRV_RC_OK) { cu_print("Error pin %d read 2 (%d)\n", input_pin, ret); soc_gpio_deconfig(dev, output_pin); soc_gpio_deconfig(dev, input_pin); return ret; } if(!value) { cu_print("Error pin %d is at 0, 1 expected\n", input_pin); soc_gpio_deconfig(dev, output_pin); soc_gpio_deconfig(dev, input_pin); return DRV_RC_FAIL; } soc_gpio_deconfig(dev, output_pin); soc_gpio_deconfig(dev, input_pin); return DRV_RC_OK; }