diff --git a/boards/coredevices/index.rst b/boards/coredevices/index.rst new file mode 100644 index 0000000000000..1a55b5c4a9b2e --- /dev/null +++ b/boards/coredevices/index.rst @@ -0,0 +1,10 @@ +.. _boards-coredevices: + +Core Devices LLC +################ + +.. toctree:: + :maxdepth: 1 + :glob: + + **/* diff --git a/boards/coredevices/p2d/Kconfig.p2d b/boards/coredevices/p2d/Kconfig.p2d new file mode 100644 index 0000000000000..d1935f0727175 --- /dev/null +++ b/boards/coredevices/p2d/Kconfig.p2d @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_P2D + select SOC_NRF52840_QIAA diff --git a/boards/coredevices/p2d/board.cmake b/boards/coredevices/p2d/board.cmake new file mode 100644 index 0000000000000..13a394dccee1b --- /dev/null +++ b/boards/coredevices/p2d/board.cmake @@ -0,0 +1,11 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(jlink "--device=nRF52840_xxAA" "--speed=4000") +board_runner_args(pyocd "--target=nrf52840" "--frequency=4000000") + +include(${ZEPHYR_BASE}/boards/common/nrfutil.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) +include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake) diff --git a/boards/coredevices/p2d/board.yml b/boards/coredevices/p2d/board.yml new file mode 100644 index 0000000000000..6c5d65750398a --- /dev/null +++ b/boards/coredevices/p2d/board.yml @@ -0,0 +1,9 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +boards: +- name: p2d + full_name: Pebble 2 Duo + vendor: coredevices + socs: + - name: nrf52840 diff --git a/boards/coredevices/p2d/doc/img/p2d.webp b/boards/coredevices/p2d/doc/img/p2d.webp new file mode 100644 index 0000000000000..a539d1d74e359 Binary files /dev/null and b/boards/coredevices/p2d/doc/img/p2d.webp differ diff --git a/boards/coredevices/p2d/doc/index.rst b/boards/coredevices/p2d/doc/index.rst new file mode 100644 index 0000000000000..41e16375e15d8 --- /dev/null +++ b/boards/coredevices/p2d/doc/index.rst @@ -0,0 +1,45 @@ +.. zephyr:board:: p2d + +Overview +******** + +Pebble 2 Duo is a smart watch based on the nRF52840 series chip SoC. + +More information about the watch can be found at the `RePebble website`_. + +Hardware +******** + +Pebble 2 Duo provides the following hardware components: + +- Nordic nRF52840 +- nPM1300 PMIC for power supply and battery charging +- GD25LE255E 256 Mb QSPI NOR +- Sharp LS013B7DH05 Memory-in-Pixel (MiP) monochrome display +- PWM backlight control using TPS22916 driver +- OPT3001 ambient light sensor +- 4 physical buttons +- LSM6DSOW IMU (accelerometer/gyroscope) +- MMC5603NJ magnetometer +- MSM261DDB020 PDM microphone +- Speaker driven by DA7212 audio codec +- LRA driven by TI DRV2604 haptic driver +- Programming connector + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +Programming and Debugging +************************* + +.. zephyr:board-supported-runners:: + +References +********** + +.. target-notes:: + +.. _RePebble website: + https://repebble.com/ diff --git a/boards/coredevices/p2d/p2d-pinctrl.dtsi b/boards/coredevices/p2d/p2d-pinctrl.dtsi new file mode 100644 index 0000000000000..1a59246d63f77 --- /dev/null +++ b/boards/coredevices/p2d/p2d-pinctrl.dtsi @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2025 Core Devices LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + i2c0_default: i2c0_default { + group1 { + psels = , + ; + }; + }; + + i2c0_sleep: i2c0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2c1_default: i2c1_default { + group1 { + psels = , + ; + }; + }; + + i2c1_sleep: i2c1_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + i2s0_default: i2s0_default { + group1 { + psels = , + , + , + ; + }; + }; + + i2s0_sleep: i2s0_sleep { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + pdm0_default: pdm0_default { + group1 { + psels = , + ; + }; + }; + + pwm0_default: pwm0_default { + group1 { + psels = ; + }; + }; + + pwm0_sleep: pwm0_sleep { + group1 { + psels = ; + low-power-enable; + }; + }; + + qspi_default: qspi_default { + group1 { + psels = , + , + , + , + , + ; + nordic,drive-mode = ; + }; + }; + + qspi_sleep: qspi_sleep { + group1 { + psels = , + , + , + , + ; + low-power-enable; + }; + group2 { + psels = ; + low-power-enable; + bias-pull-up; + }; + }; + + spi3_default: spi3_default { + group1 { + psels = , + ; + }; + }; + + spi3_sleep: spi3_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; + + uart0_default: uart0_default { + group1 { + psels = ; + }; + group2 { + psels = ; + bias-pull-up; + }; + }; + + uart0_sleep: uart0_sleep { + group1 { + psels = , + ; + low-power-enable; + }; + }; +}; diff --git a/boards/coredevices/p2d/p2d.dts b/boards/coredevices/p2d/p2d.dts new file mode 100644 index 0000000000000..4b7c47e58a542 --- /dev/null +++ b/boards/coredevices/p2d/p2d.dts @@ -0,0 +1,263 @@ +/* + * Copyright (c) 2025 Core Devices LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include +#include "p2d-pinctrl.dtsi" + +#include +#include +#include + +/ { + model = "Core Devices Pebble 2 Duo"; + compatible = "coredevices,p2d"; + + chosen { + zephyr,console = &uart0; + zephyr,bt-mon-uart = &uart0; + zephyr,bt-c2h-uart = &uart0; + zephyr,display = &ls013b7dh05; + zephyr,ieee802154 = &ieee802154; + zephyr,shell-uart = &uart0; + zephyr,uart-mcumgr = &uart0; + }; + + buttons: buttons { + compatible = "gpio-keys"; + + btn_back: button-back { + gpios = <&gpio0 28 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "BACK"; + zephyr,code = ; + }; + + btn_up: button-up { + gpios = <&gpio0 29 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "UP"; + zephyr,code = ; + }; + + btn_center: button-center { + gpios = <&gpio0 30 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "CENTER"; + zephyr,code = ; + }; + + btn_down: button-down { + gpios = <&gpio0 31 (GPIO_PULL_UP | GPIO_ACTIVE_LOW)>; + label = "DOWN"; + zephyr,code = ; + }; + }; + + aliases { + accel0 = &lsm6dso; + sw0 = &btn_back; + sw1 = &btn_up; + sw2 = &btn_center; + sw3 = &btn_down; + magn0 = &mmc5603; + mcuboot-button0 = &btn_back; + pressure-sensor = &bmp390; + watchdog0 = &wdt0; + }; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twim"; + status = "okay"; + pinctrl-0 = <&i2c0_default>; + pinctrl-1 = <&i2c0_sleep>; + pinctrl-names = "default", "sleep"; + + npm1300: pmic@6b { + compatible = "nordic,npm1300"; + reg = <0x6b>; + pmic-int-pin = <1>; + host-int-gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>; + + regulators { + compatible = "nordic,npm1300-regulator"; + + buck1: BUCK1 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-boot-on; + }; + + ldo1: LDO1 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-allowed-modes = ; + regulator-initial-mode = ; + regulator-init-microvolt = <1800000>; + regulator-boot-on; + }; + + ldo2: LDO2 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-allowed-modes = ; + regulator-initial-mode = ; + regulator-init-microvolt = <1800000>; + regulator-boot-on; + }; + }; + + charger: charger { + compatible = "nordic,npm1300-charger"; + term-microvolt = <4150000>; + term-warm-microvolt = <4000000>; + current-microamp = <150000>; + dischg-limit-microamp = <1000000>; + vbus-limit-microamp = <500000>; + thermistor-ohms = <10000>; + thermistor-beta = <3380>; + charging-enable; + }; + }; +}; + +&i2c1 { + compatible = "nordic,nrf-twim"; + status = "okay"; + pinctrl-0 = <&i2c1_default>; + pinctrl-1 = <&i2c1_sleep>; + pinctrl-names = "default", "sleep"; + + mmc5603: magnetic-sensor@30 { + compatible = "memsic,mmc56x3"; + reg = <0x30>; + magn-odr = <0>; + }; + + opt3001: light-sensor@44 { + compatible = "ti,opt3001"; + reg = <0x44>; + int-gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>; + }; + + lsm6dso: imu-sensor@6a { + compatible = "st,lsm6dso"; + reg = <0x6a>; + irq-gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>; + accel-pm = ; + gyro-pm = ; + }; + + bmp390: pressure-sensor@76 { + compatible = "bosch,bmp390"; + reg = <0x76>; + odr = "50"; + int-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>; + }; +}; + +&i2s0 { + compatible = "nordic,nrf-i2s"; + status = "okay"; + pinctrl-0 = <&i2s0_default>; + pinctrl-1 = <&i2s0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&ieee802154 { + status = "okay"; +}; + +&pdm0 { + status = "okay"; + pinctrl-0 = <&pdm0_default>; + pinctrl-names = "default"; + clock-source = "PCLK32M_HFXO"; +}; + +&pwm0 { + status = "okay"; + pinctrl-0 = <&pwm0_default>; + pinctrl-1 = <&pwm0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&qspi { + status = "okay"; + pinctrl-0 = <&qspi_default>; + pinctrl-1 = <&qspi_sleep>; + pinctrl-names = "default", "sleep"; + + gd25lb255e: memory@0 { + compatible = "nordic,qspi-nor"; + reg = <0>; + writeoc = "pp4o"; + readoc = "read4io"; + sck-frequency = <8000000>; + quad-enable-requirements = "S2B1v1"; + address-size-32; + enter-4byte-addr = <0xb7>; + jedec-id = [c8 60 19]; + sfdp-bfp = [ + e5 20 f3 ff ff ff ff 0f 44 eb 08 6b 08 3b 42 bb + fe ff ff ff ff ff 00 ff ff ff 42 eb 0c 20 0f 52 + 10 d8 00 ff d4 31 a5 fe 84 df 14 4f ec 62 16 33 + 7a 75 7a 75 04 b3 d5 5c 19 06 14 00 08 50 00 01 + ]; + size = ; + has-dpd; + t-enter-dpd = <3000>; + t-exit-dpd = <20000>; + }; +}; + +®1 { + regulator-initial-mode = ; +}; + +&spi3 { + compatible = "nordic,nrf-spim"; + status = "okay"; + cs-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>; + pinctrl-0 = <&spi3_default>; + pinctrl-1 = <&spi3_sleep>; + pinctrl-names = "default", "sleep"; + zephyr,pm-device-runtime-auto; + + ls013b7dh05: display@0 { + compatible = "sharp,ls0xx"; + reg = <0x0>; + disp-en-gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>; + extcomin-gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>; + extcomin-frequency = <60>; + spi-max-frequency = ; + height = <168>; + width = <144>; + }; +}; + +&uart0 { + status = "okay"; + current-speed = <115200>; + pinctrl-0 = <&uart0_default>; + pinctrl-1 = <&uart0_sleep>; + pinctrl-names = "default", "sleep"; +}; + +&uicr { + gpio-as-nreset; +}; diff --git a/boards/coredevices/p2d/p2d.yaml b/boards/coredevices/p2d/p2d.yaml new file mode 100644 index 0000000000000..3f530c506e671 --- /dev/null +++ b/boards/coredevices/p2d/p2d.yaml @@ -0,0 +1,21 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +identifier: p2d +name: Pebble-2-Duo +vendor: coredevices +type: mcu +arch: arm +toolchain: + - zephyr +ram: 256 +flash: 1024 +supported: + - ble + - counter + - gpio + - i2c + - i2s + - pwm + - uart + - watchdog diff --git a/boards/coredevices/p2d/p2d_defconfig b/boards/coredevices/p2d/p2d_defconfig new file mode 100644 index 0000000000000..40f4285c6fcbf --- /dev/null +++ b/boards/coredevices/p2d/p2d_defconfig @@ -0,0 +1,11 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_ARM_MPU=y +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_GPIO=y +CONFIG_SERIAL=y + +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y diff --git a/boards/coredevices/p2d/pre_dt_board.cmake b/boards/coredevices/p2d/pre_dt_board.cmake new file mode 100644 index 0000000000000..0767d3248348b --- /dev/null +++ b/boards/coredevices/p2d/pre_dt_board.cmake @@ -0,0 +1,4 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +list(APPEND EXTRA_DTC_FLAGS "-Wno-unique_unit_address_if_enabled") diff --git a/boards/coredevices/pt2/Kconfig.pt2 b/boards/coredevices/pt2/Kconfig.pt2 new file mode 100644 index 0000000000000..2578077f31e08 --- /dev/null +++ b/boards/coredevices/pt2/Kconfig.pt2 @@ -0,0 +1,5 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +config BOARD_PT2 + select SOC_SF32LB52JUD6 diff --git a/boards/coredevices/pt2/board.cmake b/boards/coredevices/pt2/board.cmake new file mode 100644 index 0000000000000..66466b3bf73ec --- /dev/null +++ b/boards/coredevices/pt2/board.cmake @@ -0,0 +1,6 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +board_runner_args(sftool "--chip=SF32LB52") + +include(${ZEPHYR_BASE}/boards/common/sftool.board.cmake) diff --git a/boards/coredevices/pt2/board.yml b/boards/coredevices/pt2/board.yml new file mode 100644 index 0000000000000..bc95a21640e46 --- /dev/null +++ b/boards/coredevices/pt2/board.yml @@ -0,0 +1,9 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +board: + name: pt2 + full_name: Pebble Time 2 + vendor: coredevices + socs: + - name: sf32lb52jud6 diff --git a/boards/coredevices/pt2/doc/img/pt2.webp b/boards/coredevices/pt2/doc/img/pt2.webp new file mode 100644 index 0000000000000..a343dfef0d1cf Binary files /dev/null and b/boards/coredevices/pt2/doc/img/pt2.webp differ diff --git a/boards/coredevices/pt2/doc/index.rst b/boards/coredevices/pt2/doc/index.rst new file mode 100644 index 0000000000000..7ca1558212106 --- /dev/null +++ b/boards/coredevices/pt2/doc/index.rst @@ -0,0 +1,51 @@ +.. zephyr:board:: pt2 + +Overview +******** + +Pebble Time 2 is a smart watch based on the SF32LB52x series chip SoC. + +More information about the watch can be found at the `RePebble website`_. + +Hardware +******** + +Pebble Time 2 provides the following hardware components: + +- SiFli SF32LB52JUD6 +- nPM1300 PMIC for power supply and battery charging +- 256 Mb GD25Q256E QSPI NOR +- Memory-in-Pixel (MiP) 64-color display JDI LPM015M135A +- Capacitive touch display driven by CST816D +- 4 physical buttons +- LSM6DSOW IMU (accelerometer/gyroscope) +- LIS2DW12 low-power accelerometer +- MMC5603NJ magnetometer +- Dual PDM microphone +- Speaker driven by AW8155BFCR amplifier +- LRA driven by AW86225CSR +- GH3026 heart-rate monitor sensor +- Programming connector + +Supported Features +================== + +.. zephyr:board-supported-hw:: + +Programming and Debugging +************************* + +.. zephyr:board-supported-runners:: + +Refer to `sftool website`_ for more information. + +References +********** + +.. target-notes:: + +.. _RePebble website: + https://repebble.com/ + +.. _sftool website: + https://github.com/OpenSiFli/sftool diff --git a/boards/coredevices/pt2/pt2-pinctrl.dtsi b/boards/coredevices/pt2/pt2-pinctrl.dtsi new file mode 100644 index 0000000000000..ecc75626dad03 --- /dev/null +++ b/boards/coredevices/pt2/pt2-pinctrl.dtsi @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2025 Core Devices LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +&pinctrl { + usart1_default: usart1_default { + group1 { + pinmux = ; + }; + + group2 { + pinmux = ; + input-enable; + bias-pull-up; + }; + }; +}; diff --git a/boards/coredevices/pt2/pt2.dts b/boards/coredevices/pt2/pt2.dts new file mode 100644 index 0000000000000..7fc0163788ce1 --- /dev/null +++ b/boards/coredevices/pt2/pt2.dts @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2025 Core Devices LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +/dts-v1/; + +#include +#include +#include +#include +#include + +#include "pt2-pinctrl.dtsi" + +/ { + model = "Core Devices Pebble Time 2"; + compatible = "coredevices,pt2"; + + #address-cells = <1>; + #size-cells = <1>; + + chosen { + zephyr,flash = &gd25q256e; + zephyr,flash-controller = &mpi2; + zephyr,code-partition = &code; + zephyr,console = &usart1; + zephyr,shell-uart = &usart1; + }; + + buttons { + compatible = "gpio-keys"; + + btn_back: button-back { + label = "BACK"; + gpios = <&gpioa_32_44 2 GPIO_ACTIVE_HIGH>; + zephyr,code = ; + }; + + btn_up: button-up { + label = "UP"; + gpios = <&gpioa_32_44 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + zephyr,code = ; + }; + + btn_center: button-center { + label = "CENTER"; + gpios = <&gpioa_32_44 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + zephyr,code = ; + }; + + btn_down: button-down { + label = "DOWN"; + gpios = <&gpioa_32_44 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; + zephyr,code = ; + }; + }; + + aliases { + sw0 = &btn_back; + sw1 = &btn_up; + watchdog0 = &wdt; + }; +}; + +&cpu0 { + clock-frequency = ; +}; + +&dmac { + status = "okay"; +}; + +&gpioa_32_44 { + status = "okay"; +}; + +&hxt48 { + status = "okay"; +}; + +&mpi2 { + compatible = "sifli,sf32lb-mpi-qspi-nor"; + dmas = <&dmac 0 SF32LB52X_DMA_REQ_MPI2 SF32LB_DMA_PL_MEDIUM>; + sifli,lines = <4>; + sifli,psclr = <0>; + status = "okay"; + + gd25q256e: flash@0 { + compatible = "gd,gd25q256e", "jedec,qspi-nor"; + reg = <0x0>; + size = ; + quad-enable-requirements = "S2B1v6"; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + ptable: partition@0 { + label = "ptable"; + reg = <0x0 DT_SIZE_K(64)>; + }; + + code: partition@10000 { + label = "code"; + reg = <0x10000 DT_SIZE_K(32704)>; + }; + }; + }; +}; + +&pinctrl { + status = "okay"; +}; + +&rcc_clk { + status = "okay"; + + sifli,hdiv = <1>; + sifli,pdiv1 = <1>; + sifli,pdiv2 = <6>; + + dll1 { + status = "okay"; + clock-frequency = ; + }; +}; + +&usart1 { + status = "okay"; + current-speed = <1000000>; + pinctrl-0 = <&usart1_default>; + pinctrl-names = "default"; +}; + +&wdt { + status = "okay"; +}; diff --git a/boards/coredevices/pt2/pt2.yaml b/boards/coredevices/pt2/pt2.yaml new file mode 100644 index 0000000000000..48befd61d589f --- /dev/null +++ b/boards/coredevices/pt2/pt2.yaml @@ -0,0 +1,16 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +identifier: pt2 +name: Pebble-Time-2 +vendor: coredevices +type: mcu +arch: arm +ram: 512 +flash: 32704 +toolchain: + - zephyr +supported: + - uart + - gpio + - watchdog diff --git a/boards/coredevices/pt2/pt2_defconfig b/boards/coredevices/pt2/pt2_defconfig new file mode 100644 index 0000000000000..2ce05d9f3c73b --- /dev/null +++ b/boards/coredevices/pt2/pt2_defconfig @@ -0,0 +1,14 @@ +# Copyright (c) 2025 Core Devices LLC +# SPDX-License-Identifier: Apache-2.0 + +CONFIG_ARM_MPU=y +CONFIG_HW_STACK_PROTECTION=y + +CONFIG_SERIAL=y +CONFIG_GPIO=y + +CONFIG_CONSOLE=y +CONFIG_UART_CONSOLE=y + +CONFIG_SF32LB52X_BOOTROM_FLASH_ON_DELAY_MS=100 +CONFIG_SF32LB52X_BOOTROM_FLASH_OFF_DELAY_MS=100 diff --git a/dts/bindings/vendor-prefixes.txt b/dts/bindings/vendor-prefixes.txt index f9b987895f8c0..b0391a42dfa29 100644 --- a/dts/bindings/vendor-prefixes.txt +++ b/dts/bindings/vendor-prefixes.txt @@ -151,6 +151,7 @@ cnxt Conexant Systems, Inc. colorfly Colorful GRP, Shenzhen Xueyushi Technology Ltd. compulab CompuLab Ltd. contextualelectronics Contextual Electronics +coredevices Core Devices LLC coreriver CORERIVER Semiconductor Co.,Ltd. corpro Chengdu Corpro Technology Co., Ltd. cortina Cortina Systems, Inc.