浏览代码

Move driver to core (#15944)

Joel Challis 3 年之前
父节点
当前提交
74e8a71768
共有 4 个文件被更改,包括 72 次插入52 次删除
  1. 6 18
      drivers/gpio/mcp23018.c
  2. 65 0
      drivers/gpio/mcp23018.h
  3. 0 34
      keyboards/viktus/sp111/mcp23018.h
  4. 1 0
      keyboards/viktus/sp111/rules.mk

+ 6 - 18
keyboards/viktus/sp111/mcp23018.c → drivers/gpio/mcp23018.c

@@ -1,18 +1,6 @@
-/* Copyright 2020 zvecr<git@zvecr.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
+// Copyright 2022 zvecr<git@zvecr.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
 #include "mcp23018.h"
 #include "i2c_master.h"
 #include "wait.h"
@@ -40,7 +28,7 @@ void mcp23018_init(uint8_t addr) {
     }
 }
 
-bool mcp23018_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) {
+bool mcp23018_set_config(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf) {
     uint8_t addr         = SLAVE_TO_ADDR(slave_addr);
     uint8_t cmdDirection = port ? CMD_IODIRB : CMD_IODIRA;
     uint8_t cmdPullup    = port ? CMD_GPPUB : CMD_GPPUA;
@@ -60,7 +48,7 @@ bool mcp23018_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf) {
     return true;
 }
 
-bool mcp23018_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf) {
+bool mcp23018_set_output(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf) {
     uint8_t addr = SLAVE_TO_ADDR(slave_addr);
     uint8_t cmd  = port ? CMD_GPIOB : CMD_GPIOA;
 
@@ -86,7 +74,7 @@ bool mcp23018_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB) {
     return true;
 }
 
-bool mcp23018_readPins(uint8_t slave_addr, uint8_t port, uint8_t* out) {
+bool mcp23018_readPins(uint8_t slave_addr, mcp23018_port_t port, uint8_t* out) {
     uint8_t addr = SLAVE_TO_ADDR(slave_addr);
     uint8_t cmd  = port ? CMD_GPIOB : CMD_GPIOA;
 

+ 65 - 0
drivers/gpio/mcp23018.h

@@ -0,0 +1,65 @@
+// Copyright 2022 zvecr<git@zvecr.com>
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+/**
+ * Port ID
+ */
+typedef enum {
+    mcp23018_PORTA,
+    mcp23018_PORTB,
+} mcp23018_port_t;
+
+/**
+ * Helpers for set_config
+ */
+enum {
+    ALL_OUTPUT = 0,
+    ALL_INPUT  = 0xFF,
+};
+
+/**
+ * Helpers for set_output
+ */
+enum {
+    ALL_LOW  = 0,
+    ALL_HIGH = 0xFF,
+};
+
+/**
+ * Init expander and any other dependent drivers
+ */
+void mcp23018_init(uint8_t slave_addr);
+
+/**
+ * Configure input/output to a given port
+ */
+bool mcp23018_set_config(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf);
+
+/**
+ * Write high/low to a given port
+ */
+bool mcp23018_set_output(uint8_t slave_addr, mcp23018_port_t port, uint8_t conf);
+
+/**
+ * Write high/low to both ports sequentially
+ *
+ *  - slightly faster than multiple set_output
+ */
+bool mcp23018_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB);
+
+/**
+ * Read state of a given port
+ */
+bool mcp23018_readPins(uint8_t slave_addr, mcp23018_port_t port, uint8_t* ret);
+
+/**
+ * Read state of both ports sequentially
+ *
+ *  - slightly faster than multiple readPins
+ */
+bool mcp23018_readPins_all(uint8_t slave_addr, uint16_t* ret);

+ 0 - 34
keyboards/viktus/sp111/mcp23018.h

@@ -1,34 +0,0 @@
-/* Copyright 2020 zvecr<git@zvecr.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-
-#define mcp23018_PORTA 0
-#define mcp23018_PORTB 1
-
-#define ALL_OUTPUT 0
-#define ALL_INPUT 0xFF
-#define ALL_LOW 0
-#define ALL_HIGH 0xFF
-
-void mcp23018_init(uint8_t addr);
-bool mcp23018_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf);
-bool mcp23018_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf);
-bool mcp23018_set_output_all(uint8_t slave_addr, uint8_t confA, uint8_t confB);
-bool mcp23018_readPins(uint8_t slave_addraddr, uint8_t port, uint8_t* ret);
-bool mcp23018_readPins_all(uint8_t slave_addr, uint16_t* ret);

+ 1 - 0
keyboards/viktus/sp111/rules.mk

@@ -22,5 +22,6 @@ LTO_ENABLE = yes            # Smaller (and slightly faster) firmware
 # custom matrix setup
 CUSTOM_MATRIX = lite
 
+VPATH += drivers/gpio
 SRC += mcp23018.c matrix.c
 QUANTUM_LIB_SRC += i2c_master.c