static int pxa3xx_ssp_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; struct ssp_device *ssp; int ret = 0; u32 sscr0; if (!cpu_dai->active) { ret = ssp_init(&ssp_dev[cpu_dai->id], cpu_dai->id + 1, SSP_NO_IRQ); if(ret) return ret; ssp = ssp_dev[cpu_dai->id].ssp; sscr0 = __raw_readl(ssp->mmio_base + SSCR0); sscr0 &= ~SSCR0_SSE; __raw_writel(sscr0, ssp->mmio_base + SSCR0); cpu_dai->private_data = ssp; } kfree(snd_soc_dai_get_dma_data(cpu_dai, substream)); snd_soc_dai_set_dma_data(cpu_dai, substream, NULL); return ret; }
void wifi_on() { write_pin(CC3000_SW_EN_PIN, false); delay(10000000); write_pin(WIFI_POWER_EN_PIN, true); ssp_init(CC3000_SPI_HW, SSP_FRAMEFORMAT_SPI, 0, true, 8, 20); write_pin(CC3000_SW_EN_PIN, true); cc3000_init(CC3000_IRQ_PIN); }
void w25q80bv_setup(void) { const uint8_t serial_clock_rate = 2; const uint8_t clock_prescale_rate = 2; /* Reset SPIFI peripheral before to Erase/Write SPIFI memory through SPI */ RESET_CTRL1 = RESET_CTRL1_SPIFI_RST; /* Init SPIFI GPIO to Normal GPIO */ scu_pinmux(P3_3, (SCU_SSP_IO | SCU_CONF_FUNCTION2)); // P3_3 SPIFI_SCK => SSP0_SCK scu_pinmux(P3_4, (SCU_GPIO_FAST | SCU_CONF_FUNCTION0)); // P3_4 SPIFI SPIFI_SIO3 IO3 => GPIO1[14] scu_pinmux(P3_5, (SCU_GPIO_FAST | SCU_CONF_FUNCTION0)); // P3_5 SPIFI SPIFI_SIO2 IO2 => GPIO1[15] scu_pinmux(P3_6, (SCU_GPIO_FAST | SCU_CONF_FUNCTION0)); // P3_6 SPIFI SPIFI_MISO IO1 => GPIO0[6] scu_pinmux(P3_7, (SCU_GPIO_FAST | SCU_CONF_FUNCTION4)); // P3_7 SPIFI SPIFI_MOSI IO0 => GPIO5[10] scu_pinmux(P3_8, (SCU_GPIO_FAST | SCU_CONF_FUNCTION4)); // P3_8 SPIFI SPIFI_CS => GPIO5[11] /* configure SSP pins */ scu_pinmux(SCU_SSP0_MISO, (SCU_SSP_IO | SCU_CONF_FUNCTION5)); scu_pinmux(SCU_SSP0_MOSI, (SCU_SSP_IO | SCU_CONF_FUNCTION5)); scu_pinmux(SCU_SSP0_SCK, (SCU_SSP_IO | SCU_CONF_FUNCTION2)); /* configure GPIO pins */ scu_pinmux(SCU_FLASH_HOLD, SCU_GPIO_FAST); scu_pinmux(SCU_FLASH_WP, SCU_GPIO_FAST); scu_pinmux(SCU_SSP0_SSEL, (SCU_GPIO_FAST | SCU_CONF_FUNCTION4)); /* drive SSEL, HOLD, and WP pins high */ gpio_set(PORT_FLASH, (PIN_FLASH_HOLD | PIN_FLASH_WP)); gpio_set(PORT_SSP0_SSEL, PIN_SSP0_SSEL); /* Set GPIO pins as outputs. */ GPIO1_DIR |= (PIN_FLASH_HOLD | PIN_FLASH_WP); GPIO5_DIR |= PIN_SSP0_SSEL; /* initialize SSP0 */ ssp_init(SSP0_NUM, SSP_DATA_8BITS, SSP_FRAME_SPI, SSP_CPOL_0_CPHA_0, serial_clock_rate, clock_prescale_rate, SSP_MODE_NORMAL, SSP_MASTER, SSP_SLAVE_OUT_ENABLE); device_id = 0; while(1) { if(device_id == W25Q80BV_DEVICE_ID_RES) break; if(device_id == S25FL032P_DEVICE_ID_RES) break; device_id = w25q80bv_get_device_id(); } }
void pin_setup(void) { int i; #ifdef AIRSPY_NOS #else /* AIRSPY One/Demo */ uint8_t serial_clock_rate; uint8_t clock_prescale_rate; #endif /* Configure all GPIO as Input (safe state) */ GPIO0_DIR = 0; GPIO1_DIR = 0; GPIO2_DIR = 0; GPIO3_DIR = 0; GPIO4_DIR = 0; GPIO5_DIR = 0; GPIO6_DIR = 0; GPIO7_DIR = 0; /* Pin configuration for all pins */ for(i = 0; i < GPIO_CONF_NB; i++) { scu_pinmux(gpio_conf[i].group_pin, gpio_conf[i].scu_conf); } /* GPIO1[7] on P1_14 as output. */ GPIO1_DIR |= PIN_EN_R820T; disable_r820t_power(); /* GPIO1[13] on P2_13 as output. */ GPIO1_DIR |= PIN_EN_BIAST; disable_biast_power(); #ifdef AIRSPY_NOS /* GPIO0[12] on P1_17 as output. */ GPIO0_DIR |= PIN_EN_LED1; #else /* AIRSPY One/Demo */ /* Configure SSP1 Peripheral */ #define SCU_SSP1_SCK (P1_19) /* P1_19 */ scu_pinmux(SCU_SSP1_SCK, (SCU_SSP_IO | SCU_CONF_FUNCTION1)); /* Freq About 1.12MHz => Freq = PCLK / (CPSDVSR * [SCR+1]) with PCLK=PLL1=288MHz */ clock_prescale_rate = 2; serial_clock_rate = 128; ssp_init(SSP1_NUM, SSP_DATA_8BITS, SSP_FRAME_SPI, SSP_CPOL_0_CPHA_0, serial_clock_rate, clock_prescale_rate, SSP_MODE_NORMAL, SSP_MASTER, SSP_SLAVE_OUT_ENABLE); #endif led_off(); }
static int ad_probe(struct platform_device *pdev) { struct ad7877_platform_data *pdata = pdev->dev.platform_data; struct ad7877 *ad; int ret; int i; // Initialize ad data structure. ad = kzalloc(sizeof(*ad), GFP_KERNEL); if (!ad) return -ENOMEM; init_completion(&ad->comp); ret = request_irq(pdata->dav_irq, davirq , IRQF_DISABLED | IRQF_TRIGGER_FALLING , "ad7877-dav", ad); if (ret) { kfree(ad); return ret; } ret = ssp_init(&ad->ssp, 1, 0); if (ret) { printk(KERN_ERR "Unable to register SSP handler!\n"); free_irq(pdata->dav_irq, ad); kfree(ad); return ret; } platform_set_drvdata(pdev, ad); ssp_disable(&ad->ssp); ssp_config(&ad->ssp, SSCR0_DataSize(16), 0, 0, SSCR0_SerClkDiv(6)); ssp_enable(&ad->ssp); initChip(ad); for (i = 0; i < ARRAY_SIZE(acdevs); i++) { acdevs[i].sense = sense; ret = adc_classdev_register(&pdev->dev, &acdevs[i]); if (ret) { printk("ad7877: failed to register adc class " "device %s\n", acdevs[i].name); goto adc_cdev_register_failed; } } return 0; adc_cdev_register_failed: while (--i >= 0) adc_classdev_unregister(&acdevs[i]); return ret; }
void palmtt3_ssp_init(void) { printk(KERN_WARNING "palmtt3_tsc2101: Resetting SSP, move this to garux?\n"); SSCR0 &= ~SSCR0_SSE; SSCR1 = SSCR1 & 0x3FFC; if (ssp_init(&palmtt3_ssp_dev, 1, 0)) printk(KERN_ERR "palmtt3_tsc2101: Unable to register SSP handler!\n"); else { ssp_enable(&palmtt3_ssp_dev); printk(KERN_INFO "palmtt3_tsc2101: SSP device initialized\n"); } return; }
int main(void) { int i; uint8_t ssp_val; uint8_t serial_clock_rate; uint8_t clock_prescale_rate; gpio_setup(); /* Freq About 1.12MHz => Freq = PCLK / (CPSDVSR * [SCR+1]) with PCLK=PLL1=288MHz */ clock_prescale_rate = 2; serial_clock_rate = 128; ssp_init(SSP1_NUM, SSP_DATA_8BITS, SSP_FRAME_SPI, SSP_CPOL_0_CPHA_0, serial_clock_rate, clock_prescale_rate, SSP_MODE_NORMAL, SSP_MASTER, SSP_SLAVE_OUT_ENABLE); ssp_val = 0x0; while (1) { ssp_write(SSP1_NUM, (uint16_t)ssp_val); gpio_set(GPIO2, GPIOPIN1); /* LED on */ for (i = 0; i < 1000; i++) /* Wait a bit. */ __asm__("nop"); gpio_clear(GPIO2, GPIOPIN1); /* LED off */ ssp_val++; } return 0; }
void lcd_select() { /* the LCD requires 9-Bit frames */ // Freq = PCLK / (CPSDVSR * [SCR+1]) /* we want 120ns / bit -> 8.3 MHz. */ /* SPI1 BASE CLOCK should be 40.8 MHz, CPSDVSR minimum is 2 */ /* so we run at SCR=1 => =~ 10MHz */ uint8_t serial_clock_rate = 1; uint8_t clock_prescale_rate = 2; ssp_init(LCD_SSP, SSP_DATA_9BITS, SSP_FRAME_SPI, SSP_CPOL_0_CPHA_0, serial_clock_rate, clock_prescale_rate, SSP_MODE_NORMAL, SSP_MASTER, SSP_SLAVE_OUT_ENABLE); OFF(LCD_CS); }
void ssp1_set_mode_8bit(void) { /* FIXME speed up once everything is working reliably */ /* // Freq About 0.0498MHz / 49.8KHz => Freq = PCLK / (CPSDVSR * [SCR+1]) with PCLK=PLL1=204MHz const uint8_t serial_clock_rate = 32; const uint8_t clock_prescale_rate = 128; */ // Freq About 4.857MHz => Freq = PCLK / (CPSDVSR * [SCR+1]) with PCLK=PLL1=204MHz const uint8_t serial_clock_rate = 21; const uint8_t clock_prescale_rate = 2; ssp_init(SSP1_NUM, SSP_DATA_8BITS, SSP_FRAME_SPI, SSP_CPOL_0_CPHA_0, serial_clock_rate, clock_prescale_rate, SSP_MODE_NORMAL, SSP_MASTER, SSP_SLAVE_OUT_ENABLE); }
int main() { //char *text = "Counting: "; uint8_t button_pressed = 0; uint8_t i = 0, j, tmp; init(); ssp_init(); write_eeprom( 0x00, 0x08 ); //write_eeprom( 0x01, 0x04 ); j = read_eeprom( 0x00 ); //tmp = 0x08; //j = 0x08; //TRISE = 0x01; //TRISA = 0x01; //ADCON1 = 0x06; //RE0 = 1; //itoa(buff, 1234, 10); //__delay_ms(1000); //dht11_read(); //TRISA = 0x01; //while( !RA0 ); //PORTCbits.RC6 = 1; //CCPR1L = 64; while( 1 ){ SS = 0; //SSPBUF = 1 << i; SSPBUF = j; while( SSPSTATbits.BF == 0 ); tmp = SSPBUF; RB2 = 0x01; SS = 1; i++; if( i > 3 ) i = 0; j = 0x00; j = read_eeprom( 0x00 ); /* if( !button_pressed && debounce_lo( RB1 ) ){ RB2 = 0x01; //tea5767_search(); button_pressed = 1; //f = (float)tea5767_tuned_freq() / 10; //hd44780_printdecimal( f, 0 ); //print_freq(); //print_signal_level(); }else{ RB2 = 0x00; if(!debounce_lo( RB1 )) button_pressed = 0; } */ //send_data( 0xFF ); //read_data(); __delay_ms(500); } return 0; }
static int __init a716_ssp_probe(struct platform_device *pdev) { int ret; if (!machine_is_a716()) { return -ENODEV; } a716_gpo_set(0x4000); ret = ssp_init(&a716_ssp_dev, 1, 0); if (ret) { printk(KERN_ERR "Unable to register SSP handler!\n"); return ret; } else { ssp_disable(&a716_ssp_dev); ssp_config(&a716_ssp_dev, (SSCR0_National | 0x0b), 0, 0, SSCR0_SerClkDiv(36)); ssp_enable(&a716_ssp_dev); } a716_ssp_putget(CTRL_YPOS | CTRL_START); mdelay(1); a716_ssp_putget(CTRL_Z1POS | CTRL_START); mdelay(1); a716_ssp_putget(CTRL_Z2POS | CTRL_START); mdelay(1); a716_ssp_putget(CTRL_XPOS | CTRL_START); init_timer(&timer_pen); timer_pen.function = a716_ts_timer; timer_pen.data = (unsigned long)NULL; idev = input_allocate_device(); if (!idev) return -ENOMEM; idev->name = "ad7873"; idev->phys = "touchscreen/ad7873"; set_bit(EV_ABS, idev->evbit); set_bit(EV_KEY, idev->evbit); set_bit(ABS_X, idev->absbit); set_bit(ABS_Y, idev->absbit); set_bit(ABS_PRESSURE, idev->absbit); set_bit(BTN_TOUCH, idev->keybit); idev->absmax[ABS_PRESSURE] = 1; idev->absmin[ABS_X] = 212; idev->absmin[ABS_Y] = 180; idev->absmax[ABS_X] = 3880; idev->absmax[ABS_Y] = 3940; input_register_device(idev); touch_pressed = 0; irq_disable = 0; set_irq_type(IRQ_GPIO(GPIO_NR_A716_STYLUS_IRQ_N), IRQT_FALLING); request_irq(IRQ_GPIO(GPIO_NR_A716_STYLUS_IRQ_N), a716_stylus, SA_SAMPLE_RANDOM, "ad7873 stylus", NULL); return 0; }