From 035e7fdb8ba2e4533c809b2dfe0f15ea7116c508 Mon Sep 17 00:00:00 2001
From: jack <0x6A73@pm.me>
Date: Tue, 30 Aug 2022 01:20:05 -0600
Subject: [PATCH] Add boardsource/lulu RP2040 support (#18200)

by waffle87
---
 keyboards/boardsource/lulu/avr/info.json    | 21 ++++++++++++++++++++
 keyboards/boardsource/lulu/avr/rules.mk     |  1 +
 keyboards/boardsource/lulu/config.h         |  2 --
 keyboards/boardsource/lulu/info.json        | 22 +++++++--------------
 keyboards/boardsource/lulu/readme.md        | 13 +++++++++---
 keyboards/boardsource/lulu/rp2040/config.h  | 11 +++++++++++
 keyboards/boardsource/lulu/rp2040/halconf.h |  5 +++++
 keyboards/boardsource/lulu/rp2040/info.json | 17 ++++++++++++++++
 keyboards/boardsource/lulu/rp2040/mcuconf.h |  6 ++++++
 keyboards/boardsource/lulu/rp2040/rules.mk  |  2 ++
 keyboards/boardsource/lulu/rules.mk         |  2 +-
 11 files changed, 81 insertions(+), 21 deletions(-)
 create mode 100644 keyboards/boardsource/lulu/avr/info.json
 create mode 100644 keyboards/boardsource/lulu/avr/rules.mk
 create mode 100644 keyboards/boardsource/lulu/rp2040/config.h
 create mode 100644 keyboards/boardsource/lulu/rp2040/halconf.h
 create mode 100644 keyboards/boardsource/lulu/rp2040/info.json
 create mode 100644 keyboards/boardsource/lulu/rp2040/mcuconf.h
 create mode 100644 keyboards/boardsource/lulu/rp2040/rules.mk

diff --git a/keyboards/boardsource/lulu/avr/info.json b/keyboards/boardsource/lulu/avr/info.json
new file mode 100644
index 0000000000..ad7eefa77f
--- /dev/null
+++ b/keyboards/boardsource/lulu/avr/info.json
@@ -0,0 +1,21 @@
+{
+  "build": {
+    "lto": true
+  },
+  "development_board": "elite_c",
+  "matrix_pins": {
+    "cols": ["F6", "F7", "B1", "B3", "B2", "B6"],
+    "rows": ["C6", "D7", "E6", "B4", "B5"]
+  },
+  "split": {
+    "soft_serial_pin": "D2"
+  },
+  "rgblight": {
+     "pin": "D3"
+  },
+  "encoder": {
+    "rotary": [
+      { "pin_a": "F0", "pin_b": "F1" }
+    ]
+  }
+}
diff --git a/keyboards/boardsource/lulu/avr/rules.mk b/keyboards/boardsource/lulu/avr/rules.mk
new file mode 100644
index 0000000000..6e7633bfe0
--- /dev/null
+++ b/keyboards/boardsource/lulu/avr/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/boardsource/lulu/config.h b/keyboards/boardsource/lulu/config.h
index f96a228429..8e635a24eb 100644
--- a/keyboards/boardsource/lulu/config.h
+++ b/keyboards/boardsource/lulu/config.h
@@ -2,8 +2,6 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
 
 #pragma once
-#include "config_common.h"
-#define RGB_DI_PIN D3
 #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
 #define DRIVER_LED_TOTAL 70
 #define RGB_MATRIX_SPLIT { 35, 35 }
diff --git a/keyboards/boardsource/lulu/info.json b/keyboards/boardsource/lulu/info.json
index 5ee5c59c1a..3418cd6e7a 100644
--- a/keyboards/boardsource/lulu/info.json
+++ b/keyboards/boardsource/lulu/info.json
@@ -2,11 +2,7 @@
   "manufacturer": "Boardsource",
   "keyboard_name": "lulu",
   "maintainer": "waffle87",
-  "bootloader": "atmel-dfu",
   "diode_direction": "COL2ROW",
-  "build": {
-    "lto": true
-  },
   "features": {
     "bootmagic": true,
     "extrakey": true,
@@ -15,11 +11,6 @@
     "rgb_matrix": true,
     "oled": true
   },
-  "matrix_pins": {
-    "cols": ["F6", "F7", "B1", "B3", "B2", "B6"],
-    "rows": ["C6", "D7", "E6", "B4", "B5"]
-  },
-  "processor": "atmega32u4",
   "url": "https://boardsource.xyz/projects/60de24d6847112054777bbdd",
   "usb": {
     "device_version": "1.0.0",
@@ -27,16 +18,17 @@
     "vid": "0x4273"
   },
   "split": {
-    "enabled": true,
-    "soft_serial_pin": "D2"
+    "enabled": true
   },
   "encoder": {
-    "enabled": true,
-    "rotary": [
-      { "pin_a": "F0", "pin_b": "F1" }
-    ]
+    "enabled": true
+  },
+  "matrix_size": {
+     "cols": 6,
+     "rows": 10
   },
   "rgb_matrix": {
+    "driver": "WS2812",
     "layout": [
       { "flags": 2, "x": 86, "y": 55 },
       { "flags": 2, "x": 51, "y": 55 },
diff --git a/keyboards/boardsource/lulu/readme.md b/keyboards/boardsource/lulu/readme.md
index e7c530161b..a1c184eaac 100644
--- a/keyboards/boardsource/lulu/readme.md
+++ b/keyboards/boardsource/lulu/readme.md
@@ -12,13 +12,20 @@ The lulu is what the ergo community has needed for a long time, a high-end aesth
 
 Make example for this keyboard (after setting up your build environment):
 
-    make boardsource/lulu:default
+    make boardsource/lulu/rp2040:default
+    make boardsource/lulu/avr:default
 
 Flashing example for this keyboard:
 
-    make boardsource/lulu:default:flash
+    make boardsource/lulu/rp2040:default:flash
+    make boardsource/lulu/avr:default:flash
 
-Reset keyboard by holding down top left key while you plug in the usb cable. Or by pushing the reset switch on the pcb.
+
+Compile `rp2040` firmware if you purchased PCB in lulu group buy (integrated microcontroller).
+Compile `avr` firmware if your PCB uses a drop-in microcontroller like Pro Micro.
+
+
+Enter bootloader by holding down the upper outer key while you plug in the usb cable, or by pushing the reset switch on the pcb.
 
 
 See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/boardsource/lulu/rp2040/config.h b/keyboards/boardsource/lulu/rp2040/config.h
new file mode 100644
index 0000000000..2e02e03500
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/config.h
@@ -0,0 +1,11 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+#define I2C_DRIVER I2CD2
+#define I2C1_SDA_PIN GP22
+#define I2C1_SCL_PIN GP23
diff --git a/keyboards/boardsource/lulu/rp2040/halconf.h b/keyboards/boardsource/lulu/rp2040/halconf.h
new file mode 100644
index 0000000000..9b8ab5d023
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/halconf.h
@@ -0,0 +1,5 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#define HAL_USE_I2C TRUE
+#include_next <halconf.h>
diff --git a/keyboards/boardsource/lulu/rp2040/info.json b/keyboards/boardsource/lulu/rp2040/info.json
new file mode 100644
index 0000000000..a384241944
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/info.json
@@ -0,0 +1,17 @@
+{
+  "bootloader": "rp2040",
+  "matrix_pins": {
+    "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7"],
+    "rows": ["GP14", "GP15", "GP16", "GP17", "GP18"]
+  },
+  "processor": "RP2040",
+  "rgblight": {
+     "pin": "GP29",
+     "led_count": 70
+  },
+  "encoder": {
+    "rotary": [
+      { "pin_a": "GP8", "pin_b": "GP9" }
+    ]
+  }
+}
diff --git a/keyboards/boardsource/lulu/rp2040/mcuconf.h b/keyboards/boardsource/lulu/rp2040/mcuconf.h
new file mode 100644
index 0000000000..6f05b8bbe8
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/mcuconf.h
@@ -0,0 +1,6 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#include_next <mcuconf.h>
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/boardsource/lulu/rp2040/rules.mk b/keyboards/boardsource/lulu/rp2040/rules.mk
new file mode 100644
index 0000000000..8fb51ec82d
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/rules.mk
@@ -0,0 +1,2 @@
+SERIAL_DRIVER = vendor
+WS2812_DRIVER = vendor
diff --git a/keyboards/boardsource/lulu/rules.mk b/keyboards/boardsource/lulu/rules.mk
index 32afd21635..6e7633bfe0 100644
--- a/keyboards/boardsource/lulu/rules.mk
+++ b/keyboards/boardsource/lulu/rules.mk
@@ -1 +1 @@
-RGB_MATRIX_DRIVER = WS2812
+# This file intentionally left blank