aboutsummaryrefslogtreecommitdiff
path: root/keyboards/matrix
diff options
context:
space:
mode:
authorkb-elmo <lorwel@mailbox.org>2021-06-11 12:35:13 +0200
committerGitHub <noreply@github.com>2021-06-11 20:35:13 +1000
commit0ef145db151f907c33973e3ceab8dc51f7c00b16 (patch)
tree6365619adec626d926f6cd64a1a154ac15adec76 /keyboards/matrix
parent2e90ef05363893f3aa49c99af408e774609aa97a (diff)
downloadqmk_firmware-0ef145db151f907c33973e3ceab8dc51f7c00b16.tar.gz
qmk_firmware-0ef145db151f907c33973e3ceab8dc51f7c00b16.zip
Add Matrix 8XV1.2 OG rev1 PCB (#11614)
* add v1 12og pcb * update * matrix changes for testing * Update matrix.c * finalized files * rename board versions * update readmes * typo in readme * fix board filenames * Update keyboards/matrix/m12og/rev1/rev1.c Co-authored-by: Drashna Jaelre <drashna@live.com> * change function * update halconf and chconf * merge master * Update readme.md * Update readme.md * Update readme.md Co-authored-by: Drashna Jaelre <drashna@live.com>
Diffstat (limited to 'keyboards/matrix')
-rw-r--r--keyboards/matrix/m12og/readme.md18
-rw-r--r--keyboards/matrix/m12og/rev1/boards/m12og_v1/board.c50
-rw-r--r--keyboards/matrix/m12og/rev1/boards/m12og_v1/board.h142
-rw-r--r--keyboards/matrix/m12og/rev1/boards/m12og_v1/board.mk5
-rw-r--r--keyboards/matrix/m12og/rev1/chconf.h40
-rw-r--r--keyboards/matrix/m12og/rev1/config.h54
-rw-r--r--keyboards/matrix/m12og/rev1/halconf.h26
-rw-r--r--keyboards/matrix/m12og/rev1/info.json99
-rw-r--r--keyboards/matrix/m12og/rev1/keymaps/default/keymap.c50
-rw-r--r--keyboards/matrix/m12og/rev1/ld/m12og_v1.ld85
-rw-r--r--keyboards/matrix/m12og/rev1/matrix.c96
-rw-r--r--keyboards/matrix/m12og/rev1/mcuconf.h209
-rw-r--r--keyboards/matrix/m12og/rev1/readme.md26
-rw-r--r--keyboards/matrix/m12og/rev1/rev1.c27
-rw-r--r--keyboards/matrix/m12og/rev1/rev1.h37
-rw-r--r--keyboards/matrix/m12og/rev1/rules.mk26
-rw-r--r--keyboards/matrix/m12og/rev2/config.h (renamed from keyboards/matrix/m12og/config.h)0
-rw-r--r--keyboards/matrix/m12og/rev2/info.json (renamed from keyboards/matrix/m12og/info.json)2
-rw-r--r--keyboards/matrix/m12og/rev2/keymaps/default/keymap.c (renamed from keyboards/matrix/m12og/keymaps/default/keymap.c)0
-rw-r--r--keyboards/matrix/m12og/rev2/keymaps/iso/keymap.c (renamed from keyboards/matrix/m12og/keymaps/iso/keymap.c)0
-rw-r--r--keyboards/matrix/m12og/rev2/keymaps/via/keymap.c (renamed from keyboards/matrix/m12og/keymaps/via/keymap.c)0
-rw-r--r--keyboards/matrix/m12og/rev2/keymaps/via/rules.mk (renamed from keyboards/matrix/m12og/keymaps/via/rules.mk)0
-rw-r--r--keyboards/matrix/m12og/rev2/readme.md16
-rw-r--r--keyboards/matrix/m12og/rev2/rev2.c (renamed from keyboards/matrix/m12og/m12og.c)4
-rw-r--r--keyboards/matrix/m12og/rev2/rev2.h (renamed from keyboards/matrix/m12og/m12og.h)20
-rw-r--r--keyboards/matrix/m12og/rev2/rules.mk (renamed from keyboards/matrix/m12og/rules.mk)0
26 files changed, 1008 insertions, 24 deletions
diff --git a/keyboards/matrix/m12og/readme.md b/keyboards/matrix/m12og/readme.md
index 24fcbb5d8..c0562cec6 100644
--- a/keyboards/matrix/m12og/readme.md
+++ b/keyboards/matrix/m12og/readme.md
@@ -1,16 +1,12 @@
1# Matrix 8XV1.2 OG keyboard 1# Matrix 8XV1.2 OG keyboard
2 2
3![Matrix 8XV1.2 OG](https://raw.githubusercontent.com/yulei/qmk_webusb_tool/master/public/m12og.jpg) 3![Matrix 8XV1.2 OG](https://i.imgur.com/NELL6Sbl.jpg)
4 4
5This was the Matrix 8XV1.2 OG keyboard made by the Matrix team. Note: this firmware only support ISO/ANSI version, 5This was the Matrix 8XV1.2 OG keyboard made by the Matrix team.
6and DO NOT support the 8XV1.2 OG ANSI only version.
7 6
8* Keyboard Maintainer: [astro](https://github.com/yulei) 7There are two versions of the PCB available.
9* Hardware Supported: Matrix 8XV1.2 OG (ISO/ANSI) keyboard
10* Hardware Availability: Matrix Lab
11 8
12Make example for this keyboard (after setting up your build environment): 9|Version|Features |
13 10|-------|-----------------------------------------------------|
14 make matrix/m12og:default 11|rev1 |Green/Yellow PCB / ARM STM32 controller / ANSI only |
15 12|rev2 |White PCB / Atmel AVR controller / ANSI/ISO |
16See 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/matrix/m12og/rev1/boards/m12og_v1/board.c b/keyboards/matrix/m12og/rev1/boards/m12og_v1/board.c
new file mode 100644
index 000000000..b1fc61c55
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/boards/m12og_v1/board.c
@@ -0,0 +1,50 @@
1/*
2 ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17#include <hal.h>
18
19/**
20 * @brief PAL setup.
21 * @details Digital I/O ports static configuration as defined in @p board.h.
22 * This variable is used by the HAL when initializing the PAL driver.
23 */
24#if HAL_USE_PAL || defined(__DOXYGEN__)
25const PALConfig pal_default_config =
26{
27 {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
28 {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
29 {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
30 {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
31 {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
32};
33#endif
34
35/*
36 * Early initialization code.
37 * This initialization must be performed just after stack setup and before
38 * any other initialization.
39 */
40void __early_init(void) {
41 stm32_clock_init();
42
43}
44
45/*
46 * Board-specific initialization code.
47 */
48void boardInit(void) {
49
50}
diff --git a/keyboards/matrix/m12og/rev1/boards/m12og_v1/board.h b/keyboards/matrix/m12og/rev1/boards/m12og_v1/board.h
new file mode 100644
index 000000000..685deb416
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/boards/m12og_v1/board.h
@@ -0,0 +1,142 @@
1/*
2 ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17#ifndef _BOARD_H_
18#define _BOARD_H_
19
20/*
21 * Board identifier.
22 */
23#define BOARD_M12OG
24#define BOARD_NAME "Matrix 12og keyboard"
25
26/*
27 * Board frequencies.
28 */
29#define STM32_LSECLK 32768
30#define STM32_HSECLK 8000000
31
32/*
33 * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
34 *
35 * Only xB (128KB Flash) is defined, but it's identical to the
36 * x8 version (64KB Flash) except for the Flash region size in the
37 * linker script. For x8 parts use xB here and change to the x8 linker
38 * script in the project Makefile.
39 */
40#define STM32F103xB
41
42/*
43 * IO pins assignments
44 *
45 * numbering is sorted by onboard/connectors, as from the schematics in
46 * http://www.vcc-gnd.com/read.php?tid=369
47 */
48
49/* on-board */
50#define GPIOA_USBDM 11 // pin 8
51#define GPIOA_USBDP 12 // pin 9
52
53#define GPIOC_OSC32_IN 14
54#define GPIOC_OSC32_OUT 15
55
56/*
57 * I/O ports initial setup, this configuration is established soon after reset
58 * in the initialization code.
59 *
60 * The digits have the following meaning:
61 * 0 - Analog input.
62 * 1 - Push Pull output 10MHz.
63 * 2 - Push Pull output 2MHz.
64 * 3 - Push Pull output 50MHz.
65 * 4 - Digital input.
66 * 5 - Open Drain output 10MHz.
67 * 6 - Open Drain output 2MHz.
68 * 7 - Open Drain output 50MHz.
69 * 8 - Digital input with PullUp or PullDown resistor depending on ODR.
70 * 9 - Alternate Push Pull output 10MHz.
71 * A - Alternate Push Pull output 2MHz.
72 * B - Alternate Push Pull output 50MHz.
73 * C - Reserved.
74 * D - Alternate Open Drain output 10MHz.
75 * E - Alternate Open Drain output 2MHz.
76 * F - Alternate Open Drain output 50MHz.
77 * Please refer to the STM32 Reference Manual for details.
78 */
79
80/*
81 * Port A setup.
82 * Everything input with pull-up except:
83 */
84#define VAL_GPIOACRL 0x88888888 /* PA7...PA0 */
85#define VAL_GPIOACRH 0x88888888 /* PA15...PA8 */
86#define VAL_GPIOAODR 0xFFFFFFFF
87
88/*
89 * Port B setup.
90 * Everything input with pull-up except:
91 */
92#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
93#define VAL_GPIOBCRH 0x88888888 /* PB15...PB8 */
94#define VAL_GPIOBODR 0xFFFFFFFF
95
96/*
97 * Port C setup.
98 * Everything input with pull-up except:
99 */
100#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
101#define VAL_GPIOCCRH 0x88888888 /* PC15...PC8 */
102#define VAL_GPIOCODR 0xFFFFFFFF
103
104/*
105 * Port D setup.
106 * Everything input with pull-up except:
107 * PD0 - Normal input (XTAL).
108 * PD1 - Normal input (XTAL).
109 */
110#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
111#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
112#define VAL_GPIODODR 0xFFFFFFFF
113
114/*
115 * Port E setup.
116 * Everything input with pull-up except:
117 */
118#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
119#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
120#define VAL_GPIOEODR 0xFFFFFFFF
121
122/*
123 * USB bus activation macro, required by the USB driver.
124 */
125#define usb_lld_connect_bus(usbp) /* always connected */
126
127/*
128 * USB bus de-activation macro, required by the USB driver.
129 */
130#define usb_lld_disconnect_bus(usbp) /* always connected */
131
132#if !defined(_FROM_ASM_)
133#ifdef __cplusplus
134extern "C" {
135#endif
136 void boardInit(void);
137#ifdef __cplusplus
138}
139#endif
140#endif /* _FROM_ASM_ */
141
142#endif /* _BOARD_H_ */
diff --git a/keyboards/matrix/m12og/rev1/boards/m12og_v1/board.mk b/keyboards/matrix/m12og/rev1/boards/m12og_v1/board.mk
new file mode 100644
index 000000000..48f620db1
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/boards/m12og_v1/board.mk
@@ -0,0 +1,5 @@
1# List of all the board related files.
2BOARDSRC = $(BOARD_PATH)/boards/m12og_v1/board.c
3
4# Required include directories
5BOARDINC = $(BOARD_PATH)/boards/m12og_v1
diff --git a/keyboards/matrix/m12og/rev1/chconf.h b/keyboards/matrix/m12og/rev1/chconf.h
new file mode 100644
index 000000000..5109645a3
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/chconf.h
@@ -0,0 +1,40 @@
1/* Copyright 2020 QMK
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17/*
18 * This file was auto-generated by:
19 * `qmk chibios-confmigrate -i keyboards/matrix/m12og/rev1/chconf.h -r platforms/chibios/common/configs/chconf.h`
20 */
21
22#pragma once
23
24#define CH_CFG_ST_TIMEDELTA 0
25
26#define CH_CFG_USE_REGISTRY TRUE
27
28#define CH_CFG_USE_WAITEXIT TRUE
29
30#define CH_CFG_USE_CONDVARS TRUE
31
32#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
33
34#define CH_CFG_USE_MESSAGES TRUE
35
36#define CH_CFG_USE_MAILBOXES TRUE
37
38#define CH_CFG_USE_HEAP TRUE
39
40#include_next <chconf.h>
diff --git a/keyboards/matrix/m12og/rev1/config.h b/keyboards/matrix/m12og/rev1/config.h
new file mode 100644
index 000000000..204ece161
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/config.h
@@ -0,0 +1,54 @@
1/*
2Copyright 2021 kb-elmo<mail@elmo.space>
3
4This program is free software: you can redistribute it and/or modify
5it under the terms of the GNU General Public License as published by
6the Free Software Foundation, either version 2 of the License, or
7(at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12GNU General Public License for more details.
13
14You should have received a copy of the GNU General Public License
15along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#pragma once
19
20#include "config_common.h"
21
22/* USB Device descriptor parameter */
23#define VENDOR_ID 0x4D58
24#define PRODUCT_ID 0x0369
25#define DEVICE_VER 0x0001
26#define MANUFACTURER matrix
27#define PRODUCT m12og_v1
28
29/* key matrix size */
30#define MATRIX_ROWS 6
31#define MATRIX_COLS 16
32
33/* Keyboard Matrix Assignments */
34
35#define MATRIX_ROW_PINS { A0, A1, A2, A3, A4, A5 }
36#define MATRIX_COL_PINS { C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12, C13, C14, C15 }
37
38/* COL2ROW, ROW2COL */
39#define DIODE_DIRECTION COL2ROW
40
41/* Status LEDs */
42#define LED_CAPS_LOCK_PIN B6
43#define LED_SCROLL_LOCK_PIN B5
44
45/* RGB */
46#define RGB_DI_PIN B8
47#define RGBLIGHT_ANIMATIONS
48
49#define RGBLED_NUM 16
50#define RGBLIGHT_SLEEP
51#define WS2812_BYTE_ORDER WS2812_BYTE_ORDER_RGB
52
53/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
54#define DEBOUNCE 5
diff --git a/keyboards/matrix/m12og/rev1/halconf.h b/keyboards/matrix/m12og/rev1/halconf.h
new file mode 100644
index 000000000..20ce9bc3c
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/halconf.h
@@ -0,0 +1,26 @@
1/* Copyright 2020 QMK
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17/*
18 * This file was auto-generated by:
19 * `qmk chibios-confmigrate -i keyboards/matrix/m12og/rev1/halconf.h -r platforms/chibios/common/configs/halconf.h`
20 */
21
22#pragma once
23
24#define HAL_USE_PWM TRUE
25
26#include_next <halconf.h>
diff --git a/keyboards/matrix/m12og/rev1/info.json b/keyboards/matrix/m12og/rev1/info.json
new file mode 100644
index 000000000..4bf8ed9d3
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/info.json
@@ -0,0 +1,99 @@
1{
2 "keyboard_name": "Matrix 8XV1.2 OG rev1",
3 "url": "",
4 "maintainer": "kb-elmo",
5 "width": 18.25,
6 "height": 6.5,
7 "layouts": {
8 "LAYOUT_all": {
9 "layout": [
10 {"label":"Esc", "x":0, "y":0},
11 {"label":"F1", "x":2, "y":0},
12 {"label":"F2", "x":3, "y":0},
13 {"label":"F3", "x":4, "y":0},
14 {"label":"F4", "x":5, "y":0},
15 {"label":"F5", "x":6.5, "y":0},
16 {"label":"F6", "x":7.5, "y":0},
17 {"label":"F7", "x":8.5, "y":0},
18 {"label":"F8", "x":9.5, "y":0},
19 {"label":"F9", "x":11, "y":0},
20 {"label":"F10", "x":12, "y":0},
21 {"label":"F11", "x":13, "y":0},
22 {"label":"F12", "x":14, "y":0},
23 {"label":"PrtSc", "x":15.25, "y":0},
24 {"label":"Scroll Lock", "x":16.25, "y":0},
25 {"label":"Pause", "x":17.25, "y":0},
26 {"label":"~", "x":0, "y":1.5},
27 {"label":"!", "x":1, "y":1.5},
28 {"label":"@", "x":2, "y":1.5},
29 {"label":"#", "x":3, "y":1.5},
30 {"label":"$", "x":4, "y":1.5},
31 {"label":"%", "x":5, "y":1.5},
32 {"label":"^", "x":6, "y":1.5},
33 {"label":"&", "x":7, "y":1.5},
34 {"label":"*", "x":8, "y":1.5},
35 {"label":"(", "x":9, "y":1.5},
36 {"label":")", "x":10, "y":1.5},
37 {"label":"_", "x":11, "y":1.5},
38 {"label":"+", "x":12, "y":1.5},
39 {"label":"Backspace", "x":13, "y":1.5, "w":2},
40 {"label":"Insert", "x":15.25, "y":1.5},
41 {"label":"Home", "x":16.25, "y":1.5},
42 {"label":"PgUp", "x":17.25, "y":1.5},
43 {"label":"Tab", "x":0, "y":2.5, "w":1.5},
44 {"label":"Q", "x":1.5, "y":2.5},
45 {"label":"W", "x":2.5, "y":2.5},
46 {"label":"E", "x":3.5, "y":2.5},
47 {"label":"R", "x":4.5, "y":2.5},
48 {"label":"T", "x":5.5, "y":2.5},
49 {"label":"Y", "x":6.5, "y":2.5},
50 {"label":"U", "x":7.5, "y":2.5},
51 {"label":"I", "x":8.5, "y":2.5},
52 {"label":"O", "x":9.5, "y":2.5},
53 {"label":"P", "x":10.5, "y":2.5},
54 {"label":"{", "x":11.5, "y":2.5},
55 {"label":"}", "x":12.5, "y":2.5},
56 {"label":"|", "x":13.5, "y":2.5, "w":1.5},
57 {"label":"Delete", "x":15.25, "y":2.5},
58 {"label":"End", "x":16.25, "y":2.5},
59 {"label":"PgDn", "x":17.25, "y":2.5},
60 {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
61 {"label":"A", "x":1.75, "y":3.5},
62 {"label":"S", "x":2.75, "y":3.5},
63 {"label":"D", "x":3.75, "y":3.5},
64 {"label":"F", "x":4.75, "y":3.5},
65 {"label":"G", "x":5.75, "y":3.5},
66 {"label":"H", "x":6.75, "y":3.5},
67 {"label":"J", "x":7.75, "y":3.5},
68 {"label":"K", "x":8.75, "y":3.5},
69 {"label":"L", "x":9.75, "y":3.5},
70 {"label":":", "x":10.75, "y":3.5},
71 {"label":"\"", "x":11.75, "y":3.5},
72 {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
73 {"label":"Shift", "x":0, "y":4.5, "w":2.25},
74 {"label":"Z", "x":2.25, "y":4.5},
75 {"label":"X", "x":3.25, "y":4.5},
76 {"label":"C", "x":4.25, "y":4.5},
77 {"label":"V", "x":5.25, "y":4.5},
78 {"label":"B", "x":6.25, "y":4.5},
79 {"label":"N", "x":7.25, "y":4.5},
80 {"label":"M", "x":8.25, "y":4.5},
81 {"label":"<", "x":9.25, "y":4.5},
82 {"label":">", "x":10.25, "y":4.5},
83 {"label":"?", "x":11.25, "y":4.5},
84 {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
85 {"label":"\u2191", "x":16.25, "y":4.5},
86 {"label":"Ctrl", "x":0, "y":5.5, "w":1.5},
87 {"label":"Win", "x":1.5, "y":5.5},
88 {"label":"Alt", "x":2.5, "y":5.5, "w":1.5},
89 {"x":4, "y":5.5, "w":7},
90 {"label":"Win", "x":11, "y":5.5, "w":1.5},
91 {"label":"Menu", "x":12.5, "y":5.5},
92 {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5},
93 {"label":"\u2190", "x":15.25, "y":5.5},
94 {"label":"\u2193", "x":16.25, "y":5.5},
95 {"label":"\u2192", "x":17.25, "y":5.5}
96 ]
97 }
98 }
99}
diff --git a/keyboards/matrix/m12og/rev1/keymaps/default/keymap.c b/keyboards/matrix/m12og/rev1/keymaps/default/keymap.c
new file mode 100644
index 000000000..311725c15
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/keymaps/default/keymap.c
@@ -0,0 +1,50 @@
1/* Copyright 2021 kb-elmo<mail@elmo.space>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16#include QMK_KEYBOARD_H
17
18const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
19 [0] = LAYOUT_all(
20 KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
21 KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
22 KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
23 KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
24 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
25 KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT
26 ),
27 [1] = LAYOUT_all(
28 KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD, KC_TRNS, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS,
29 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
30 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
31 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
32 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS, KC_TRNS,
33 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
34 )
35};
36
37bool led_update_user(led_t led_state) {
38 static uint8_t caps_state = 0;
39 if (caps_state != led_state.caps_lock) {
40 if (led_state.caps_lock) {
41 rgblight_sethsv_noeeprom_cyan();
42 rgblight_mode_noeeprom(1);
43 } else {
44 rgblight_sethsv_noeeprom(5, 255, 255);
45 rgblight_mode_noeeprom(37);
46 }
47 caps_state = led_state.caps_lock;
48 }
49 return true;
50};
diff --git a/keyboards/matrix/m12og/rev1/ld/m12og_v1.ld b/keyboards/matrix/m12og/rev1/ld/m12og_v1.ld
new file mode 100644
index 000000000..ad04d6d17
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/ld/m12og_v1.ld
@@ -0,0 +1,85 @@
1/*
2 ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17/*
18 * STM32F103xB memory setup for use with the matrix 12og mass-storage device bootloader.
19 */
20MEMORY
21{
22 flash0 : org = 0x08018000, len = 128k - 0x18000
23 flash1 : org = 0x00000000, len = 0
24 flash2 : org = 0x00000000, len = 0
25 flash3 : org = 0x00000000, len = 0
26 flash4 : org = 0x00000000, len = 0
27 flash5 : org = 0x00000000, len = 0
28 flash6 : org = 0x00000000, len = 0
29 flash7 : org = 0x00000000, len = 0
30 ram0 : org = 0x20000000, len = 20k
31 ram1 : org = 0x00000000, len = 0
32 ram2 : org = 0x00000000, len = 0
33 ram3 : org = 0x00000000, len = 0
34 ram4 : org = 0x00000000, len = 0
35 ram5 : org = 0x00000000, len = 0
36 ram6 : org = 0x00000000, len = 0
37 ram7 : org = 0x00000000, len = 0
38}
39
40/* For each data/text section two region are defined, a virtual region
41 and a load region (_LMA suffix).*/
42
43/* Flash region to be used for exception vectors.*/
44REGION_ALIAS("VECTORS_FLASH", flash0);
45REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
46
47/* Flash region to be used for constructors and destructors.*/
48REGION_ALIAS("XTORS_FLASH", flash0);
49REGION_ALIAS("XTORS_FLASH_LMA", flash0);
50
51/* Flash region to be used for code text.*/
52REGION_ALIAS("TEXT_FLASH", flash0);
53REGION_ALIAS("TEXT_FLASH_LMA", flash0);
54
55/* Flash region to be used for read only data.*/
56REGION_ALIAS("RODATA_FLASH", flash0);
57REGION_ALIAS("RODATA_FLASH_LMA", flash0);
58
59/* Flash region to be used for various.*/
60REGION_ALIAS("VARIOUS_FLASH", flash0);
61REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
62
63/* Flash region to be used for RAM(n) initialization data.*/
64REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
65
66/* RAM region to be used for Main stack. This stack accommodates the processing
67 of all exceptions and interrupts.*/
68REGION_ALIAS("MAIN_STACK_RAM", ram0);
69
70/* RAM region to be used for the process stack. This is the stack used by
71 the main() function.*/
72REGION_ALIAS("PROCESS_STACK_RAM", ram0);
73
74/* RAM region to be used for data segment.*/
75REGION_ALIAS("DATA_RAM", ram0);
76REGION_ALIAS("DATA_RAM_LMA", flash0);
77
78/* RAM region to be used for BSS segment.*/
79REGION_ALIAS("BSS_RAM", ram0);
80
81/* RAM region to be used for the default heap.*/
82REGION_ALIAS("HEAP_RAM", ram0);
83
84/* Generic rules inclusion.*/
85INCLUDE rules.ld
diff --git a/keyboards/matrix/m12og/rev1/matrix.c b/keyboards/matrix/m12og/rev1/matrix.c
new file mode 100644
index 000000000..9c36153da
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/matrix.c
@@ -0,0 +1,96 @@
1/* Copyright 2021 xyzz
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include <stdint.h>
18#include <stdbool.h>
19#include "util.h"
20#include "matrix.h"
21#include "debounce.h"
22#include "quantum.h"
23
24static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
25static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
26
27static void select_col(uint8_t col) {
28 setPinOutput(col_pins[col]);
29 writePinHigh(col_pins[col]);
30}
31
32static void unselect_col(uint8_t col) { setPinInputLow(col_pins[col]); }
33
34static void unselect_cols(void) {
35 for (uint8_t x = 0; x < MATRIX_COLS; x++) {
36 setPinInputLow(col_pins[x]);
37 }
38}
39
40static void init_pins(void) {
41 unselect_cols();
42 for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
43 setPinInputLow(row_pins[x]);
44 }
45}
46
47static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
48 bool matrix_changed = false;
49
50 // Select col and wait for col selecton to stabilize
51 select_col(current_col);
52 matrix_io_delay();
53
54 // For each row...
55 for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) {
56 // Store last value of row prior to reading
57 matrix_row_t last_row_value = current_matrix[row_index];
58 matrix_row_t current_row_value = last_row_value;
59
60 // Check row pin state
61 if (readPin(row_pins[row_index]) != 0) {
62 // Pin LO, set col bit
63 current_row_value |= (MATRIX_ROW_SHIFTER << current_col);
64 } else {
65 // Pin HI, clear col bit
66 current_row_value &= ~(MATRIX_ROW_SHIFTER << current_col);
67 }
68
69 // Determine if the matrix changed state
70 if ((last_row_value != current_row_value)) {
71 matrix_changed |= true;
72 current_matrix[row_index] = current_row_value;
73 }
74 }
75
76 // Unselect col
77 unselect_col(current_col);
78
79 return matrix_changed;
80}
81
82void matrix_init_custom(void) {
83 // initialize key pins
84 init_pins();
85}
86
87uint8_t matrix_scan_custom(matrix_row_t current_matrix[]) {
88 bool changed = false;
89
90 // Set col, read rows
91 for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
92 changed |= read_rows_on_col(current_matrix, current_col);
93 }
94
95 return (uint8_t)changed;
96}
diff --git a/keyboards/matrix/m12og/rev1/mcuconf.h b/keyboards/matrix/m12og/rev1/mcuconf.h
new file mode 100644
index 000000000..a645d3c5d
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/mcuconf.h
@@ -0,0 +1,209 @@
1/*
2 ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17#ifndef _MCUCONF_H_
18#define _MCUCONF_H_
19
20#define STM32F103_MCUCONF
21
22/*
23 * STM32F103 drivers configuration.
24 * The following settings override the default settings present in
25 * the various device driver implementation headers.
26 * Note that the settings for each driver only have effect if the whole
27 * driver is enabled in halconf.h.
28 *
29 * IRQ priorities:
30 * 15...0 Lowest...Highest.
31 *
32 * DMA priorities:
33 * 0...3 Lowest...Highest.
34 */
35
36/*
37 * HAL driver system settings.
38 */
39#define STM32_NO_INIT FALSE
40#define STM32_HSI_ENABLED TRUE
41#define STM32_LSI_ENABLED FALSE
42#define STM32_HSE_ENABLED TRUE
43#define STM32_LSE_ENABLED FALSE
44#define STM32_SW STM32_SW_PLL
45#define STM32_PLLSRC STM32_PLLSRC_HSE
46#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
47#define STM32_PLLMUL_VALUE 9
48#define STM32_HPRE STM32_HPRE_DIV1
49#define STM32_PPRE1 STM32_PPRE1_DIV2
50#define STM32_PPRE2 STM32_PPRE2_DIV2
51#define STM32_ADCPRE STM32_ADCPRE_DIV4
52#define STM32_USB_CLOCK_REQUIRED TRUE
53#define STM32_USBPRE STM32_USBPRE_DIV1P5
54#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
55#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
56#define STM32_PVD_ENABLE FALSE
57#define STM32_PLS STM32_PLS_LEV0
58
59/*
60 * ADC driver system settings.
61 */
62#define STM32_ADC_USE_ADC1 FALSE
63#define STM32_ADC_ADC1_DMA_PRIORITY 2
64#define STM32_ADC_ADC1_IRQ_PRIORITY 6
65
66/*
67 * CAN driver system settings.
68 */
69#define STM32_CAN_USE_CAN1 FALSE
70#define STM32_CAN_CAN1_IRQ_PRIORITY 11
71
72/*
73 * EXT driver system settings.
74 */
75#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
76#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
77#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
78#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
79#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
80#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
81#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
82#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
83#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
84#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
85#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
86
87/*
88 * GPT driver system settings.
89 */
90#define STM32_GPT_USE_TIM1 FALSE
91#define STM32_GPT_USE_TIM2 FALSE
92#define STM32_GPT_USE_TIM3 FALSE
93#define STM32_GPT_USE_TIM4 FALSE
94#define STM32_GPT_USE_TIM5 FALSE
95#define STM32_GPT_USE_TIM8 FALSE
96#define STM32_GPT_TIM1_IRQ_PRIORITY 7
97#define STM32_GPT_TIM2_IRQ_PRIORITY 7
98#define STM32_GPT_TIM3_IRQ_PRIORITY 7
99#define STM32_GPT_TIM4_IRQ_PRIORITY 7
100#define STM32_GPT_TIM5_IRQ_PRIORITY 7
101#define STM32_GPT_TIM8_IRQ_PRIORITY 7
102
103/*
104 * I2C driver system settings.
105 */
106#define STM32_I2C_USE_I2C1 FALSE
107#define STM32_I2C_USE_I2C2 FALSE
108#define STM32_I2C_BUSY_TIMEOUT 50
109#define STM32_I2C_I2C1_IRQ_PRIORITY 5
110#define STM32_I2C_I2C2_IRQ_PRIORITY 5
111#define STM32_I2C_I2C1_DMA_PRIORITY 3
112#define STM32_I2C_I2C2_DMA_PRIORITY 3
113#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
114
115/*
116 * ICU driver system settings.
117 */
118#define STM32_ICU_USE_TIM1 FALSE
119#define STM32_ICU_USE_TIM2 FALSE
120#define STM32_ICU_USE_TIM3 FALSE
121#define STM32_ICU_USE_TIM4 FALSE
122#define STM32_ICU_USE_TIM5 FALSE
123#define STM32_ICU_USE_TIM8 FALSE
124#define STM32_ICU_TIM1_IRQ_PRIORITY 7
125#define STM32_ICU_TIM2_IRQ_PRIORITY 7
126#define STM32_ICU_TIM3_IRQ_PRIORITY 7
127#define STM32_ICU_TIM4_IRQ_PRIORITY 7
128#define STM32_ICU_TIM5_IRQ_PRIORITY 7
129#define STM32_ICU_TIM8_IRQ_PRIORITY 7
130
131/*
132 * PWM driver system settings.
133 */
134#define STM32_PWM_USE_ADVANCED FALSE
135#define STM32_PWM_USE_TIM1 FALSE
136#define STM32_PWM_USE_TIM2 TRUE
137#define STM32_PWM_USE_TIM3 FALSE
138#define STM32_PWM_USE_TIM4 FALSE
139#define STM32_PWM_USE_TIM5 FALSE
140#define STM32_PWM_USE_TIM8 FALSE
141#define STM32_PWM_TIM1_IRQ_PRIORITY 7
142#define STM32_PWM_TIM2_IRQ_PRIORITY 7
143#define STM32_PWM_TIM3_IRQ_PRIORITY 7
144#define STM32_PWM_TIM4_IRQ_PRIORITY 7
145#define STM32_PWM_TIM5_IRQ_PRIORITY 7
146#define STM32_PWM_TIM8_IRQ_PRIORITY 7
147
148/*
149 * RTC driver system settings.
150 */
151#define STM32_RTC_IRQ_PRIORITY 15
152
153/*
154 * SERIAL driver system settings.
155 */
156#define STM32_SERIAL_USE_USART1 FALSE
157#define STM32_SERIAL_USE_USART2 FALSE
158#define STM32_SERIAL_USE_USART3 FALSE
159#define STM32_SERIAL_USE_UART4 FALSE
160#define STM32_SERIAL_USE_UART5 FALSE
161#define STM32_SERIAL_USART1_PRIORITY 12
162#define STM32_SERIAL_USART2_PRIORITY 12
163#define STM32_SERIAL_USART3_PRIORITY 12
164#define STM32_SERIAL_UART4_PRIORITY 12
165#define STM32_SERIAL_UART5_PRIORITY 12
166
167/*
168 * SPI driver system settings.
169 */
170#define STM32_SPI_USE_SPI1 FALSE
171#define STM32_SPI_USE_SPI2 FALSE
172#define STM32_SPI_USE_SPI3 FALSE
173#define STM32_SPI_SPI1_DMA_PRIORITY 1
174#define STM32_SPI_SPI2_DMA_PRIORITY 1
175#define STM32_SPI_SPI3_DMA_PRIORITY 1
176#define STM32_SPI_SPI1_IRQ_PRIORITY 10
177#define STM32_SPI_SPI2_IRQ_PRIORITY 10
178#define STM32_SPI_SPI3_IRQ_PRIORITY 10
179#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
180
181/*
182 * ST driver system settings.
183 */
184#define STM32_ST_IRQ_PRIORITY 8
185#define STM32_ST_USE_TIMER 2
186
187/*
188 * UART driver system settings.
189 */
190#define STM32_UART_USE_USART1 FALSE
191#define STM32_UART_USE_USART2 FALSE
192#define STM32_UART_USE_USART3 FALSE
193#define STM32_UART_USART1_IRQ_PRIORITY 12
194#define STM32_UART_USART2_IRQ_PRIORITY 12
195#define STM32_UART_USART3_IRQ_PRIORITY 12
196#define STM32_UART_USART1_DMA_PRIORITY 0
197#define STM32_UART_USART2_DMA_PRIORITY 0
198#define STM32_UART_USART3_DMA_PRIORITY 0
199#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
200
201/*
202 * USB driver system settings.
203 */
204#define STM32_USB_USE_USB1 TRUE
205#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
206#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
207#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
208
209#endif /* _MCUCONF_H_ */
diff --git a/keyboards/matrix/m12og/rev1/readme.md b/keyboards/matrix/m12og/rev1/readme.md
new file mode 100644
index 000000000..e860be157
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/readme.md
@@ -0,0 +1,26 @@
1# Matrix 8XV1.2 OG keyboard
2
3![Matrix 8XV1.2 OG](https://i.imgur.com/NELL6Sbl.jpg)
4
5This was the Matrix 8XV1.2 OG keyboard made by the Matrix team.
6Note: This firmware only supports ANSI only version (green/yellow PCB), and DOES NOT support the 8XV1.2 OG ISO/ANSI version.
7
8* Keyboard Maintainer: [kb-elmo](https://github.com/kb-elmo)
9* Hardware Supported: Matrix 8XV1.2 OG ANSI only PCB
10* Hardware Availability: Matrix Lab
11
12Make example for this keyboard (after setting up your build environment):
13
14 make matrix/m12og/rev1:default
15
16---
17**Bootloader:**
18
19Hold down ESC while plugging in the keyboard. The board will show up as a mass storage device on your computer. Drag and drop the compiled firmware .bin file into it. The board will automatically reset and load the new firmware.
20
21:no_entry: **DO NOT DO THIS ON A MAC OS SYSTEM! IT WILL PERMANENTLY BRICK THE KEYBOARD!!!**
22
23---
24
25
26See 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/matrix/m12og/rev1/rev1.c b/keyboards/matrix/m12og/rev1/rev1.c
new file mode 100644
index 000000000..e3277bee2
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/rev1.c
@@ -0,0 +1,27 @@
1/* Copyright 2021 kb-elmo<mail@elmo.space>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#include "rev1.h"
18
19void board_init(void) {
20 writePinLow(A8);
21}
22
23void keyboard_post_init_kb(void) {
24 rgblight_enable_noeeprom();
25 rgblight_sethsv_noeeprom(5, 255, 255);
26 rgblight_mode_noeeprom(37);
27}
diff --git a/keyboards/matrix/m12og/rev1/rev1.h b/keyboards/matrix/m12og/rev1/rev1.h
new file mode 100644
index 000000000..6bc656fe9
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/rev1.h
@@ -0,0 +1,37 @@
1/* Copyright 2021 kb-elmo<mail@elmo.space>
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#pragma once
18
19#include "quantum.h"
20
21#define ____ KC_NO
22
23#define LAYOUT_all( \
24 k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
25 k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k213, k313, k114, k115, \
26 k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k113, k314, k214, k215, \
27 k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
28 k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, \
29 k500, k501, k502, k505, k506, k507, k508, k413, k414, k315 \
30) { \
31 { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015 }, \
32 { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, k115 }, \
33 { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215 }, \
34 { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k314, k315 }, \
35 { k400, k401, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k413, k414, ____ }, \
36 { k500, k501, k502, ____, ____, k505, k506, k507, k508, ____, ____, ____, ____, ____, ____, ____ } \
37}
diff --git a/keyboards/matrix/m12og/rev1/rules.mk b/keyboards/matrix/m12og/rev1/rules.mk
new file mode 100644
index 000000000..b146a35ac
--- /dev/null
+++ b/keyboards/matrix/m12og/rev1/rules.mk
@@ -0,0 +1,26 @@
1# MCU name
2MCU = STM32F103
3
4MCU_LDSCRIPT = m12og_v1
5
6BOARD = m12og_v1
7
8# Build Options
9# change yes to no to disable
10#
11BOOTMAGIC_ENABLE = no # Bootmagic disabled because Matrix bootlaoder uses it's own reset mechanism
12MOUSEKEY_ENABLE = no # Mouse keys
13EXTRAKEY_ENABLE = yes # Audio control and System control
14CONSOLE_ENABLE = no # Console for debug
15COMMAND_ENABLE = no # Commands for debug and configuration
16# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
19NKRO_ENABLE = no # USB Nkey Rollover
20BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
21RGBLIGHT_ENABLE = yes # HAS TO BE ON! Otherwise the custom matrix doesn't work
22BLUETOOTH_ENABLE = no # Enable Bluetooth
23AUDIO_ENABLE = no # Audio output
24
25CUSTOM_MATRIX = lite
26SRC += matrix.c
diff --git a/keyboards/matrix/m12og/config.h b/keyboards/matrix/m12og/rev2/config.h
index fae5192a3..fae5192a3 100644
--- a/keyboards/matrix/m12og/config.h
+++ b/keyboards/matrix/m12og/rev2/config.h
diff --git a/keyboards/matrix/m12og/info.json b/keyboards/matrix/m12og/rev2/info.json
index b2bdbf2fc..3b610d715 100644
--- a/keyboards/matrix/m12og/info.json
+++ b/keyboards/matrix/m12og/rev2/info.json
@@ -1,5 +1,5 @@
1{ 1{
2 "keyboard_name": "Matrix/8XV1.2OG ISO/ANSI", 2 "keyboard_name": "Matrix 8XV1.2 OG ISO/ANSI",
3 "url": "", 3 "url": "",
4 "maintainer": "qmk", 4 "maintainer": "qmk",
5 "width": 18.25, 5 "width": 18.25,
diff --git a/keyboards/matrix/m12og/keymaps/default/keymap.c b/keyboards/matrix/m12og/rev2/keymaps/default/keymap.c
index 1444e4bff..1444e4bff 100644
--- a/keyboards/matrix/m12og/keymaps/default/keymap.c
+++ b/keyboards/matrix/m12og/rev2/keymaps/default/keymap.c
diff --git a/keyboards/matrix/m12og/keymaps/iso/keymap.c b/keyboards/matrix/m12og/rev2/keymaps/iso/keymap.c
index 70d0d7bc1..70d0d7bc1 100644
--- a/keyboards/matrix/m12og/keymaps/iso/keymap.c
+++ b/keyboards/matrix/m12og/rev2/keymaps/iso/keymap.c
diff --git a/keyboards/matrix/m12og/keymaps/via/keymap.c b/keyboards/matrix/m12og/rev2/keymaps/via/keymap.c
index 1ae1400fe..1ae1400fe 100644
--- a/keyboards/matrix/m12og/keymaps/via/keymap.c
+++ b/keyboards/matrix/m12og/rev2/keymaps/via/keymap.c
diff --git a/keyboards/matrix/m12og/keymaps/via/rules.mk b/keyboards/matrix/m12og/rev2/keymaps/via/rules.mk
index 1e5b99807..1e5b99807 100644
--- a/keyboards/matrix/m12og/keymaps/via/rules.mk
+++ b/keyboards/matrix/m12og/rev2/keymaps/via/rules.mk
diff --git a/keyboards/matrix/m12og/rev2/readme.md b/keyboards/matrix/m12og/rev2/readme.md
new file mode 100644
index 000000000..bf8d6905b
--- /dev/null
+++ b/keyboards/matrix/m12og/rev2/readme.md
@@ -0,0 +1,16 @@
1# Matrix 8XV1.2 OG keyboard
2
3![Matrix 8XV1.2 OG](https://i.imgur.com/NELL6Sbl.jpg)
4
5This was the Matrix 8XV1.2 OG keyboard made by the Matrix team.
6Note: This firmware only supports ISO/ANSI version (white PCB), and DOES NOT support the 8XV1.2 OG ANSI only version.
7
8* Keyboard Maintainer: [astro](https://github.com/yulei)
9* Hardware Supported: Matrix 8XV1.2 OG (ISO/ANSI) PCB
10* Hardware Availability: Matrix Lab
11
12Make example for this keyboard (after setting up your build environment):
13
14 make matrix/m12og/rev2:default
15
16See 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/matrix/m12og/m12og.c b/keyboards/matrix/m12og/rev2/rev2.c
index 8f3c5056f..4f2af13eb 100644
--- a/keyboards/matrix/m12og/m12og.c
+++ b/keyboards/matrix/m12og/rev2/rev2.c
@@ -1,8 +1,8 @@
1/** 1/**
2 * m12og.c 2 * rev2.c
3 */ 3 */
4 4
5#include "m12og.h" 5#include "rev2.h"
6 6
7void matrix_init_user(void) { 7void matrix_init_user(void) {
8 setPinOutput(C6); 8 setPinOutput(C6);
diff --git a/keyboards/matrix/m12og/m12og.h b/keyboards/matrix/m12og/rev2/rev2.h
index 17ab151da..b2aa4aea7 100644
--- a/keyboards/matrix/m12og/m12og.h
+++ b/keyboards/matrix/m12og/rev2/rev2.h
@@ -23,12 +23,12 @@
23} 23}
24 24
25#define LAYOUT_tkl_iso( \ 25#define LAYOUT_tkl_iso( \
26 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K500, K501, K502, \ 26 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K500, K501, K502, \
27 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, K503, K504, K505, \ 27 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, K503, K504, K505, \
28 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K506, K507, K508, \ 28 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K506, K507, K508, \
29 K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \ 29 K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
30 K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K610, \ 30 K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K610, \
31 K600, K601, K602, K603, K604, K605, K606, K607, K608, K609 \ 31 K600, K601, K602, K603, K604, K605, K606, K607, K608, K609 \
32) { \ 32) { \
33 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ 33 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
34 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO }, \ 34 { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO }, \
@@ -40,11 +40,11 @@
40} 40}
41 41
42#define LAYOUT_tkl_ansi( \ 42#define LAYOUT_tkl_ansi( \
43 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K500, K501, K502,\ 43 K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K500, K501, K502, \
44 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, K503, K504, K505,\ 44 K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, K503, K504, K505, \
45 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K506, K507, K508,\ 45 K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K506, K507, K508, \
46 K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \ 46 K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
47 K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K610, \ 47 K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K610, \
48 K600, K601, K602, K603, K604, K605, K606, K607, K608, K609 \ 48 K600, K601, K602, K603, K604, K605, K606, K607, K608, K609 \
49) { \ 49) { \
50 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \ 50 { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
diff --git a/keyboards/matrix/m12og/rules.mk b/keyboards/matrix/m12og/rev2/rules.mk
index 58ec898a6..58ec898a6 100644
--- a/keyboards/matrix/m12og/rules.mk
+++ b/keyboards/matrix/m12og/rev2/rules.mk