static void configure_gpios(spi_dev *dev, bool as_master) { const struct spi_pins *pins = dev_to_spi_pins(dev); if (!pins) { return; } const stm32_pin_info *nssi = &PIN_MAP[pins->nss]; const stm32_pin_info *scki = &PIN_MAP[pins->sck]; const stm32_pin_info *misoi = &PIN_MAP[pins->miso]; const stm32_pin_info *mosii = &PIN_MAP[pins->mosi]; disable_pwm(nssi); disable_pwm(scki); disable_pwm(misoi); disable_pwm(mosii); spi_gpio_cfg(as_master, nssi->gpio_device, nssi->gpio_bit, scki->gpio_device, scki->gpio_bit, misoi->gpio_bit, mosii->gpio_bit); }
static void spi_config_gpio(struct s3c2410_spi *device) { uintptr_t ms, p_ms; (void)device; /* XXX what to do if fail? -gl */ if (gpio_base == NULL) { ms = memsection_create_user(0x1000, &p_ms); hardware_back_memsection(ms, S3C2410_GPIO_PHYS, L4_IOMemory); gpio_base = (uint32_t *)p_ms; } // Turn on the backlight spi_gpio_cfg(gpio_base, S3C2410_GPB0, 0x01); spi_gpio_set(gpio_base, S3C2410_GPB0, 1); // But not the vibrator! // spi_gpio_cfg(gpio_base, S3C2410_GPB3, S3C2410_GPG3_OUTPUT); // spi_gpio_set(gpio_base, S3C2410_GPB3, 1); /* Put the MOSI/MISO pins in a known-state */ spi_gpio_cfg(gpio_base, S3C2410_GPG6, S3C2410_GPG6_OUTPUT); spi_gpio_cfg(gpio_base, S3C2410_GPG7, S3C2410_GPG7_OUTPUT); spi_gpio_set(gpio_base, S3C2410_GPG6, 1); spi_gpio_set(gpio_base, S3C2410_GPG7, 1); /* disable CS */ spi_gpio_cfg(gpio_base, S3C2410_GPG3, S3C2410_GPG3_OUTPUT); spi_gpio_set(gpio_base, S3C2410_GPG3, 1); /* * Set the GPIO pins to functional mode, i.e. we will use * SPI as a UART instead of bit-banging - nt */ spi_gpio_cfg(gpio_base, S3C2410_GPG5, S3C2410_GPG5_SPIMISO1); spi_gpio_cfg(gpio_base, S3C2410_GPG6, S3C2410_GPG6_SPIMOSI1); spi_gpio_cfg(gpio_base, S3C2410_GPG7, S3C2410_GPG7_SPICLK1); /* * conf pull-up register * get LCM out of reset * * nt - don't worry, this is done by u-boot */ return; }