ramips: add support for the HNET C108
authorKristian Evensen <kristian.evensen@gmail.com>
Wed, 6 Sep 2017 09:14:16 +0000 (11:14 +0200)
committerMathias Kresin <dev@kresin.me>
Sat, 9 Sep 2017 07:55:13 +0000 (09:55 +0200)
The HNET C108
(http://www.szhwtech88.com/Product-product-cid-100-id-4374.html) is a
mifi based on MT7602A, which has the following specifications:

* CPU: MT7620A
* 1x 10/100Mbps Ethernet.
* 16 MB Flash.
* 64 MB RAM.
* 1x USB 2.0 port. Only power is connected, this port is meant for
charging other devices.
* 1x mini-PCIe slots.
* 1x SIM slots.
* 1x 2.4Ghz WIFI.
* 1x button.
* 6000 mAh battery.
* 5x controllable LEDs.

Works:
* Wifi.
* Switch.
* mini-PCIe slot. Only tested with a USB device (a modem).
* SIM slot.
* Sysupgrade.
* Button (reset).

Not working (also applies to the factory firmware):
* Wifi LED. It is always switched on, there is no relation to the
up/down state or activity of the wireless interface.

Not tested:
* SD card reader.

Notes:
* The C108 has no dedicated status LED. I therefore set the LAN LED as
status LED.

Installation:
The router comes pre-installed with OpenWRT, including a variant of
Luci. The initial firmware install can be done through this UI,
following normal procedure. I.e., access the UI and update the firmware
using the sysupgrade-image. Remember to select that you do not want to
keep existing settings.

Recovery:
If you brick the device, the C108 supports recovery using TFTP. Keep the
reset button pressed for ~5sec when booting to trigger TFTP. Set the
address of the network interface on your machine to 10.10.10.3/24, and
rename your image file to Kernal.bin.

Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
target/linux/ramips/base-files/etc/board.d/01_leds
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/etc/diag.sh
target/linux/ramips/base-files/lib/ramips.sh
target/linux/ramips/base-files/lib/upgrade/platform.sh
target/linux/ramips/dts/C108.dts [new file with mode: 0644]
target/linux/ramips/image/mt7620.mk

index ff5d156f2c259e6b28ffe882ca30afa7f6ea0b07..83e1a940002ff9ac93043c7130ecbfb8d549ce7b 100755 (executable)
@@ -82,6 +82,10 @@ broadway)
        set_usb_led "$board:red:diskmounted"
        set_wifi_led "$board:red:wps_active"
        ;;
+c108)
+       ucidef_set_led_netdev "lan" "lan" "$board:green:lan" "eth0"
+       ucidef_set_led_netdev "modem" "modem" "$board:green:modem" "wwan0"
+       ;;
 c20i)
        ucidef_set_led_switch "lan" "lan" "$board:blue:lan" "switch0" "0x1e"
        ucidef_set_led_switch "wan" "wan" "$board:blue:wan" "switch0" "0x01"
index df70a8b2ec8ff5f655eec99ae5ae35820b97400c..9284b1812fb5b2251875ff8df54db98743cd8ba6 100755 (executable)
@@ -217,6 +217,7 @@ ramips_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "9@eth0"
                ;;
+       c108|\
        cf-wr800n)
                ucidef_add_switch "switch0" \
                        "4:lan" "6t@eth0"
index 960e189283dc1e5847236dccecab9b13c14e9aed..75171673bb64b9dadfec94660b4936aa7cccebe4 100644 (file)
@@ -103,6 +103,9 @@ get_status_led() {
        wrh-300cr)
                status_led="$board:green:wps"
                ;;
+       c108)
+               status_led="$board:green:lan"
+               ;;
        cf-wr800n|\
        psg1208)
                status_led="$board:white:wps"
index fe66a87c2e3c8ec550ab10ba002c7c675b79efb8..174e29e4346ed4ff91e596feb27ab94c69f55860 100755 (executable)
@@ -85,6 +85,9 @@ ramips_board_detect() {
        *"Broadway")
                name="broadway"
                ;;
+       *"C108")
+               name="c108"
+               ;;
        *"C20i")
                name="c20i"
                ;;
index 3cb1d19a2871f6fd4d8d105bc926b33fdebcb2b5..5cfca52ab1f31ab5efaa5cfbad247be1c0db3d5e 100755 (executable)
@@ -29,6 +29,7 @@ platform_check_image() {
        awm002-evb-8M|\
        bc2|\
        broadway|\
+       c108|\
        carambola|\
        cf-wr800n|\
        cs-qr10|\
diff --git a/target/linux/ramips/dts/C108.dts b/target/linux/ramips/dts/C108.dts
new file mode 100644 (file)
index 0000000..c449a36
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ *  BSD LICENSE
+ *
+ *  Copyright(c) 2017 Kristian Evensen <kristian.evensen@gmail.com>.
+ *  All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions
+ *  are met:
+ *
+ *    * Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *    * Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in
+ *      the documentation and/or other materials provided with the
+ *      distribution.
+ *    * Neither the name of Broadcom Corporation nor the names of its
+ *      contributors may be used to endorse or promote products derived
+ *      from this software without specific prior written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/dts-v1/;
+
+#include "mt7620a.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       compatible = "hnet,c108", "ralink,mt7620a-soc";
+       model = "HNET C108";
+
+       chosen {
+               bootargs = "console=ttyS0,115200";
+       };
+
+       gpio-export {
+               compatible = "gpio-export";
+               #size-cells = <0>;
+
+               power_modem {
+                       gpio-export,name = "power_modem";
+                       gpio-export,output = <1>;
+                       gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       gpio-leds {
+               compatible = "gpio-leds";
+
+               sdcard {
+                       label = "c108:green:sdcard";
+                       gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
+               };
+
+               modem_green {
+                       label = "c108:green:modem";
+                       gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
+               };
+
+               modem_red {
+                       label = "c108:red:modem";
+                       gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
+               };
+
+               lan_red {
+                       label = "c108:red:lan";
+                       gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>;
+               };
+
+               lan_green {
+                       label = "c108:green:lan";
+                       gpios = <&gpio2 4 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       gpio-keys-polled {
+               compatible = "gpio-keys-polled";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               poll-interval = <20>;
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+};
+
+&gpio1 {
+       status = "okay";
+};
+
+&gpio2 {
+       status = "okay";
+};
+
+&spi0 {
+       status = "okay";
+
+       en25q128@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <10000000>;
+
+               partition@0 {
+                       label = "u-boot";
+                       reg = <0x0 0x30000>;
+                       read-only;
+               };
+
+               partition@30000 {
+                       label = "u-boot-env";
+                       reg = <0x30000 0x10000>;
+                       read-only;
+               };
+
+               factory: partition@40000 {
+                       label = "factory";
+                       reg = <0x40000 0x10000>;
+                       read-only;
+               };
+
+               partition@50000 {
+                       label = "firmware";
+                       reg = <0x50000 0xfb0000>;
+               };
+       };
+};
+
+&sdhci {
+       status = "okay";
+};
+
+&ehci {
+       status = "okay";
+};
+
+&ohci {
+       status = "okay";
+};
+
+&ethernet {
+       mtd-mac-address = <&factory 0x28>;
+};
+
+&wmac {
+       ralink,mtd-eeprom = <&factory 0>;
+};
+
+&pinctrl {
+       state_default: pinctrl0 {
+               default {
+                       ralink,group = "i2c", "uartf", "spi refclk", "ephy";
+                       ralink,function = "gpio";
+               };
+       };
+};
+
+&pcie {
+       status = "okay";
+};
index f9a9fdb84cee323023657700434170d41c7175ef..b0eb337a475185270e101299cd0aab26527ce0d9 100644 (file)
@@ -62,6 +62,14 @@ define Device/ArcherMR200
 endef
 TARGET_DEVICES += ArcherMR200
 
+define Device/c108
+  DTS := C108
+  IMAGE_SIZE := 16777216
+  DEVICE_TITLE := HNET C108
+  DEVICE_PACKAGES := kmod-usb2 kmod-usb-ohci kmod-sdhci-mt7620
+endef
+TARGET_DEVICES += c108
+
 define Device/cf-wr800n
   DTS := CF-WR800N
   DEVICE_TITLE := Comfast CF-WR800N