9 #include <linux/device.h>
17 #include <linux/i2c.h>
27 #include <linux/input.h>
39 #if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE)
41 static struct resource bfin_isp1760_resources[] = {
44 .end = 0x2C0C0000 + 0xfffff,
59 .dack_polarity_high = 0,
60 .dreq_polarity_high = 0,
67 .platform_data = &isp1760_priv,
69 .num_resources =
ARRAY_SIZE(bfin_isp1760_resources),
70 .resource = bfin_isp1760_resources,
74 #if defined(CONFIG_INPUT_BFIN_ROTARY) || defined(CONFIG_INPUT_BFIN_ROTARY_MODULE)
86 static struct resource bfin_rotary_resources[] = {
95 .
name =
"bfin-rotary",
97 .num_resources =
ARRAY_SIZE(bfin_rotary_resources),
98 .resource = bfin_rotary_resources,
100 .platform_data = &bfin_rotary_data,
105 #if defined(CONFIG_STMMAC_ETH) || defined(CONFIG_STMMAC_ETH_MODULE)
119 .mdio_bus_data = &phy_private_data,
140 .power.can_wakeup = 1,
141 .platform_data = ð_private_data,
146 #if defined(CONFIG_INPUT_ADXL34X) || defined(CONFIG_INPUT_ADXL34X_MODULE)
152 .tap_threshold = 0x31,
153 .tap_duration = 0x10,
157 .act_axis_control = 0xFF,
158 .activity_threshold = 5,
159 .inactivity_threshold = 3,
160 .inactivity_time = 4,
161 .free_fall_threshold = 0x7,
162 .free_fall_time = 0x20,
185 #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
192 #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
193 #ifdef CONFIG_SERIAL_BFIN_UART0
194 static struct resource bfin_uart0_resources[] = {
225 #ifdef CONFIG_BFIN_UART0_CTSRTS
239 static unsigned short bfin_uart0_peripherals[] = {
241 #ifdef CONFIG_BFIN_UART0_CTSRTS
250 .num_resources =
ARRAY_SIZE(bfin_uart0_resources),
251 .resource = bfin_uart0_resources,
253 .platform_data = &bfin_uart0_peripherals,
257 #ifdef CONFIG_SERIAL_BFIN_UART1
258 static struct resource bfin_uart1_resources[] = {
289 #ifdef CONFIG_BFIN_UART1_CTSRTS
303 static unsigned short bfin_uart1_peripherals[] = {
305 #ifdef CONFIG_BFIN_UART1_CTSRTS
314 .num_resources =
ARRAY_SIZE(bfin_uart1_resources),
315 .resource = bfin_uart1_resources,
317 .platform_data = &bfin_uart1_peripherals,
323 #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
324 #ifdef CONFIG_BFIN_SIR0
325 static struct resource bfin_sir0_resources[] = {
345 .num_resources =
ARRAY_SIZE(bfin_sir0_resources),
346 .resource = bfin_sir0_resources,
349 #ifdef CONFIG_BFIN_SIR1
350 static struct resource bfin_sir1_resources[] = {
370 .num_resources =
ARRAY_SIZE(bfin_sir1_resources),
371 .resource = bfin_sir1_resources,
376 #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
377 static struct resource musb_resources[] = {
407 #if defined(CONFIG_USB_MUSB_HDRC) && defined(CONFIG_USB_GADGET_MUSB_HDRC)
409 #elif defined(CONFIG_USB_MUSB_HDRC)
411 #elif defined(CONFIG_USB_GADGET_MUSB_HDRC)
414 .config = &musb_config,
417 static u64 musb_dmamask = ~(
u32)0;
420 .
name =
"musb-blackfin",
423 .dma_mask = &musb_dmamask,
424 .coherent_dma_mask = 0xffffffff,
425 .platform_data = &musb_plat,
428 .resource = musb_resources,
432 #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
433 #ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
434 static struct resource bfin_sport0_uart_resources[] = {
452 static unsigned short bfin_sport0_peripherals[] = {
458 .
name =
"bfin-sport-uart",
460 .num_resources =
ARRAY_SIZE(bfin_sport0_uart_resources),
461 .resource = bfin_sport0_uart_resources,
463 .platform_data = &bfin_sport0_peripherals,
467 #ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
468 static struct resource bfin_sport1_uart_resources[] = {
486 static unsigned short bfin_sport1_peripherals[] = {
492 .
name =
"bfin-sport-uart",
494 .num_resources =
ARRAY_SIZE(bfin_sport1_uart_resources),
495 .resource = bfin_sport1_uart_resources,
497 .platform_data = &bfin_sport1_peripherals,
501 #ifdef CONFIG_SERIAL_BFIN_SPORT2_UART
502 static struct resource bfin_sport2_uart_resources[] = {
520 static unsigned short bfin_sport2_peripherals[] = {
526 .
name =
"bfin-sport-uart",
528 .num_resources =
ARRAY_SIZE(bfin_sport2_uart_resources),
529 .resource = bfin_sport2_uart_resources,
531 .platform_data = &bfin_sport2_peripherals,
537 #if defined(CONFIG_CAN_BFIN) || defined(CONFIG_CAN_BFIN_MODULE)
539 static unsigned short bfin_can0_peripherals[] = {
543 static struct resource bfin_can0_resources[] = {
569 .num_resources =
ARRAY_SIZE(bfin_can0_resources),
570 .resource = bfin_can0_resources,
572 .platform_data = &bfin_can0_peripherals,
578 #if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
581 .name =
"bootloader(nand)",
585 .name =
"linux kernel(nand)",
587 .size = 4 * 1024 * 1024,
590 .name =
"file system(nand)",
598 .partitions = partition_info,
604 static struct resource bfin_nand_resources[] = {
620 .num_resources =
ARRAY_SIZE(bfin_nand_resources),
621 .resource = bfin_nand_resources,
623 .platform_data = &bfin_nand_platform,
628 #if defined(CONFIG_SDH_BFIN) || defined(CONFIG_SDH_BFIN_MODULE)
640 .platform_data = &bfin_sdh_data,
645 #if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
648 .
name =
"bootloader(nor)",
652 .name =
"linux kernel(nor)",
656 .name =
"file system(nor)",
657 .size = 0x1000000 - 0x80000 - 0x400000,
664 #define CONFIG_SMC_GCTL_VAL 0x00000010
665 const unsigned short pins[] = {
666 P_A3,
P_A4,
P_A5,
P_A6,
P_A7,
P_A8,
P_A9,
P_A10,
P_A11,
P_A12,
682 const unsigned short pins[] = {
683 P_A3,
P_A4,
P_A5,
P_A6,
P_A7,
P_A8,
P_A9,
P_A10,
P_A11,
P_A12,
695 .parts = ezkit_partitions,
699 #ifdef CONFIG_ROMKERNEL
700 .probe_type =
"map_rom",
704 static struct resource ezkit_flash_resource = {
711 .
name =
"physmap-flash",
714 .platform_data = &ezkit_flash_data,
717 .resource = &ezkit_flash_resource,
721 #if defined(CONFIG_MTD_M25P80) \
722 || defined(CONFIG_MTD_M25P80_MODULE)
726 .
name =
"bootloader(spi)",
731 .name =
"linux kernel(spi)",
735 .name =
"file system(spi)",
743 .parts = bfin_spi_flash_partitions,
744 .nr_parts =
ARRAY_SIZE(bfin_spi_flash_partitions),
753 #if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
759 #if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE)
761 .
name =
"bfin-i2s-pcm-audio",
766 #if defined(CONFIG_SND_BF6XX_SOC_I2S) || \
767 defined(CONFIG_SND_BF6XX_SOC_I2S_MODULE)
769 static struct resource bfin_snd_resources[] = {
802 static const unsigned short bfin_snd_pin[] = {
813 .num_resources =
ARRAY_SIZE(bfin_snd_resources),
814 .resource = bfin_snd_resources,
816 .platform_data = &bfin_snd_data,
821 #if defined(CONFIG_SND_BF5XX_SOC_AD1836) \
822 || defined(CONFIG_SND_BF5XX_SOC_AD1836_MODULE)
823 static const char *
const ad1836_link[] = {
828 .
name =
"bfin-snd-ad1836",
831 .platform_data = (
void *)ad1836_link,
836 #if defined(CONFIG_SND_SOC_BFIN_EVAL_ADAU1X61) || \
837 defined(CONFIG_SND_SOC_BFIN_EVAL_ADAU1X61_MODULE)
839 .
name =
"bfin-eval-adau1x61",
843 #if defined(CONFIG_SND_SOC_ADAU1761) || defined(CONFIG_SND_SOC_ADAU1761_MODULE)
844 #include <sound/adau17x1.h>
845 static struct adau1761_platform_data adau1761_info = {
846 .lineout_mode = ADAU1761_OUTPUT_MODE_LINE,
847 .headphone_mode = ADAU1761_OUTPUT_MODE_HEADPHONE_CAPLESS,
851 #if defined(CONFIG_VIDEO_BLACKFIN_CAPTURE) \
852 || defined(CONFIG_VIDEO_BLACKFIN_CAPTURE_MODULE)
853 #include <linux/videodev2.h>
857 static const unsigned short ppi_req[] = {
862 #if !defined(CONFIG_VIDEO_VS6624) && !defined(CONFIG_VIDEO_VS6624_MODULE)
871 .
type = PPI_TYPE_EPPI3,
878 #if defined(CONFIG_VIDEO_VS6624) \
879 || defined(CONFIG_VIDEO_VS6624_MODULE)
896 static const unsigned vs6624_ce_pin =
GPIO_PE4;
900 .inputs = vs6624_inputs,
902 .routes = vs6624_routes,
907 .platform_data = (
void *)&vs6624_ce_pin,
909 .ppi_info = &ppi_info,
911 | EPPI_CTL_POLC3 | EPPI_CTL_SYNC2 | EPPI_CTL_NON656),
916 #if defined(CONFIG_VIDEO_ADV7842) \
917 || defined(CONFIG_VIDEO_ADV7842_MODULE)
918 #include <media/adv7842.h>
960 | EPPI_CTL_ACTIVE656),
978 | EPPI_CTL_FS1LO_FS2LO | EPPI_CTL_POLC2
979 | EPPI_CTL_SYNC2 | EPPI_CTL_NON656),
983 static struct adv7842_output_format adv7842_opf[] = {
985 .op_ch_sel = ADV7842_OP_CH_SEL_BRG,
986 .op_format_sel = ADV7842_OP_FORMAT_SEL_SDR_ITU656_8,
989 .insert_av_codes = 1,
992 .op_ch_sel = ADV7842_OP_CH_SEL_RGB,
993 .op_format_sel = ADV7842_OP_FORMAT_SEL_SDR_ITU656_16,
999 static struct adv7842_platform_data adv7842_data = {
1002 .ain_sel = ADV7842_AIN10_11_12_NC_SYNC_4_1,
1003 .prim_mode = ADV7842_PRIM_MODE_SDP,
1004 .vid_std_select = ADV7842_SDP_VID_STD_CVBS_SD_4x1,
1005 .inp_color_space = ADV7842_INP_COLOR_SPACE_AUTO,
1012 .i2c_repeater = 0x46,
1014 .i2c_infoframe = 0x48,
1022 .inputs = adv7842_inputs,
1024 .routes = adv7842_routes,
1025 .i2c_adapter_id = 0,
1029 .platform_data = (
void *)&adv7842_data,
1031 .ppi_info = &ppi_info,
1033 | EPPI_CTL_ACTIVE656),
1038 .
name =
"bfin_capture",
1040 .platform_data = &bfin_capture_data,
1045 #if defined(CONFIG_VIDEO_BLACKFIN_DISPLAY) \
1046 || defined(CONFIG_VIDEO_BLACKFIN_DISPLAY_MODULE)
1047 #include <linux/videodev2.h>
1048 #include <media/blackfin/bfin_display.h>
1051 static const unsigned short ppi_req_disp[] = {
1060 static const struct ppi_info ppi_info = {
1061 .
type = PPI_TYPE_EPPI3,
1068 #if defined(CONFIG_VIDEO_ADV7511) \
1069 || defined(CONFIG_VIDEO_ADV7511_MODULE)
1070 #include <media/adv7511.h>
1081 static struct disp_route adv7511_routes[] = {
1087 static struct adv7511_platform_data adv7511_data = {
1092 static struct bfin_display_config bfin_display_data = {
1093 .card_name =
"BF609",
1094 .outputs = adv7511_outputs,
1096 .routes = adv7511_routes,
1097 .i2c_adapter_id = 0,
1101 .platform_data = (
void *)&adv7511_data,
1103 .ppi_info = &ppi_info,
1105 | EPPI_CTL_FS1LO_FS2LO | EPPI_CTL_POLC3
1106 | EPPI_CTL_IFSGEN | EPPI_CTL_SYNC2
1107 | EPPI_CTL_NON656 | EPPI_CTL_DIR),
1112 .
name =
"bfin_display",
1114 .platform_data = &bfin_display_data,
1119 #if defined(CONFIG_BFIN_CRC)
1120 #define BFIN_CRC_NAME "bfin-crc"
1122 static struct resource bfin_crc0_resources[] = {
1146 .
name = BFIN_CRC_NAME,
1148 .num_resources =
ARRAY_SIZE(bfin_crc0_resources),
1149 .resource = bfin_crc0_resources,
1152 static struct resource bfin_crc1_resources[] = {
1176 .
name = BFIN_CRC_NAME,
1178 .num_resources =
ARRAY_SIZE(bfin_crc1_resources),
1179 .resource = bfin_crc1_resources,
1183 #if defined(CONFIG_CRYPTO_DEV_BFIN_CRC)
1184 #define BFIN_CRYPTO_CRC_NAME "bfin-hmac-crc"
1185 #define BFIN_CRYPTO_CRC_POLY_DATA 0x5c5c5c5c
1187 static struct resource bfin_crypto_crc_resources[] = {
1206 .
name = BFIN_CRYPTO_CRC_NAME,
1208 .num_resources =
ARRAY_SIZE(bfin_crypto_crc_resources),
1209 .resource = bfin_crypto_crc_resources,
1211 .platform_data = (
void *)BFIN_CRYPTO_CRC_POLY_DATA,
1216 #if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
1219 .vref_delay_usecs = 50,
1220 .x_plate_ohms = 419,
1221 .y_plate_ohms = 486,
1222 .pressure_max = 1000,
1224 .stopacq_polarity = 1,
1225 .first_conversion_delay = 3,
1226 .acquisition_time = 1,
1228 .pen_down_acc_interval = 1,
1232 #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
1233 #include <linux/input.h>
1242 .
buttons = bfin_gpio_keys_table,
1243 .nbuttons =
ARRAY_SIZE(bfin_gpio_keys_table),
1247 .
name =
"gpio-keys",
1249 .platform_data = &bfin_gpio_keys_data,
1255 #if defined(CONFIG_MTD_M25P80) \
1256 || defined(CONFIG_MTD_M25P80_MODULE)
1259 .modalias =
"m25p80",
1260 .max_speed_hz = 25000000,
1263 .platform_data = &bfin_spi_flash_data,
1264 .controller_data = &spi_flash_chip_info,
1268 #if defined(CONFIG_TOUCHSCREEN_AD7877) || defined(CONFIG_TOUCHSCREEN_AD7877_MODULE)
1270 .modalias =
"ad7877",
1271 .platform_data = &bfin_ad7877_ts_info,
1273 .max_speed_hz = 12500000,
1278 #if defined(CONFIG_SPI_SPIDEV) || defined(CONFIG_SPI_SPIDEV_MODULE)
1280 .modalias =
"spidev",
1281 .max_speed_hz = 3125000,
1284 .controller_data = &spidev_chip_info,
1287 #if defined(CONFIG_INPUT_ADXL34X_SPI) || defined(CONFIG_INPUT_ADXL34X_SPI_MODULE)
1289 .modalias =
"adxl34x",
1290 .platform_data = &adxl34x_info,
1292 .max_speed_hz = 5000000,
1299 #if defined(CONFIG_SPI_BFIN6XX) || defined(CONFIG_SPI_BFIN6XX_MODULE)
1301 static struct resource bfin_spi0_resource[] = {
1320 static struct resource bfin_spi1_resource[] = {
1348 .num_resources =
ARRAY_SIZE(bfin_spi0_resource),
1349 .resource = bfin_spi0_resource,
1351 .platform_data = &bf60x_spi_master_info0,
1363 .num_resources =
ARRAY_SIZE(bfin_spi1_resource),
1364 .resource = bfin_spi1_resource,
1366 .platform_data = &bf60x_spi_master_info1,
1371 #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
1374 static struct resource bfin_twi0_resource[] = {
1388 .
name =
"i2c-bfin-twi",
1390 .num_resources =
ARRAY_SIZE(bfin_twi0_resource),
1391 .resource = bfin_twi0_resource,
1393 .platform_data = &bfin_twi0_pins,
1399 static struct resource bfin_twi1_resource[] = {
1413 .
name =
"i2c-bfin-twi",
1415 .num_resources =
ARRAY_SIZE(bfin_twi1_resource),
1416 .resource = bfin_twi1_resource,
1418 .platform_data = &bfin_twi1_pins,
1423 static struct i2c_board_info __initdata bfin_i2c_board_info0[] = {
1424 #if defined(CONFIG_INPUT_ADXL34X_I2C) || defined(CONFIG_INPUT_ADXL34X_I2C_MODULE)
1428 .platform_data = (
void *)&adxl34x_info,
1431 #
if defined(CONFIG_SND_SOC_ADAU1761) || defined(CONFIG_SND_SOC_ADAU1761_MODULE)
1434 .platform_data = (
void *)&adau1761_info
1437 #
if defined(CONFIG_SND_SOC_SSM2602) || defined(CONFIG_SND_SOC_SSM2602_MODULE)
1444 static struct i2c_board_info __initdata bfin_i2c_board_info1[] = {
1447 static const unsigned int cclk_vlev_datasheet[] =
1463 .tuple_tab = cclk_vlev_datasheet,
1465 .vr_settling_time = 25 ,
1469 .name =
"bfin dpmc",
1471 .platform_data = &bfin_dmpc_vreg_data,
1479 #if defined(CONFIG_RTC_DRV_BFIN) || defined(CONFIG_RTC_DRV_BFIN_MODULE)
1483 #if defined(CONFIG_SERIAL_BFIN) || defined(CONFIG_SERIAL_BFIN_MODULE)
1484 #ifdef CONFIG_SERIAL_BFIN_UART0
1487 #ifdef CONFIG_SERIAL_BFIN_UART1
1492 #if defined(CONFIG_BFIN_SIR) || defined(CONFIG_BFIN_SIR_MODULE)
1493 #ifdef CONFIG_BFIN_SIR0
1496 #ifdef CONFIG_BFIN_SIR1
1501 #if defined(CONFIG_STMMAC_ETH) || defined(CONFIG_STMMAC_ETH_MODULE)
1505 #if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
1509 #if defined(CONFIG_USB_ISP1760_HCD) || defined(CONFIG_USB_ISP1760_HCD_MODULE)
1510 &bfin_isp1760_device,
1513 #if defined(CONFIG_SERIAL_BFIN_SPORT) || defined(CONFIG_SERIAL_BFIN_SPORT_MODULE)
1514 #ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
1515 &bfin_sport0_uart_device,
1517 #ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
1518 &bfin_sport1_uart_device,
1520 #ifdef CONFIG_SERIAL_BFIN_SPORT2_UART
1521 &bfin_sport2_uart_device,
1525 #if defined(CONFIG_CAN_BFIN) || defined(CONFIG_CAN_BFIN_MODULE)
1529 #if defined(CONFIG_MTD_NAND_BF5XX) || defined(CONFIG_MTD_NAND_BF5XX_MODULE)
1533 #if defined(CONFIG_SDH_BFIN) || defined(CONFIG_SDH_BFIN_MODULE)
1537 #if defined(CONFIG_SPI_BFIN6XX) || defined(CONFIG_SPI_BFIN6XX_MODULE)
1542 #if defined(CONFIG_INPUT_BFIN_ROTARY) || defined(CONFIG_INPUT_BFIN_ROTARY_MODULE)
1543 &bfin_rotary_device,
1546 #if defined(CONFIG_I2C_BLACKFIN_TWI) || defined(CONFIG_I2C_BLACKFIN_TWI_MODULE)
1547 &i2c_bfin_twi0_device,
1548 #if !defined(CONFIG_BF542)
1549 &i2c_bfin_twi1_device,
1553 #if defined(CONFIG_BFIN_CRC)
1557 #if defined(CONFIG_CRYPTO_DEV_BFIN_CRC)
1558 &bfin_crypto_crc_device,
1561 #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
1562 &bfin_device_gpiokeys,
1565 #if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
1566 &ezkit_flash_device,
1568 #if defined(CONFIG_SND_BF5XX_I2S) || defined(CONFIG_SND_BF5XX_I2S_MODULE)
1571 #if defined(CONFIG_SND_BF6XX_SOC_I2S) || \
1572 defined(CONFIG_SND_BF6XX_SOC_I2S_MODULE)
1575 #if defined(CONFIG_SND_BF5XX_SOC_AD1836) || \
1576 defined(CONFIG_SND_BF5XX_SOC_AD1836_MODULE)
1577 &bfin_ad1836_machine,
1579 #if defined(CONFIG_SND_SOC_BFIN_EVAL_ADAU1X61) || \
1580 defined(CONFIG_SND_SOC_BFIN_EVAL_ADAU1X61_MODULE)
1583 #if defined(CONFIG_VIDEO_BLACKFIN_CAPTURE) \
1584 || defined(CONFIG_VIDEO_BLACKFIN_CAPTURE_MODULE)
1585 &bfin_capture_device,
1587 #if defined(CONFIG_VIDEO_BLACKFIN_DISPLAY) \
1588 || defined(CONFIG_VIDEO_BLACKFIN_DISPLAY_MODULE)
1589 &bfin_display_device,
1594 static int __init ezkit_init(
void)
1603 #if defined(CONFIG_STMMAC_ETH) || defined(CONFIG_STMMAC_ETH_MODULE)
1618 #if defined(CONFIG_SERIAL_BFIN_CONSOLE) || defined(CONFIG_EARLY_PRINTK)
1619 #ifdef CONFIG_SERIAL_BFIN_UART0
1622 #ifdef CONFIG_SERIAL_BFIN_UART1
1627 #if defined(CONFIG_SERIAL_BFIN_SPORT_CONSOLE)
1628 #ifdef CONFIG_SERIAL_BFIN_SPORT0_UART
1629 &bfin_sport0_uart_device,
1631 #ifdef CONFIG_SERIAL_BFIN_SPORT1_UART
1632 &bfin_sport1_uart_device,
1634 #ifdef CONFIG_SERIAL_BFIN_SPORT2_UART
1635 &bfin_sport2_uart_device,