Skip to contentSkip to conversation

ARM: LEGO MINDSTORMS EV3 Bluetooth support

PATCH In review David Lechner 2 participants 8 messages May 31, 2018 – Jun 29, 2018

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

cover ARM: LEGO MINDSTORMS EV3 Bluetooth support

This series adds Bluetooth support to LEGO MINDSTORMS EV3.

The pwm-clock depends on the common clock framework, so this requires the recent davinci common clock series to switch to the common clock framework before it will actually work.

David Lechner (2):
ARM: dts: da850-lego-ev3: Add Bluetooth nodes
ARM: davinci_all_defconfig: Enable Bluetooth

 arch/arm/boot/dts/da850-lego-ev3.dts   | 82 ++++++++++++++++++++++++++
 arch/arm/configs/davinci_all_defconfig |  9 +++
 2 files changed, 91 insertions(+)
Signature · 1 line
2.17.0
#1 lore raw

PATCH 1/2 ARM: dts: da850-lego-ev3: Add Bluetooth nodes

This adds nodes for describing the Bluetooth chip and connections on LEGO MINDSTORMS EV3 to da850-lego-ev3.dts.

---
 arch/arm/boot/dts/da850-lego-ev3.dts | 82 ++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)
arch/arm/boot/dts/da850-lego-ev3.dts +82 -0
index bef42dc78817..fe4cc87394b9 100644
@@ -187,6 +187,15 @@
 		rechargeable-gpios = <&gpio 136 GPIO_ACTIVE_LOW>;
 	};
 
+	bt_slow_clk: bt-clock {
+		pinctrl-names = "default";
+		pinctrl-0 = <&ecap2_pins>, <&bt_clock_bias>;
+		compatible = "pwm-clock";
+		#clock-cells = <0>;
+		clock-frequency = <32768>;
+		pwms = <&ecap2 0 30518 0>;
+	};
+
 	/* ARM local RAM */
 	memory at ffff0000 {
 		compatible = "syscon", "simple-mfd";
@@ -251,6 +260,20 @@
 			bias-disable;
 		};
 	};
+
+	bt_clock_bias: bt-clock-bias-groups {
+		disable {
+			groups = "cp2";
+			bias-disable;
+		};
+	};
+
+	bt_pic_bias: bt-pic-bias-groups {
+		disable {
+			groups = "cp20";
+			bias-disable;
+		};
+	};
 };
 
 /* Input port 1 */
@@ -260,6 +283,22 @@
 	pinctrl-0 = <&serial1_rxtx_pins>;
 };
 
+&serial2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&serial2_rxtx_pins>, <&serial2_rtscts_pins>, <&bt_pic_bias>;
+	status = "okay";
+
+	bluetooth {
+		compatible = "ti,cc2560";
+		clocks = <&bt_slow_clk>;
+		clock-names = "ext_clock";
+		enable-gpios = <&gpio 73 GPIO_ACTIVE_HIGH>;
+		max-speed = <2000000>;
+		nvmem-cells = <&bdaddr>;
+		nvmem-cell-names = "bd-address";
+	};
+};
+
 &rtc0 {
 	status = "okay";
 };
@@ -278,6 +317,12 @@
 		pagesize = <64>;
 		read-only;
 		reg = <0x50>;
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		bdaddr: bdaddr at 3f06 {
+			reg = <0x3f06 0x06>;
+		};
 	};
 };
 
@@ -362,6 +407,10 @@
 	};
 };
 
+&ecap2 {
+	status = "okay";
+};
+
 &ehrpwm0 {
 	status = "okay";
 };
@@ -375,6 +424,39 @@
 		gpios = <6 GPIO_ACTIVE_HIGH>;
 		output-high;
 	};
+
+	/* Don't impede Bluetooth clock signal */
+	bt_clock_en {
+		gpio-hog;
+		gpios = <5 GPIO_ACTIVE_HIGH>;
+		input;
+	};
+
+	/*
+	 * There is a PIC microcontroller for interfacing with an Apple MFi
+	 * chip. This interferes with normal Bluetooth operation, so we need
+	 * to make sure it is turned off. Note: The publicly available
+	 * schematics from LEGO don't show that these pins are connected to
+	 * anything, but they are present in the source code from LEGO.
+	 */
+
+	bt_pic_en {
+		gpio-hog;
+		gpios = <51 GPIO_ACTIVE_HIGH>;
+		output-low;
+	};
+
+	bt_pic_rst {
+		gpio-hog;
+		gpios = <78 GPIO_ACTIVE_HIGH>;
+		output-high;
+	};
+
+	bt_pic_cts {
+		gpio-hog;
+		gpios = <87 GPIO_ACTIVE_HIGH>;
+		input;
+	};
 };
 
 &usb_phy {
Signature · 1 line
2.17.0
#2 lore raw

Re: [PATCH 1/2] ARM: dts: da850-lego-ev3: Add Bluetooth nodes

Quoted 4 lines · David Lechner

This adds nodes for describing the Bluetooth chip and connections on LEGO MINDSTORMS EV3 to da850-lego-ev3.dts.

Applied for v4.19.

Thanks,
Sekhar

#3 lore raw

PATCH 2/2 ARM: davinci_all_defconfig: Enable Bluetooth

In reply to David Lechner

This enables Bluetooth modules in davinic_all_defconfig needed for LEGO MINDSTORMS EV3.

---
 arch/arm/configs/davinci_all_defconfig | 9 +++++++++
 1 file changed, 9 insertions(+)
arch/arm/configs/davinci_all_defconfig +9 -0
index a1b6e106b867..f8448c4703c1 100644
@@ -54,6 +54,13 @@ CONFIG_INET=y
 CONFIG_IP_PNP=y
 CONFIG_IP_PNP_DHCP=y
 CONFIG_NETFILTER=y
+CONFIG_BT=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_BNEP=m
+CONFIG_BT_HIDP=m
+CONFIG_BT_LEDS=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_LL=y
 CONFIG_DEVTMPFS=y
 CONFIG_DEVTMPFS_MOUNT=y
 CONFIG_FW_LOADER=m
@@ -113,6 +120,7 @@ CONFIG_SERIAL_8250_CONSOLE=y
 CONFIG_SERIAL_8250_NR_UARTS=3
 CONFIG_SERIAL_8250_RUNTIME_UARTS=3
 CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIAL_DEV_BUS=y
 # CONFIG_HW_RANDOM is not set
 CONFIG_I2C=y
 CONFIG_I2C_CHARDEV=y
@@ -212,6 +220,7 @@ CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_OMAP=m
 CONFIG_DMADEVICES=y
 CONFIG_TI_EDMA=y
+CONFIG_COMMON_CLK_PWM=m
 CONFIG_REMOTEPROC=m
 CONFIG_DA8XX_REMOTEPROC=m
 CONFIG_MEMORY=y
Signature · 1 line
2.17.0
#4 lore raw

Re: [PATCH 2/2] ARM: davinci_all_defconfig: Enable Bluetooth

Quoted 1 line · David Lechner

This enables Bluetooth modules in davinic_all_defconfig needed for LEGO

davinci_all_defconfig

Quoted 8 lines

MINDSTORMS EV3.

---
 arch/arm/configs/davinci_all_defconfig | 9 +++++++++
 1 file changed, 9 insertions(+)

+CONFIG_SERIAL_DEV_BUS=y

Any reason to build this into the kernel?

Thanks,
Sekhar

#5 lore raw

Re: [PATCH 2/2] ARM: davinci_all_defconfig: Enable Bluetooth

Quoted 7 lines · Sekhar Nori
Quoted 1 line · David Lechner

This enables Bluetooth modules in davinic_all_defconfig needed for LEGO

davinci_all_defconfig

Quoted 2 lines

MINDSTORMS EV3.

Quoted 9 lines
Quoted 6 lines
---
  arch/arm/configs/davinci_all_defconfig | 9 +++++++++
  1 file changed, 9 insertions(+)

+CONFIG_SERIAL_DEV_BUS=y

Any reason to build this into the kernel?

Yes:

config SERIAL_DEV_CTRL_TTYPORT
bool "Serial device TTY port controller"
help
Say Y here if you want to use the Serial device bus with common TTY drivers (e.g. serial drivers).

If unsure, say Y.
depends on TTY
depends on SERIAL_DEV_BUS != m
default y

endif

#6 lore raw

Re: [PATCH 2/2] ARM: davinci_all_defconfig: Enable Bluetooth

Quoted 27 lines · David Lechner
Quoted 7 lines · Sekhar Nori
Quoted 1 line · David Lechner

This enables Bluetooth modules in davinic_all_defconfig needed for LEGO

davinci_all_defconfig

Quoted 2 lines

MINDSTORMS EV3.

Quoted 9 lines
Quoted 6 lines

---
? arch/arm/configs/davinci_all_defconfig | 9 +++++++++ ? 1 file changed, 9 insertions(+)

+CONFIG_SERIAL_DEV_BUS=y

Any reason to build this into the kernel?

Yes:

config SERIAL_DEV_CTRL_TTYPORT
????bool "Serial device TTY port controller"
????help
????? Say Y here if you want to use the Serial device bus with common TTY ????? drivers (e.g. serial drivers).

Quoted 3 lines

????? If unsure, say Y.
????depends on TTY
????depends on SERIAL_DEV_BUS != m

Patch applied to v4.19/defconfig. I added a note about this to commit text in case I wonder again at a later time.

Thanks,
Sekhar

#7 lore raw
In reply to David Lechner

Hi Sekhar,

Quoted 6 lines · David Lechner

This series adds Bluetooth support to LEGO MINDSTORMS EV3.

The pwm-clock depends on the common clock framework, so this requires the recent davinci common clock series to switch to the common clock framework before it will actually work.

Quoted 8 lines

David Lechner (2):
ARM: dts: da850-lego-ev3: Add Bluetooth nodes
ARM: davinci_all_defconfig: Enable Bluetooth

  arch/arm/boot/dts/da850-lego-ev3.dts   | 82 ++++++++++++++++++++++++++
  arch/arm/configs/davinci_all_defconfig |  9 +++
  2 files changed, 91 insertions(+)

After "ARM: dts: da850: Add power-domains to PWM nodes", this is ready to apply.