Hot-pluggable parallel port debugging
This commit is contained in:
committed by
Jeremy Soller
parent
47aed0733e
commit
834aaf97e4
@ -4,18 +4,6 @@ EC=it5570e
|
|||||||
KEYMAP?=default
|
KEYMAP?=default
|
||||||
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
||||||
|
|
||||||
# Set log level
|
|
||||||
# 0 - NONE
|
|
||||||
# 1 - ERROR
|
|
||||||
# 2 - WARN
|
|
||||||
# 3 - INFO
|
|
||||||
# 4 - DEBUG
|
|
||||||
# 5 - TRACE
|
|
||||||
CFLAGS+=-DLEVEL=4
|
|
||||||
|
|
||||||
# Enable I2C debug on 0x76
|
|
||||||
#CFLAGS+=-DI2C_DEBUGGER=0x76
|
|
||||||
|
|
||||||
# Set discrete GPU I2C bus
|
# Set discrete GPU I2C bus
|
||||||
CFLAGS+=-DI2C_DGPU=I2C_1
|
CFLAGS+=-DI2C_DGPU=I2C_1
|
||||||
|
|
||||||
@ -25,6 +13,17 @@ CFLAGS+=-DI2C_SMBUS=I2C_4
|
|||||||
# Set touchpad PS2 bus
|
# Set touchpad PS2 bus
|
||||||
CFLAGS+=-DPS2_TOUCHPAD=PS2_3
|
CFLAGS+=-DPS2_TOUCHPAD=PS2_3
|
||||||
|
|
||||||
|
# Set smart charger parameters
|
||||||
|
CFLAGS+=\
|
||||||
|
-DCHARGER_CHARGE_CURRENT=1536 \
|
||||||
|
-DCHARGER_CHARGE_VOLTAGE=12600 \
|
||||||
|
-DCHARGER_INPUT_CURRENT=11800
|
||||||
|
|
||||||
|
# Set CPU power limits in watts
|
||||||
|
CFLAGS+=\
|
||||||
|
-DPOWER_LIMIT_AC=180 \
|
||||||
|
-DPOWER_LIMIT_DC=28
|
||||||
|
|
||||||
# Custom fan curve
|
# Custom fan curve
|
||||||
CLFAGS+=-DBOARD_HEATUP=5
|
CLFAGS+=-DBOARD_HEATUP=5
|
||||||
CFLAGS+=-DBOARD_COOLDOWN=20
|
CFLAGS+=-DBOARD_COOLDOWN=20
|
||||||
@ -36,12 +35,6 @@ CFLAGS+=-DBOARD_FAN_POINTS="\
|
|||||||
FAN_POINT(80, 100) \
|
FAN_POINT(80, 100) \
|
||||||
"
|
"
|
||||||
|
|
||||||
# Set smart charger parameters
|
|
||||||
CFLAGS+=\
|
|
||||||
-DCHARGER_CHARGE_CURRENT=1536 \
|
|
||||||
-DCHARGER_CHARGE_VOLTAGE=12600 \
|
|
||||||
-DCHARGER_INPUT_CURRENT=11800
|
|
||||||
|
|
||||||
# Enable DGPU support
|
# Enable DGPU support
|
||||||
CFLAGS+=-DHAVE_DGPU=1
|
CFLAGS+=-DHAVE_DGPU=1
|
||||||
CLFAGS+=-DBOARD_DGPU_HEATUP=5
|
CLFAGS+=-DBOARD_DGPU_HEATUP=5
|
||||||
@ -54,13 +47,5 @@ CFLAGS+=-DBOARD_DGPU_FAN_POINTS="\
|
|||||||
FAN_POINT(80, 100) \
|
FAN_POINT(80, 100) \
|
||||||
"
|
"
|
||||||
|
|
||||||
# Set CPU power limits in watts
|
|
||||||
CFLAGS+=\
|
|
||||||
-DPOWER_LIMIT_AC=180 \
|
|
||||||
-DPOWER_LIMIT_DC=28
|
|
||||||
|
|
||||||
# Enable debug logging over keyboard parallel port
|
|
||||||
#CFLAGS+=-DPARPORT_DEBUG
|
|
||||||
|
|
||||||
# Add system76 common code
|
# Add system76 common code
|
||||||
include src/board/system76/common/common.mk
|
include src/board/system76/common/common.mk
|
||||||
|
@ -1,11 +1,27 @@
|
|||||||
|
# Set log level
|
||||||
|
# 0 - NONE
|
||||||
|
# 1 - ERROR
|
||||||
|
# 2 - WARN
|
||||||
|
# 3 - INFO
|
||||||
|
# 4 - DEBUG
|
||||||
|
# 5 - TRACE
|
||||||
|
CFLAGS+=-DLEVEL=4
|
||||||
|
|
||||||
|
# Uncomment to enable debug logging over keyboard parallel port
|
||||||
|
#CFLAGS+=-DPARALLEL_DEBUG
|
||||||
|
|
||||||
|
# Uncomment to enable I2C debug on 0x76
|
||||||
|
#CFLAGS+=-DI2C_DEBUGGER=0x76
|
||||||
|
|
||||||
|
# Set external programmer
|
||||||
|
PROGRAMMER=$(wildcard /dev/serial/by-id/usb-Arduino*)
|
||||||
|
|
||||||
# Include system76 common source
|
# Include system76 common source
|
||||||
SYSTEM76_COMMON_DIR=src/board/system76/common
|
SYSTEM76_COMMON_DIR=src/board/system76/common
|
||||||
SRC+=$(wildcard $(SYSTEM76_COMMON_DIR)/*.c)
|
SRC+=$(wildcard $(SYSTEM76_COMMON_DIR)/*.c)
|
||||||
INCLUDE+=$(wildcard $(SYSTEM76_COMMON_DIR)/include/common/*.h) $(SYSTEM76_COMMON_DIR)/common.mk
|
INCLUDE+=$(wildcard $(SYSTEM76_COMMON_DIR)/include/common/*.h) $(SYSTEM76_COMMON_DIR)/common.mk
|
||||||
CFLAGS+=-I$(SYSTEM76_COMMON_DIR)/include
|
CFLAGS+=-I$(SYSTEM76_COMMON_DIR)/include
|
||||||
|
|
||||||
PROGRAMMER=$(wildcard /dev/serial/by-id/usb-Arduino*)
|
|
||||||
|
|
||||||
# Add scratch ROM
|
# Add scratch ROM
|
||||||
include $(SYSTEM76_COMMON_DIR)/scratch/scratch.mk
|
include $(SYSTEM76_COMMON_DIR)/scratch/scratch.mk
|
||||||
|
|
||||||
|
11
src/board/system76/common/include/board/parallel.h
Normal file
11
src/board/system76/common/include/board/parallel.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#ifndef _BOARD_PARALLEL_H
|
||||||
|
#define _BOARD_PARALLEL_H
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
extern bool parallel_debug;
|
||||||
|
bool parallel_init(void);
|
||||||
|
int parallel_write(uint8_t * data, int length);
|
||||||
|
|
||||||
|
#endif // _BOARD_PARALLEL_H
|
@ -27,6 +27,11 @@ void kbscan_init(void) {
|
|||||||
KSOHGCTRL = 0xFF;
|
KSOHGCTRL = 0xFF;
|
||||||
KSOHGOEN = 0;
|
KSOHGOEN = 0;
|
||||||
KSOH2 = 0;
|
KSOH2 = 0;
|
||||||
|
|
||||||
|
// Set all inputs to KBS mode, low, and inputs
|
||||||
|
KSIGCTRL = 0;
|
||||||
|
KSIGOEN = 0;
|
||||||
|
KSIGDAT = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Debounce time in milliseconds
|
// Debounce time in milliseconds
|
||||||
|
@ -27,9 +27,9 @@
|
|||||||
#include <common/version.h>
|
#include <common/version.h>
|
||||||
#include <ec/ec.h>
|
#include <ec/ec.h>
|
||||||
|
|
||||||
#ifdef PARPORT_DEBUG
|
#ifdef PARALLEL_DEBUG
|
||||||
#include <ec/parallel.h>
|
#include <board/parallel.h>
|
||||||
#endif
|
#endif // PARALLEL_DEBUG
|
||||||
|
|
||||||
void external_0(void) __interrupt(0) {}
|
void external_0(void) __interrupt(0) {}
|
||||||
// timer_0 is in time.c
|
// timer_0 is in time.c
|
||||||
@ -55,11 +55,15 @@ void init(void) {
|
|||||||
ecpm_init();
|
ecpm_init();
|
||||||
kbc_init();
|
kbc_init();
|
||||||
kbled_init();
|
kbled_init();
|
||||||
#ifdef PARPORT_DEBUG
|
#ifdef PARALLEL_DEBUG
|
||||||
parport_init();
|
parallel_debug = false;
|
||||||
#else
|
if (parallel_init()) {
|
||||||
|
parallel_debug = true;
|
||||||
|
} else
|
||||||
|
#endif // PARALLEL_DEBUG
|
||||||
|
{
|
||||||
kbscan_init();
|
kbscan_init();
|
||||||
#endif
|
}
|
||||||
peci_init();
|
peci_init();
|
||||||
pmc_init();
|
pmc_init();
|
||||||
pwm_init();
|
pwm_init();
|
||||||
@ -91,10 +95,13 @@ void main(void) {
|
|||||||
power_event();
|
power_event();
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
#ifndef PARPORT_DEBUG
|
#if PARALLEL_DEBUG
|
||||||
|
if (!parallel_debug)
|
||||||
|
#endif // PARALLEL_DEBUG
|
||||||
|
{
|
||||||
// Scans keyboard and sends keyboard packets
|
// Scans keyboard and sends keyboard packets
|
||||||
kbscan_event();
|
kbscan_event();
|
||||||
#endif
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
// Passes through touchpad packets
|
// Passes through touchpad packets
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <arch/delay.h>
|
#include <arch/delay.h>
|
||||||
#include <arch/time.h>
|
#include <arch/time.h>
|
||||||
|
#include <board/parallel.h>
|
||||||
#include <ec/kbscan.h>
|
#include <ec/kbscan.h>
|
||||||
#include <ec/parallel.h>
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
@ -24,9 +24,23 @@
|
|||||||
#define STS_WAIT (1 << 1)
|
#define STS_WAIT (1 << 1)
|
||||||
|
|
||||||
// Maximum peripheral response time in ms
|
// Maximum peripheral response time in ms
|
||||||
#define PARPORT_TIMEOUT 35
|
#define PARALLEL_TIMEOUT 10
|
||||||
|
|
||||||
void parport_init(void) {
|
bool parallel_debug = false;
|
||||||
|
|
||||||
|
static bool parallel_wait_peripheral(uint8_t mask, uint8_t value) {
|
||||||
|
uint32_t start = time_get();
|
||||||
|
|
||||||
|
while (time_get() < start + PARALLEL_TIMEOUT) {
|
||||||
|
if ((KSOHGDMRR & mask) == value) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool parallel_init(void) {
|
||||||
// XXX: Needed? Pull-ups, open-drain are always disabled in GPIO mode
|
// XXX: Needed? Pull-ups, open-drain are always disabled in GPIO mode
|
||||||
KSOCTRL = 0;
|
KSOCTRL = 0;
|
||||||
// XXX: Needed? OVRPPK is for KBS mode, pull-ups are always disabled in GPIO mode
|
// XXX: Needed? OVRPPK is for KBS mode, pull-ups are always disabled in GPIO mode
|
||||||
@ -52,7 +66,7 @@ void parport_init(void) {
|
|||||||
// Deassert nWRITE, nDATASTB, nADDRSTB
|
// Deassert nWRITE, nDATASTB, nADDRSTB
|
||||||
KSIGDAT |= CTL_WRITE | CTL_DATA | CTL_ADDR;
|
KSIGDAT |= CTL_WRITE | CTL_DATA | CTL_ADDR;
|
||||||
|
|
||||||
// Set nWAIT high
|
// PUll up nWAIT
|
||||||
KSOH1 |= STS_WAIT;
|
KSOH1 |= STS_WAIT;
|
||||||
|
|
||||||
// Pull up data lines
|
// Pull up data lines
|
||||||
@ -60,21 +74,12 @@ void parport_init(void) {
|
|||||||
|
|
||||||
// Deassert nRESET
|
// Deassert nRESET
|
||||||
KSIGDAT |= CTL_RESET;
|
KSIGDAT |= CTL_RESET;
|
||||||
|
|
||||||
|
// Check if there is a peripheral waiting
|
||||||
|
return parallel_wait_peripheral(STS_WAIT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool parport_wait_peripheral(uint8_t mask, uint8_t value) {
|
int parallel_write(uint8_t * data, int length) {
|
||||||
uint32_t start = time_get();
|
|
||||||
|
|
||||||
while (time_get() < start + PARPORT_TIMEOUT) {
|
|
||||||
if ((KSOHGDMRR & mask) == value) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int parport_write(uint8_t * data, int length) {
|
|
||||||
// Assert nWRITE
|
// Assert nWRITE
|
||||||
KSIGDAT &= ~CTL_WRITE;
|
KSIGDAT &= ~CTL_WRITE;
|
||||||
|
|
||||||
@ -84,7 +89,7 @@ int parport_write(uint8_t * data, int length) {
|
|||||||
int i;
|
int i;
|
||||||
for (i = 0; i < length; i++) {
|
for (i = 0; i < length; i++) {
|
||||||
// Wait for peripheral to indicate it's ready for next cycle
|
// Wait for peripheral to indicate it's ready for next cycle
|
||||||
if (!parport_wait_peripheral(STS_WAIT, 0)) {
|
if (!parallel_wait_peripheral(STS_WAIT, 0)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,7 +100,7 @@ int parport_write(uint8_t * data, int length) {
|
|||||||
KSIGDAT &= ~CTL_DATA;
|
KSIGDAT &= ~CTL_DATA;
|
||||||
|
|
||||||
// Wait for peripheral to indicate it's processing
|
// Wait for peripheral to indicate it's processing
|
||||||
if (!parport_wait_peripheral(STS_WAIT, STS_WAIT)) {
|
if (!parallel_wait_peripheral(STS_WAIT, STS_WAIT)) {
|
||||||
KSIGDAT |= CTL_DATA;
|
KSIGDAT |= CTL_DATA;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -104,7 +109,7 @@ int parport_write(uint8_t * data, int length) {
|
|||||||
KSIGDAT |= CTL_DATA;
|
KSIGDAT |= CTL_DATA;
|
||||||
|
|
||||||
// Wait for peripheral to indicate it's ready for next cycle
|
// Wait for peripheral to indicate it's ready for next cycle
|
||||||
if (!parport_wait_peripheral(STS_WAIT, 0)) {
|
if (!parallel_wait_peripheral(STS_WAIT, 0)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -10,21 +10,28 @@
|
|||||||
#include <ec/i2c.h>
|
#include <ec/i2c.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PARPORT_DEBUG
|
#ifdef PARALLEL_DEBUG
|
||||||
#include <ec/parallel.h>
|
#include <board/parallel.h>
|
||||||
#endif
|
#endif // PARALLEL_DEBUG
|
||||||
|
|
||||||
int putchar(int c) {
|
int putchar(int c) {
|
||||||
unsigned char byte = (unsigned char)c;
|
unsigned char byte = (unsigned char)c;
|
||||||
|
|
||||||
smfi_debug(byte);
|
smfi_debug(byte);
|
||||||
|
|
||||||
#ifdef SERIAL_DEBUGGER
|
#ifdef SERIAL_DEBUGGER
|
||||||
SBUF = byte;
|
SBUF = byte;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef I2C_DEBUGGER
|
#ifdef I2C_DEBUGGER
|
||||||
i2c_send(&I2C_SMBUS, I2C_DEBUGGER, &byte, 1);
|
i2c_send(&I2C_SMBUS, I2C_DEBUGGER, &byte, 1);
|
||||||
#endif
|
#endif
|
||||||
#ifdef PARPORT_DEBUG
|
|
||||||
parport_write(&byte, 1);
|
#ifdef PARALLEL_DEBUG
|
||||||
#endif
|
if (parallel_debug) {
|
||||||
|
parallel_write(&byte, 1);
|
||||||
|
}
|
||||||
|
#endif // PARALLEL_DEBUG
|
||||||
|
|
||||||
return (int)byte;
|
return (int)byte;
|
||||||
}
|
}
|
||||||
|
@ -4,21 +4,12 @@ EC=it8587e
|
|||||||
KEYMAP?=default
|
KEYMAP?=default
|
||||||
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
||||||
|
|
||||||
# Set log level
|
|
||||||
# 0 - NONE
|
|
||||||
# 1 - ERROR
|
|
||||||
# 2 - WARN
|
|
||||||
# 3 - INFO
|
|
||||||
# 4 - DEBUG
|
|
||||||
# 5 - TRACE
|
|
||||||
CFLAGS+=-DLEVEL=4
|
|
||||||
|
|
||||||
# Enable I2C debug on 0x76
|
|
||||||
#CFLAGS+=-DI2C_DEBUGGER=0x76
|
|
||||||
|
|
||||||
# Set battery I2C bus
|
# Set battery I2C bus
|
||||||
CFLAGS+=-DI2C_SMBUS=I2C_0
|
CFLAGS+=-DI2C_SMBUS=I2C_0
|
||||||
|
|
||||||
|
# Set keyboard LED I2C bus
|
||||||
|
CFLAGS+=-DI2C_KBLED=I2C_1
|
||||||
|
|
||||||
# Set touchpad PS2 bus
|
# Set touchpad PS2 bus
|
||||||
CFLAGS+=-DPS2_TOUCHPAD=PS2_3
|
CFLAGS+=-DPS2_TOUCHPAD=PS2_3
|
||||||
|
|
||||||
@ -28,11 +19,5 @@ CFLAGS+=\
|
|||||||
-DCHARGER_CHARGE_VOLTAGE=17600 \
|
-DCHARGER_CHARGE_VOLTAGE=17600 \
|
||||||
-DCHARGER_INPUT_CURRENT=3200
|
-DCHARGER_INPUT_CURRENT=3200
|
||||||
|
|
||||||
# Set keyboard LED I2C bus
|
|
||||||
CFLAGS+=-DI2C_KBLED=I2C_1
|
|
||||||
|
|
||||||
# Enable debug logging over keyboard parallel port
|
|
||||||
#CFLAGS+=-DPARPORT_DEBUG
|
|
||||||
|
|
||||||
# Add system76 common code
|
# Add system76 common code
|
||||||
include src/board/system76/common/common.mk
|
include src/board/system76/common/common.mk
|
||||||
|
@ -4,18 +4,6 @@ EC=it8587e
|
|||||||
KEYMAP?=default
|
KEYMAP?=default
|
||||||
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
||||||
|
|
||||||
# Set log level
|
|
||||||
# 0 - NONE
|
|
||||||
# 1 - ERROR
|
|
||||||
# 2 - WARN
|
|
||||||
# 3 - INFO
|
|
||||||
# 4 - DEBUG
|
|
||||||
# 5 - TRACE
|
|
||||||
CFLAGS+=-DLEVEL=4
|
|
||||||
|
|
||||||
# Enable I2C debug on 0x76
|
|
||||||
#CFLAGS+=-DI2C_DEBUGGER=0x76
|
|
||||||
|
|
||||||
# Set battery I2C bus
|
# Set battery I2C bus
|
||||||
CFLAGS+=-DI2C_SMBUS=I2C_0
|
CFLAGS+=-DI2C_SMBUS=I2C_0
|
||||||
|
|
||||||
@ -28,8 +16,5 @@ CFLAGS+=\
|
|||||||
-DCHARGER_CHARGE_VOLTAGE=13056 \
|
-DCHARGER_CHARGE_VOLTAGE=13056 \
|
||||||
-DCHARGER_INPUT_CURRENT=1920
|
-DCHARGER_INPUT_CURRENT=1920
|
||||||
|
|
||||||
# Enable debug logging over keyboard parallel port
|
|
||||||
#CFLAGS+=-DPARPORT_DEBUG
|
|
||||||
|
|
||||||
# Add system76 common code
|
# Add system76 common code
|
||||||
include src/board/system76/common/common.mk
|
include src/board/system76/common/common.mk
|
||||||
|
@ -4,18 +4,6 @@ EC=it5570e
|
|||||||
KEYMAP?=default
|
KEYMAP?=default
|
||||||
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
||||||
|
|
||||||
# Set log level
|
|
||||||
# 0 - NONE
|
|
||||||
# 1 - ERROR
|
|
||||||
# 2 - WARN
|
|
||||||
# 3 - INFO
|
|
||||||
# 4 - DEBUG
|
|
||||||
# 5 - TRACE
|
|
||||||
CFLAGS+=-DLEVEL=4
|
|
||||||
|
|
||||||
# Enable I2C debug on 0x76
|
|
||||||
#CFLAGS+=-DI2C_DEBUGGER=0x76
|
|
||||||
|
|
||||||
# Set discrete GPU I2C bus
|
# Set discrete GPU I2C bus
|
||||||
CFLAGS+=-DI2C_DGPU=I2C_1
|
CFLAGS+=-DI2C_DGPU=I2C_1
|
||||||
|
|
||||||
@ -25,6 +13,17 @@ CFLAGS+=-DI2C_SMBUS=I2C_4
|
|||||||
# Set touchpad PS2 bus
|
# Set touchpad PS2 bus
|
||||||
CFLAGS+=-DPS2_TOUCHPAD=PS2_3
|
CFLAGS+=-DPS2_TOUCHPAD=PS2_3
|
||||||
|
|
||||||
|
# Set smart charger parameters
|
||||||
|
CFLAGS+=\
|
||||||
|
-DCHARGER_CHARGE_CURRENT=1536 \
|
||||||
|
-DCHARGER_CHARGE_VOLTAGE=16800 \
|
||||||
|
-DCHARGER_INPUT_CURRENT=9230
|
||||||
|
|
||||||
|
# Set CPU power limits in watts
|
||||||
|
CFLAGS+=\
|
||||||
|
-DPOWER_LIMIT_AC=180 \
|
||||||
|
-DPOWER_LIMIT_DC=28
|
||||||
|
|
||||||
# Custom fan curve
|
# Custom fan curve
|
||||||
CLFAGS+=-DBOARD_HEATUP=5
|
CLFAGS+=-DBOARD_HEATUP=5
|
||||||
CFLAGS+=-DBOARD_COOLDOWN=20
|
CFLAGS+=-DBOARD_COOLDOWN=20
|
||||||
@ -36,12 +35,6 @@ CFLAGS+=-DBOARD_FAN_POINTS="\
|
|||||||
FAN_POINT(80, 100) \
|
FAN_POINT(80, 100) \
|
||||||
"
|
"
|
||||||
|
|
||||||
# Set smart charger parameters
|
|
||||||
CFLAGS+=\
|
|
||||||
-DCHARGER_CHARGE_CURRENT=1536 \
|
|
||||||
-DCHARGER_CHARGE_VOLTAGE=16800 \
|
|
||||||
-DCHARGER_INPUT_CURRENT=9230
|
|
||||||
|
|
||||||
# Enable DGPU support
|
# Enable DGPU support
|
||||||
CFLAGS+=-DHAVE_DGPU=1
|
CFLAGS+=-DHAVE_DGPU=1
|
||||||
CLFAGS+=-DBOARD_DGPU_HEATUP=5
|
CLFAGS+=-DBOARD_DGPU_HEATUP=5
|
||||||
@ -54,13 +47,5 @@ CFLAGS+=-DBOARD_DGPU_FAN_POINTS="\
|
|||||||
FAN_POINT(80, 100) \
|
FAN_POINT(80, 100) \
|
||||||
"
|
"
|
||||||
|
|
||||||
# Set CPU power limits in watts
|
|
||||||
CFLAGS+=\
|
|
||||||
-DPOWER_LIMIT_AC=180 \
|
|
||||||
-DPOWER_LIMIT_DC=28
|
|
||||||
|
|
||||||
# Enable debug logging over keyboard parallel port
|
|
||||||
#CFLAGS+=-DPARPORT_DEBUG
|
|
||||||
|
|
||||||
# Add system76 common code
|
# Add system76 common code
|
||||||
include src/board/system76/common/common.mk
|
include src/board/system76/common/common.mk
|
||||||
|
@ -4,18 +4,6 @@ EC=it5570e
|
|||||||
KEYMAP?=default
|
KEYMAP?=default
|
||||||
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
||||||
|
|
||||||
# Set log level
|
|
||||||
# 0 - NONE
|
|
||||||
# 1 - ERROR
|
|
||||||
# 2 - WARN
|
|
||||||
# 3 - INFO
|
|
||||||
# 4 - DEBUG
|
|
||||||
# 5 - TRACE
|
|
||||||
CFLAGS+=-DLEVEL=4
|
|
||||||
|
|
||||||
# Enable I2C debug on 0x76
|
|
||||||
#CFLAGS+=-DI2C_DEBUGGER=0x76
|
|
||||||
|
|
||||||
# Set battery I2C bus
|
# Set battery I2C bus
|
||||||
CFLAGS+=-DI2C_SMBUS=I2C_4
|
CFLAGS+=-DI2C_SMBUS=I2C_4
|
||||||
|
|
||||||
@ -29,8 +17,5 @@ CFLAGS+=\
|
|||||||
-DCHARGER_CHARGE_VOLTAGE=8800 \
|
-DCHARGER_CHARGE_VOLTAGE=8800 \
|
||||||
-DCHARGER_INPUT_CURRENT=1600
|
-DCHARGER_INPUT_CURRENT=1600
|
||||||
|
|
||||||
# Enable debug logging over keyboard parallel port
|
|
||||||
#CFLAGS+=-DPARPORT_DEBUG
|
|
||||||
|
|
||||||
# Add system76 common code
|
# Add system76 common code
|
||||||
include src/board/system76/common/common.mk
|
include src/board/system76/common/common.mk
|
||||||
|
@ -4,18 +4,6 @@ EC=it5570e
|
|||||||
KEYMAP?=default
|
KEYMAP?=default
|
||||||
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
SRC+=$(BOARD_DIR)/keymap/$(KEYMAP).c
|
||||||
|
|
||||||
# Set log level
|
|
||||||
# 0 - NONE
|
|
||||||
# 1 - ERROR
|
|
||||||
# 2 - WARN
|
|
||||||
# 3 - INFO
|
|
||||||
# 4 - DEBUG
|
|
||||||
# 5 - TRACE
|
|
||||||
CFLAGS+=-DLEVEL=4
|
|
||||||
|
|
||||||
# Enable I2C debug on 0x76
|
|
||||||
#CFLAGS+=-DI2C_DEBUGGER=0x76
|
|
||||||
|
|
||||||
# Set discrete GPU I2C bus
|
# Set discrete GPU I2C bus
|
||||||
CFLAGS+=-DI2C_DGPU=I2C_1
|
CFLAGS+=-DI2C_DGPU=I2C_1
|
||||||
|
|
||||||
@ -25,6 +13,17 @@ CFLAGS+=-DI2C_SMBUS=I2C_4
|
|||||||
# Set touchpad PS2 bus
|
# Set touchpad PS2 bus
|
||||||
CFLAGS+=-DPS2_TOUCHPAD=PS2_3
|
CFLAGS+=-DPS2_TOUCHPAD=PS2_3
|
||||||
|
|
||||||
|
# Set smart charger parameters
|
||||||
|
CFLAGS+=\
|
||||||
|
-DCHARGER_CHARGE_CURRENT=1536 \
|
||||||
|
-DCHARGER_CHARGE_VOLTAGE=16800 \
|
||||||
|
-DCHARGER_INPUT_CURRENT=13050
|
||||||
|
|
||||||
|
# Set CPU power limits in watts
|
||||||
|
CFLAGS+=\
|
||||||
|
-DPOWER_LIMIT_AC=180 \
|
||||||
|
-DPOWER_LIMIT_DC=28
|
||||||
|
|
||||||
# Custom fan curve
|
# Custom fan curve
|
||||||
CLFAGS+=-DBOARD_HEATUP=5
|
CLFAGS+=-DBOARD_HEATUP=5
|
||||||
CFLAGS+=-DBOARD_COOLDOWN=20
|
CFLAGS+=-DBOARD_COOLDOWN=20
|
||||||
@ -36,12 +35,6 @@ CFLAGS+=-DBOARD_FAN_POINTS="\
|
|||||||
FAN_POINT(80, 100) \
|
FAN_POINT(80, 100) \
|
||||||
"
|
"
|
||||||
|
|
||||||
# Set smart charger parameters
|
|
||||||
CFLAGS+=\
|
|
||||||
-DCHARGER_CHARGE_CURRENT=1536 \
|
|
||||||
-DCHARGER_CHARGE_VOLTAGE=16800 \
|
|
||||||
-DCHARGER_INPUT_CURRENT=13050
|
|
||||||
|
|
||||||
# Enable DGPU support
|
# Enable DGPU support
|
||||||
CFLAGS+=-DHAVE_DGPU=1
|
CFLAGS+=-DHAVE_DGPU=1
|
||||||
CLFAGS+=-DBOARD_DGPU_HEATUP=5
|
CLFAGS+=-DBOARD_DGPU_HEATUP=5
|
||||||
@ -54,13 +47,5 @@ CFLAGS+=-DBOARD_DGPU_FAN_POINTS="\
|
|||||||
FAN_POINT(80, 100) \
|
FAN_POINT(80, 100) \
|
||||||
"
|
"
|
||||||
|
|
||||||
# Set CPU power limits in watts
|
|
||||||
CFLAGS+=\
|
|
||||||
-DPOWER_LIMIT_AC=180 \
|
|
||||||
-DPOWER_LIMIT_DC=28
|
|
||||||
|
|
||||||
# Enable debug logging over keyboard parallel port
|
|
||||||
#CFLAGS+=-DPARPORT_DEBUG
|
|
||||||
|
|
||||||
# Add system76 common code
|
# Add system76 common code
|
||||||
include src/board/system76/common/common.mk
|
include src/board/system76/common/common.mk
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
#ifndef _EC_PARALLEL_H
|
|
||||||
#define _EC_PARALLEL_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
void parport_init(void);
|
|
||||||
int parport_write(uint8_t * data, int length);
|
|
||||||
|
|
||||||
#endif // _EC_PARALLEL_H
|
|
@ -1,9 +0,0 @@
|
|||||||
#ifndef _EC_PARALLEL_H
|
|
||||||
#define _EC_PARALLEL_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
void parport_init(void);
|
|
||||||
int parport_write(uint8_t * data, int length);
|
|
||||||
|
|
||||||
#endif // _EC_PARALLEL_H
|
|
@ -1,122 +0,0 @@
|
|||||||
#include <arch/delay.h>
|
|
||||||
#include <arch/time.h>
|
|
||||||
#include <ec/kbscan.h>
|
|
||||||
#include <ec/parallel.h>
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* nWRITE = KSI[0]
|
|
||||||
* nDATASTB = KSI[1]
|
|
||||||
* nRESET = KSI[2]
|
|
||||||
* nADDRSTB = KSI[3]
|
|
||||||
*
|
|
||||||
* AD[8:1] = KSOL[7:0]
|
|
||||||
* nINTR = KSOH[0]
|
|
||||||
* nWAIT = KSOH[1]
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define CTL_WRITE (1 << 0)
|
|
||||||
#define CTL_DATA (1 << 1)
|
|
||||||
#define CTL_RESET (1 << 2)
|
|
||||||
#define CTL_ADDR (1 << 3)
|
|
||||||
|
|
||||||
#define STS_WAIT (1 << 1)
|
|
||||||
|
|
||||||
// Maximum peripheral response time in ms
|
|
||||||
#define PARPORT_TIMEOUT 35
|
|
||||||
|
|
||||||
void parport_init(void) {
|
|
||||||
// XXX: Needed? Pull-ups, open-drain are always disabled in GPIO mode
|
|
||||||
KSOCTRL = 0;
|
|
||||||
// XXX: Needed? OVRPPK is for KBS mode, pull-ups are always disabled in GPIO mode
|
|
||||||
KSICTRLR = 0;
|
|
||||||
|
|
||||||
// Set all outputs to GPIO mode, low, and inputs
|
|
||||||
KSOL = 0;
|
|
||||||
KSOLGCTRL = 0xFF;
|
|
||||||
KSOLGOEN = 0;
|
|
||||||
KSOH1 = 0;
|
|
||||||
KSOHGCTRL = 0xFF;
|
|
||||||
KSOHGOEN = 0;
|
|
||||||
KSOH2 = 0;
|
|
||||||
|
|
||||||
// Set control lines as outputs, low
|
|
||||||
KSIGCTRL = 0xFF;
|
|
||||||
KSIGOEN = 0x0F;
|
|
||||||
KSIGDAT = 0;
|
|
||||||
|
|
||||||
// Assert nRESET
|
|
||||||
KSIGDAT &= ~CTL_RESET;
|
|
||||||
|
|
||||||
// Deassert nWRITE, nDATASTB, nADDRSTB
|
|
||||||
KSIGDAT |= CTL_WRITE | CTL_DATA | CTL_ADDR;
|
|
||||||
|
|
||||||
// Set nWAIT high
|
|
||||||
KSOH1 |= STS_WAIT;
|
|
||||||
|
|
||||||
// Pull up data lines
|
|
||||||
KSOL = 0xFF;
|
|
||||||
|
|
||||||
// Deassert nRESET
|
|
||||||
KSIGDAT |= CTL_RESET;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool parport_wait_peripheral(uint8_t mask, uint8_t value) {
|
|
||||||
uint32_t start = time_get();
|
|
||||||
|
|
||||||
while (time_get() < start + PARPORT_TIMEOUT) {
|
|
||||||
if ((KSOHGDMRR & mask) == value) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int parport_write(uint8_t * data, int length) {
|
|
||||||
// Assert nWRITE
|
|
||||||
KSIGDAT &= ~CTL_WRITE;
|
|
||||||
|
|
||||||
// Set data lines as outputs
|
|
||||||
KSOLGOEN = 0xFF;
|
|
||||||
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < length; i++) {
|
|
||||||
// Wait for peripheral to indicate it's ready for next cycle
|
|
||||||
if (!parport_wait_peripheral(STS_WAIT, 0)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write data to port
|
|
||||||
KSOL = data[i];
|
|
||||||
|
|
||||||
// Assert nDATASTB
|
|
||||||
KSIGDAT &= ~CTL_DATA;
|
|
||||||
|
|
||||||
// Wait for peripheral to indicate it's processing
|
|
||||||
if (!parport_wait_peripheral(STS_WAIT, STS_WAIT)) {
|
|
||||||
KSIGDAT |= CTL_DATA;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deassert nDATASTB
|
|
||||||
KSIGDAT |= CTL_DATA;
|
|
||||||
|
|
||||||
// Wait for peripheral to indicate it's ready for next cycle
|
|
||||||
if (!parport_wait_peripheral(STS_WAIT, 0)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset data lines to high
|
|
||||||
KSOL = 0xFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set data lines back to inputs
|
|
||||||
KSOLGOEN = 0;
|
|
||||||
|
|
||||||
// Deassert nWRITE
|
|
||||||
KSIGDAT |= CTL_WRITE;
|
|
||||||
|
|
||||||
return i;
|
|
||||||
}
|
|
Reference in New Issue
Block a user