Example #1
0
static void enable_usb_vbus(void)
{
	qm_gpio_port_config_t cfg = {0};
	cfg.direction |= BIT(USB_VBUS_GPIO_PIN);
	qm_gpio_set_config(USB_VBUS_GPIO_PORT, &cfg);
	qm_gpio_set_pin(USB_VBUS_GPIO_PORT, USB_VBUS_GPIO_PIN);
}
Example #2
0
File: main.c Project: jeez/qmsi
int main(void)
{
	qm_gpio_port_config_t cfg;

	QM_PUTS("Starting: AON GPIO");

	/* Request IRQ and write GPIO port config. */
	cfg.direction = 0;		   /* Set all pins as inputs. */
	cfg.int_en = BIT(PIN_INTR);	/* Interrupt enabled. */
	cfg.int_type = BIT(PIN_INTR);      /* Edge sensitive interrupt. */
	cfg.int_polarity = ~BIT(PIN_INTR); /* Falling edge. */
	cfg.int_debounce = BIT(PIN_INTR);  /* Debounce enabled. */
	cfg.int_bothedge = 0;		   /* Both edge disabled. */
	cfg.callback = aon_gpio_example_callback;
	cfg.callback_data = NULL;

	qm_irq_request(QM_IRQ_AON_GPIO_0_INT, qm_aon_gpio_0_isr);

	qm_gpio_set_config(QM_AON_GPIO_0, &cfg);

	QM_PUTS("AON GPIO set up, press 'PB0' to trigger the interrupt");

	/* Wait for the AON GPIO callback to be invoked and print the status. */
	while (!callback_invoked)
		;

	QM_PRINTF("Status of AON GPIO callback = 0x%u \n", callback_status);

	QM_PUTS("Finished: AON GPIO");

	return 0;
}
Example #3
0
int main(void)
{
    qm_gpio_port_config_t cfg;

    sensor_activation();

    QM_PUTS("Starting: Power LPSS");

    /* Set GPIO pin muxing. */
    qm_pmux_select(PIN_OUT, QM_PMUX_FN_0);
    qm_pmux_select(PIN_INTR, QM_PMUX_FN_0);

    /* Request IRQ and write GPIO port config. */
    cfg.direction = BIT(PIN_OUT);     /* Set PIN_OUT as output. */
    cfg.int_en = BIT(PIN_INTR);       /* Interrupt enabled. */
    cfg.int_type = BIT(PIN_INTR);     /* Edge sensitive interrupt. */
    cfg.int_polarity = BIT(PIN_INTR); /* Rising edge. */
    cfg.int_debounce = BIT(PIN_INTR); /* Debounce enabled. */
    cfg.int_bothedge = 0x0;		  /* Both edge disabled. */
    cfg.callback = NULL;
    cfg.callback_data = NULL;

    qm_irq_request(QM_IRQ_GPIO_0_INT, qm_gpio_0_isr);

    qm_gpio_set_config(QM_GPIO_0, &cfg);

    QM_PUTS("Go to LPSS with x86 core in C2.");

    /* Wait for the Sensor Subsystem to be ready to transition to LPSS. */
    while (!(QM_SCSS_GP->gps2 & QM_SCSS_GP_SENSOR_READY))
        ;

    /*
     * Go to C2. Sensor Subsystem will perform the transition to LPSS.
     * Once woken up, SS will wake up the x86 core with the GPIO interrupt.
     */
    power_cpu_c2();

    QM_PUTS("Wake up from LPSS.");

    QM_PUTS("Go to LPSS with x86 core in C2LP.");

    /* Wait for the Sensor Subsystem to be ready to transition to LPSS. */
    while (!(QM_SCSS_GP->gps2 & QM_SCSS_GP_SENSOR_READY))
        ;

    /*
     * Go to C2LP. Sensor Subsystem will perform the transition to LPSS.
     * Once woken up, SS will wake up the x86 core with the GPIO interrupt.
     */
    power_cpu_c2lp();

    QM_PUTS("Wake up from LPSS.");

    QM_PUTS("Finished: Power LPSS");

    return 0;
}
Example #4
0
/*
 * Configure a GPIO pin (or onboard LED pin) as an output and drive an
 * initial value.
 */
static void gpio_set_out(unsigned int pin, unsigned int initial_value)
{
	gpio_cfg.direction = BIT(pin); /* Configure pin for output. */
	qm_gpio_set_config(QM_GPIO_0, &gpio_cfg);

	if (initial_value) {
		qm_gpio_set_pin(QM_GPIO_0, pin);
	} else {
		qm_gpio_clear_pin(QM_GPIO_0, pin);
	}
}
Example #5
0
File: main.c Project: jeez/qmsi
/*
 * Configure a GPIO pin (or onboard LED pin) as an output and drive an
 * initial value.
 */
static void gpio_set_out(unsigned int pin, unsigned int initial_value)
{
	qm_pmux_select(pin, QM_PMUX_FN_0); /* Pin Muxing. */
	gpio_cfg.direction = BIT(pin);     /* Configure pin for output. */
	qm_gpio_set_config(QM_GPIO_0, &gpio_cfg);

	if (initial_value) {
		qm_gpio_set_pin(QM_GPIO_0, pin);
	} else {
		qm_gpio_clear_pin(QM_GPIO_0, pin);
	}
}
Example #6
0
static void gpio_init()
{
	gpio_cfg.direction = 0; /* Configure all pins as inputs. */
	gpio_cfg.int_en = 0;    /* Interrupt disabled. */
	gpio_cfg.int_type = 0;  /* Turn off GPIO interrupts. */
	gpio_cfg.int_polarity = 0;
	gpio_cfg.int_debounce = 0;   /* Debounce disabled. */
	gpio_cfg.int_bothedge = 0x0; /* Both edge disabled. */
	gpio_cfg.callback = NULL;
	gpio_cfg.callback_data = NULL;

	qm_gpio_set_config(QM_GPIO_0, &gpio_cfg);
}
Example #7
0
File: main.c Project: CurieBSP/qmsi
int main(void)
{
	qm_gpio_port_config_t cfg;

	QM_PUTS("AON GPIO example\n");

	/* Request IRQ and write GPIO port config */
	cfg.direction = 0;		   /* All pins are input */
	cfg.int_en = BIT(PIN_INTR);	/* Interrupt enabled */
	cfg.int_type = BIT(PIN_INTR);      /* Edge sensitive interrupt */
	cfg.int_polarity = ~BIT(PIN_INTR); /* Falling edge */
	cfg.int_debounce = BIT(PIN_INTR);  /* Debounce enabled */
	cfg.int_bothedge = 0x0;		   /* Both edge disabled */
	cfg.callback = aon_gpio_example_callback;

	qm_irq_request(QM_IRQ_AONGPIO_0, qm_aon_gpio_isr_0);

	qm_gpio_set_config(QM_AON_GPIO_0, &cfg);
	QM_PUTS("AON GPIO set up, press the Push Button 0 to trigger the "
		"interrupt\n");
	return 0;
}
static int
spi_set_gpio_ss(struct sol_spi *spi)
{
    qm_gpio_port_config_t cfg;
    uint32_t mask;
    qm_rc_t ret;

#if QUARK_SE
    spi->slave_select.port = QM_GPIO_0;
    switch (spi->bus) {
    case QM_SPI_MST_0:
        switch (spi->slave) {
        case QM_SPI_SS_0:
            spi->slave_select.pin = 24;
            break;
        case QM_SPI_SS_1:
            spi->slave_select.pin = 25;
            break;
        case QM_SPI_SS_2:
            spi->slave_select.pin = 26;
            break;
        case QM_SPI_SS_3:
            spi->slave_select.pin = 27;
            break;
        default:
            return -EINVAL;
        }
        break;
    case QM_SPI_MST_1:
        switch (spi->slave) {
        case QM_SPI_SS_0:
            spi->slave_select.pin = 11;
            break;
        case QM_SPI_SS_1:
            spi->slave_select.pin = 12;
            break;
        case QM_SPI_SS_2:
            spi->slave_select.pin = 13;
            break;
        case QM_SPI_SS_3:
            spi->slave_select.pin = 14;
            break;
        default:
            return -EINVAL;
        }
        break;
    default:
        return -EINVAL;
    }
#elif QUARK_D2000
    spi->slave_select.port = QM_GPIO_0;
    switch (spi->slave) {
    case QM_SPI_SS_0:
        spi->slave_select.pin = 0;
        break;
    case QM_SPI_SS_1:
        spi->slave_select.pin = 1;
        break;
    case QM_SPI_SS_2:
        spi->slave_select.pin = 2;
        break;
    case QM_SPI_SS_3:
        spi->slave_select.pin = 3;
        break;
    default:
        return -EINVAL;
    }
#endif

    mask = BIT(spi->slave_select.pin);
    ret = qm_gpio_get_config(spi->slave_select.port, &cfg);
    SOL_EXP_CHECK(ret != QM_RC_OK, -EIO);
    cfg.direction |= mask;
    cfg.int_en &= mask;
    ret = qm_gpio_set_config(spi->slave_select.port, &cfg);
    SOL_EXP_CHECK(ret != QM_RC_OK, -EIO);
    qm_gpio_set_pin(spi->slave_select.port, spi->slave_select.pin);

    return 0;
}