Пример #1
0
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;
}
Пример #2
0
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);
}
Пример #3
0
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();
  }
}
Пример #4
0
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();
}
Пример #5
0
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;
}
Пример #6
0
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;
}
Пример #7
0
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;
}
Пример #8
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);
}
Пример #9
0
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);
}
Пример #10
0
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;
}
Пример #11
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;
}