~ruther/qmk_firmware

74e8a71768c5b6ce04e45b4418784c70d6ca3386 — Joel Challis 3 years ago 2e279f1
Move driver to core (#15944)

4 files changed, 72 insertions(+), 52 deletions(-)

R {keyboards/viktus/sp111 => drivers/gpio}/mcp23018.c
A drivers/gpio/mcp23018.h
D keyboards/viktus/sp111/mcp23018.h
M keyboards/viktus/sp111/rules.mk
R keyboards/viktus/sp111/mcp23018.c => drivers/gpio/mcp23018.c +6 -18
@@ 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;


A drivers/gpio/mcp23018.h => drivers/gpio/mcp23018.h +65 -0
@@ 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);

D keyboards/viktus/sp111/mcp23018.h => keyboards/viktus/sp111/mcp23018.h +0 -34
@@ 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);

M keyboards/viktus/sp111/rules.mk => keyboards/viktus/sp111/rules.mk +1 -0
@@ 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