static int __init stamp_init(void) { int ret; printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__); ret = platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices)); if (ret < 0) return ret; #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) # if defined(CONFIG_BFIN_SHARED_FLASH_ENET) /* setup BF533_STAMP CPLD to route AMS3 to Ethernet MAC */ bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (1 << CONFIG_ENET_FLASH_PIN)); bfin_write_FIO_FLAG_S(1 << CONFIG_ENET_FLASH_PIN); SSYNC(); # endif #endif #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info)); #endif #if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE) irq_desc[PATA_INT].status |= IRQ_NOAUTOEN; #endif return 0; }
void swap_to(int device_id) { bfin_write_FIO_DIR(bfin_read_FIO_DIR() | PF0); SSYNC(); if (device_id == ETHERNET) bfin_write_FIO_FLAG_S(PF0); else if (device_id == FLASH) bfin_write_FIO_FLAG_C(PF0); else printf("Unknown device to switch\n"); SSYNC(); }
void sl811_port_power(struct device *dev, int is_on) { unsigned short mask = (1 << CONFIG_USB_SL811_BFIN_GPIO_VBUS); bfin_write_PORT_FER(bfin_read_PORT_FER() & ~mask); bfin_write_FIO_DIR(bfin_read_FIO_DIR() | mask); if (is_on) bfin_write_FIO_FLAG_S(mask); else bfin_write_FIO_FLAG_C(mask); }
static int __init ip0x_init(void) { int i; printk(KERN_INFO "%s(): registering device resources\n", __func__); platform_add_devices(ip0x_devices, ARRAY_SIZE(ip0x_devices)); #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) for (i = 0; i < ARRAY_SIZE(bfin_spi_board_info); ++i) { int j = 1 << bfin_spi_board_info[i].chip_select; /* set spi cs to 1 */ bfin_write_FIO_DIR(bfin_read_FIO_DIR() | j); bfin_write_FIO_FLAG_S(j); } spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info)); #endif return 0; }
static void stamp_led_set(int LED1, int LED2, int LED3) { bfin_write_FIO_INEN(bfin_read_FIO_INEN() & ~(PF2 | PF3 | PF4)); bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (PF2 | PF3 | PF4)); if (LED1 == STATUS_LED_OFF) *pFIO_FLAG_S = PF2; else *pFIO_FLAG_C = PF2; if (LED2 == STATUS_LED_OFF) *pFIO_FLAG_S = PF3; else *pFIO_FLAG_C = PF3; if (LED3 == STATUS_LED_OFF) *pFIO_FLAG_S = PF4; else *pFIO_FLAG_C = PF4; SSYNC(); }
/* Board Init function --------------------------------------------------------------------------------------- */ static int __init ip0x_init(void) { u_int i, j; printk(KERN_INFO "%s(): chip_id=%08lX,dspid=%08X\n", __FUNCTION__, *((volatile unsigned long *)CHIPID), bfin_read_DSPID()); printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__); bfin_plat_nand_init(); platform_add_devices(ip0x_devices, ARRAY_SIZE(ip0x_devices)); #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) for (i = 0; i < ARRAY_SIZE(bfin_spi_board_info); i ++) { j = 1 << bfin_spi_board_info [i]. chip_select; // set spi cs to 1 bfin_write_FIO_DIR (bfin_read_FIO_DIR() | j); bfin_write_FIO_FLAG_S (j); } spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info)); #endif return 0; }
static int __init blackstamp_init(void) { int ret; printk(KERN_INFO "%s(): registering device resources\n", __func__); i2c_register_board_info(0, bfin_i2c_board_info, ARRAY_SIZE(bfin_i2c_board_info)); ret = platform_add_devices(stamp_devices, ARRAY_SIZE(stamp_devices)); if (ret < 0) return ret; #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE) /* setup BF533_STAMP CPLD to route AMS3 to Ethernet MAC */ bfin_write_FIO_DIR(bfin_read_FIO_DIR() | PF0); bfin_write_FIO_FLAG_S(PF0); SSYNC(); #endif spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info)); return 0; }
void bfspi_reset(int reset_bit) { PRINTK("toggle reset\n"); #if (defined(CONFIG_BF533) || defined(CONFIG_BF532)) PRINTK("set reset to PF%d\n",reset_bit); bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (1<<reset_bit)); __builtin_bfin_ssync(); bfin_write_FIO_FLAG_C((1<<reset_bit)); __builtin_bfin_ssync(); udelay(100); bfin_write_FIO_FLAG_S((1<<reset_bit)); __builtin_bfin_ssync(); #endif #if (defined(CONFIG_BF536) || defined(CONFIG_BF537)) if (reset_bit == 1) { PRINTK("set reset to PF10\n"); bfin_write_PORTF_FER(bfin_read_PORTF_FER() & 0xFBFF); __builtin_bfin_ssync(); bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | 0x0400); __builtin_bfin_ssync(); bfin_write_PORTFIO_CLEAR(1<<10); __builtin_bfin_ssync(); udelay(100); bfin_write_PORTFIO_SET(1<<10); __builtin_bfin_ssync(); } else if (reset_bit == 2) { PRINTK("Error: cannot set reset to PJ11\n"); } else if (reset_bit == 3) { PRINTK("Error: cannot set reset to PJ10\n"); } else if (reset_bit == 4) { PRINTK("set reset to PF6\n"); bfin_write_PORTF_FER(bfin_read_PORTF_FER() & 0xFFBF); __builtin_bfin_ssync(); bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | 0x0040); __builtin_bfin_ssync(); bfin_write_PORTFIO_CLEAR(1<<6); __builtin_bfin_ssync(); udelay(100); bfin_write_PORTFIO_SET(1<<6); __builtin_bfin_ssync(); } else if (reset_bit == 5) { PRINTK("set reset to PF5\n"); bfin_write_PORTF_FER(bfin_read_PORTF_FER() & 0xFFDF); __builtin_bfin_ssync(); bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | 0x0020); __builtin_bfin_ssync(); bfin_write_PORTFIO_CLEAR(1<<5); __builtin_bfin_ssync(); udelay(100); bfin_write_PORTFIO_SET(1<<5); __builtin_bfin_ssync(); } else if (reset_bit == 6) { PRINTK("set reset to PF4\n"); bfin_write_PORTF_FER(bfin_read_PORTF_FER() & 0xFFEF); __builtin_bfin_ssync(); bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | 0x0010); __builtin_bfin_ssync(); bfin_write_PORTFIO_CLEAR(1<<4); __builtin_bfin_ssync(); udelay(100); bfin_write_PORTFIO_SET(1<<4); __builtin_bfin_ssync(); } else if (reset_bit == 7) { PRINTK("Error: cannot set reset to PJ5\n"); } else if (reset_bit == 8) { PRINTK("Using PF8 for reset...\n"); bfin_write_PORTF_FER(bfin_read_PORTF_FER() & 0xFEFF); __builtin_bfin_ssync(); bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | 0x0100); __builtin_bfin_ssync(); bfin_write_PORTFIO_CLEAR(1<<8); __builtin_bfin_ssync(); udelay(100); bfin_write_PORTFIO_SET(1<<8); } else if ( reset_bit == 9 ) { PRINTK("Using PF9 for reset...\n"); bfin_write_PORTF_FER(bfin_read_PORTF_FER() & 0xFDFF); __builtin_bfin_ssync(); bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | 0x0200); __builtin_bfin_ssync(); bfin_write_PORTFIO_CLEAR(1<<9); __builtin_bfin_ssync(); udelay(100); bfin_write_PORTFIO_SET(1<<9); } #endif /* p24 3050 data sheet, allow 1ms for PLL lock, with less than 1ms (1000us) I found register 2 would have a value of 0 rather than 3, indicating a bad reset. */ udelay(1000); }
void bfspi_hardware_init(int baud, u16 new_chip_select_mask) { u16 ctl_reg, flag; int cs, bit; if (baud < 4) { printk("\nkern>>baud = %d may mean SPI clock too fast for Si labs 3050" "consider baud == 4 or greater", baud); } PRINTK("\nkern>> bfspi_spi_init\n"); PRINTK("kern>> new_chip_select_mask = 0x%04x\n", new_chip_select_mask); #if (defined(CONFIG_BF533) || defined(CONFIG_BF532)) PRINTK("kern>> FIOD_DIR = 0x%04x\n", bfin_read_FIO_DIR()); #endif #if (defined(CONFIG_BF536) || defined(CONFIG_BF537)) PRINTK(" FIOD_DIR = 0x%04x\n", bfin_read_PORTFIO_DIR()); #endif /* grab SPISEL/GPIO pins for SPI, keep level of SPISEL pins H */ chip_select_mask |= new_chip_select_mask; flag = 0xff00 | (chip_select_mask & 0xff); /* set up chip selects greater than PF7 */ if (chip_select_mask & 0xff00) { #if (defined(CONFIG_BF533) || defined(CONFIG_BF532)) bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (chip_select_mask & 0xff00)); #endif #if (defined(CONFIG_BF536) || defined(CONFIG_BF537)) bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() | (chip_select_mask & 0xff00)); #endif __builtin_bfin_ssync(); } #if (defined(CONFIG_BF533) || defined(CONFIG_BF532)) PRINTK("kern>> After FIOD_DIR = 0x%04x\n", bfin_read_FIO_DIR()); #endif #if (defined(CONFIG_BF536) || defined(CONFIG_BF537)) PRINTK(" After FIOD_DIR = 0x%04x\n",bfin_read_PORTFIO_DIR()); /* we need to work thru each bit in mask and set the MUX regs */ for(bit=0; bit<8; bit++) { if (chip_select_mask & (1<<bit)) { PRINTK("SPI CS bit: %d enabled\n", bit); cs = bit; if (cs == 1) { PRINTK("set for chip select 1\n"); bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3c00); __builtin_bfin_ssync(); } else if (cs == 2 || cs == 3) { PRINTK("set for chip select 2\n"); bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PJSE_SPI); __builtin_bfin_ssync(); bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3800); __builtin_bfin_ssync(); } else if (cs == 4) { bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PFS4E_SPI); __builtin_bfin_ssync(); bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3840); __builtin_bfin_ssync(); } else if (cs == 5) { bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PFS5E_SPI); __builtin_bfin_ssync(); bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3820); __builtin_bfin_ssync(); } else if (cs == 6) { bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PFS6E_SPI); __builtin_bfin_ssync(); bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3810); __builtin_bfin_ssync(); } else if (cs == 7) { bfin_write_PORT_MUX(bfin_read_PORT_MUX() | PJCE_SPI); __builtin_bfin_ssync(); bfin_write_PORTF_FER(bfin_read_PORTF_FER() | 0x3800); __builtin_bfin_ssync(); } } } #endif /* note TIMOD = 00 - reading SPI_RDBR kicks off transfer */ //Undefines flags lets patch it for now. BFSI is kind of obsolate. //Will be replaced in teh future ctl_reg = 0xD004; //0101 1100 0000 0100 SPE | MSTR | CPOL | CPHA | SZ; ctl_reg |= (spimode << 10); bfin_write_SPI_FLG(flag); bfin_write_SPI_BAUD(baud); bfin_write_SPI_CTL(ctl_reg); }
void __led_init(led_id_t mask, int state) { bfin_write_FIO_INEN(bfin_read_FIO_INEN() & ~(PF2 | PF3 | PF4)); bfin_write_FIO_DIR(bfin_read_FIO_DIR() | (PF2 | PF3 | PF4)); }