aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/Kconfig44
-rw-r--r--src/Makefile16
-rw-r--r--src/ar100/Kconfig2
-rw-r--r--src/ar100/Makefile6
-rw-r--r--src/atsam/Kconfig1
-rw-r--r--src/atsamd/Kconfig1
-rw-r--r--src/avr/Kconfig2
-rw-r--r--src/hc32f460/Kconfig1
-rw-r--r--src/i2ccmds.c15
-rw-r--r--src/linux/Kconfig5
-rw-r--r--src/lpc176x/Kconfig3
-rw-r--r--src/pru/Kconfig1
-rw-r--r--src/rp2040/Kconfig1
-rw-r--r--src/spicmds.c6
-rw-r--r--src/stm32/Kconfig2
-rw-r--r--test/configs/ar100.config3
-rw-r--r--test/configs/pru.config2
-rw-r--r--test/configs/stm32f031.config2
18 files changed, 77 insertions, 36 deletions
diff --git a/src/Kconfig b/src/Kconfig
index cc557fb7..915af295 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -87,6 +87,46 @@ config USB_SERIAL_NUMBER
string "USB serial number" if !USB_SERIAL_NUMBER_CHIPID
endmenu
+# Optional features that can be disabled (for devices with small flash sizes)
+config WANT_GPIO_BITBANGING
+ bool
+ depends on HAVE_GPIO
+ default y
+config WANT_DISPLAYS
+ bool
+ depends on HAVE_GPIO
+ default y
+config WANT_SENSORS
+ bool
+ depends on HAVE_GPIO_I2C || HAVE_GPIO_SPI
+ default y
+config WANT_SOFTWARE_I2C
+ bool
+ depends on HAVE_GPIO && HAVE_GPIO_I2C
+ default y
+config WANT_SOFTWARE_SPI
+ bool
+ depends on HAVE_GPIO && HAVE_GPIO_SPI
+ default y
+menu "Optional features (to reduce code size)"
+ depends on HAVE_LIMITED_CODE_SIZE
+config WANT_GPIO_BITBANGING
+ bool "Support GPIO \"bit-banging\" devices"
+ depends on HAVE_GPIO
+config WANT_DISPLAYS
+ bool "Support LCD devices"
+ depends on HAVE_GPIO
+config WANT_SENSORS
+ bool "Support external sensor devices"
+ depends on HAVE_GPIO_I2C || HAVE_GPIO_SPI
+config WANT_SOFTWARE_I2C
+ bool "Support software based I2C \"bit-banging\""
+ depends on HAVE_GPIO && HAVE_GPIO_I2C
+config WANT_SOFTWARE_SPI
+ bool "Support software based SPI \"bit-banging\""
+ depends on HAVE_GPIO && HAVE_GPIO_SPI
+endmenu
+
# Generic configuration options for CANbus
config CANSERIAL
bool
@@ -124,8 +164,6 @@ config HAVE_GPIO_I2C
bool
config HAVE_GPIO_HARD_PWM
bool
-config HAVE_GPIO_BITBANGING
- bool
config HAVE_STRICT_TIMING
bool
config HAVE_CHIPID
@@ -134,6 +172,8 @@ config HAVE_STEPPER_BOTH_EDGE
bool
config HAVE_BOOTLOADER_REQUEST
bool
+config HAVE_LIMITED_CODE_SIZE
+ bool
config INLINE_STEPPER_HACK
# Enables gcc to inline stepper_event() into the main timer irq handler
diff --git a/src/Makefile b/src/Makefile
index 7881622b..e8984554 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -4,11 +4,17 @@ src-y += sched.c command.c basecmd.c debugcmds.c
src-$(CONFIG_HAVE_GPIO) += initial_pins.c gpiocmds.c stepper.c endstop.c \
trsync.c
src-$(CONFIG_HAVE_GPIO_ADC) += adccmds.c
-src-$(CONFIG_HAVE_GPIO_SPI) += spicmds.c thermocouple.c
+src-$(CONFIG_HAVE_GPIO_SPI) += spicmds.c
src-$(CONFIG_HAVE_GPIO_SDIO) += sdiocmds.c
src-$(CONFIG_HAVE_GPIO_I2C) += i2ccmds.c
src-$(CONFIG_HAVE_GPIO_HARD_PWM) += pwmcmds.c
-bb-src-$(CONFIG_HAVE_GPIO_SPI) := spi_software.c sensor_adxl345.c sensor_angle.c
-bb-src-$(CONFIG_HAVE_GPIO_I2C) += i2c_software.c sensor_mpu9250.c
-src-$(CONFIG_HAVE_GPIO_BITBANGING) += $(bb-src-y) lcd_st7920.c lcd_hd44780.c \
- buttons.c tmcuart.c neopixel.c pulse_counter.c
+
+src-$(CONFIG_WANT_GPIO_BITBANGING) += buttons.c tmcuart.c neopixel.c \
+ pulse_counter.c
+src-$(CONFIG_WANT_DISPLAYS) += lcd_st7920.c lcd_hd44780.c
+src-$(CONFIG_WANT_SOFTWARE_SPI) += spi_software.c
+src-$(CONFIG_WANT_SOFTWARE_I2C) += i2c_software.c
+sensors-src-$(CONFIG_HAVE_GPIO_SPI) := thermocouple.c sensor_adxl345.c \
+ sensor_angle.c
+sensors-src-$(CONFIG_HAVE_GPIO_I2C) += sensor_mpu9250.c
+src-$(CONFIG_WANT_SENSORS) += $(sensors-src-y)
diff --git a/src/ar100/Kconfig b/src/ar100/Kconfig
index fc7743da..bd305083 100644
--- a/src/ar100/Kconfig
+++ b/src/ar100/Kconfig
@@ -7,8 +7,8 @@ config AR100_SELECT
default y
select HAVE_GPIO
select HAVE_GPIO_SPI
- select HAVE_GPIO_BITBANGING
select HAVE_STEPPER_BOTH_EDGE
+ select HAVE_LIMITED_CODE_SIZE
config BOARD_DIRECTORY
string
diff --git a/src/ar100/Makefile b/src/ar100/Makefile
index d1203a0e..29693fe2 100644
--- a/src/ar100/Makefile
+++ b/src/ar100/Makefile
@@ -19,12 +19,6 @@ src-y += ar100/main.c ar100/gpio.c ar100/serial.c
src-y += ar100/util.c ar100/timer.c
src-y += generic/crc16_ccitt.c generic/timer_irq.c
-# Remove files that are not needed to save space
-src-y := $(filter-out lcd_hd44780.c,$(src-y))
-src-y := $(filter-out lcd_st7920.c,$(src-y))
-src-y := $(filter-out sensor_angle.c,$(src-y))
-src-y := $(filter-out thermocouple.c,$(src-y))
-
OBJS_klipper.elf += $(OUT)lib/ar100/start.o
OBJS_klipper.elf += $(OUT)lib/ar100/runtime.o
diff --git a/src/atsam/Kconfig b/src/atsam/Kconfig
index aa802072..7fac95f5 100644
--- a/src/atsam/Kconfig
+++ b/src/atsam/Kconfig
@@ -10,7 +10,6 @@ config ATSAM_SELECT
select HAVE_GPIO_I2C
select HAVE_GPIO_SPI
select HAVE_GPIO_HARD_PWM if !MACH_SAME70
- select HAVE_GPIO_BITBANGING
select HAVE_STRICT_TIMING
select HAVE_CHIPID
select HAVE_STEPPER_BOTH_EDGE
diff --git a/src/atsamd/Kconfig b/src/atsamd/Kconfig
index e1062e53..19709ef3 100644
--- a/src/atsamd/Kconfig
+++ b/src/atsamd/Kconfig
@@ -10,7 +10,6 @@ config ATSAMD_SELECT
select HAVE_GPIO_I2C
select HAVE_GPIO_SPI
select HAVE_GPIO_HARD_PWM if MACH_SAMX2
- select HAVE_GPIO_BITBANGING
select HAVE_STRICT_TIMING
select HAVE_CHIPID
select HAVE_STEPPER_BOTH_EDGE
diff --git a/src/avr/Kconfig b/src/avr/Kconfig
index fd24852d..ac3ffa2a 100644
--- a/src/avr/Kconfig
+++ b/src/avr/Kconfig
@@ -10,8 +10,8 @@ config AVR_SELECT
select HAVE_GPIO_SPI
select HAVE_GPIO_I2C
select HAVE_GPIO_HARD_PWM
- select HAVE_GPIO_BITBANGING if !MACH_atmega168
select HAVE_STRICT_TIMING
+ select HAVE_LIMITED_CODE_SIZE if MACH_atmega168
config BOARD_DIRECTORY
string
diff --git a/src/hc32f460/Kconfig b/src/hc32f460/Kconfig
index e204bebf..9de4a7fc 100644
--- a/src/hc32f460/Kconfig
+++ b/src/hc32f460/Kconfig
@@ -7,7 +7,6 @@ config HC32F460_SELECT
default y
select HAVE_GPIO
select HAVE_GPIO_ADC
- select HAVE_GPIO_BITBANGING
select HAVE_STRICT_TIMING
select HAVE_GPIO_HARD_PWM
select HAVE_STEPPER_BOTH_EDGE
diff --git a/src/i2ccmds.c b/src/i2ccmds.c
index 099fe775..377a9537 100644
--- a/src/i2ccmds.c
+++ b/src/i2ccmds.c
@@ -5,6 +5,7 @@
// This file may be distributed under the terms of the GNU GPLv3 license.
#include <string.h> // memcpy
+#include "autoconf.h" // CONFIG_WANT_SOFTWARE_I2C
#include "basecmd.h" //oid_alloc
#include "command.h" //sendf
#include "sched.h" //DECL_COMMAND
@@ -56,7 +57,7 @@ command_i2c_write(uint32_t *args)
uint8_t data_len = args[1];
uint8_t *data = command_decode_ptr(args[2]);
uint_fast8_t flags = i2c->flags;
- if (flags & IF_SOFTWARE)
+ if (CONFIG_WANT_SOFTWARE_I2C && flags & IF_SOFTWARE)
i2c_software_write(i2c->i2c_software, data_len, data);
else
i2c_write(i2c->i2c_config, data_len, data);
@@ -73,12 +74,10 @@ command_i2c_read(uint32_t * args)
uint8_t data_len = args[3];
uint8_t data[data_len];
uint_fast8_t flags = i2c->flags;
- if (flags & IF_SOFTWARE)
- i2c_software_read(
- i2c->i2c_software, reg_len, reg, data_len, data);
+ if (CONFIG_WANT_SOFTWARE_I2C && flags & IF_SOFTWARE)
+ i2c_software_read(i2c->i2c_software, reg_len, reg, data_len, data);
else
- i2c_read(
- i2c->i2c_config, reg_len, reg, data_len, data);
+ i2c_read(i2c->i2c_config, reg_len, reg, data_len, data);
sendf("i2c_read_response oid=%c response=%*s", oid, data_len, data);
}
DECL_COMMAND(command_i2c_read, "i2c_read oid=%c reg=%*s read_len=%u");
@@ -98,7 +97,7 @@ command_i2c_modify_bits(uint32_t *args)
uint8_t receive_data[reg_len + data_len];
uint_fast8_t flags = i2c->flags;
memcpy(receive_data, reg, reg_len);
- if (flags & IF_SOFTWARE)
+ if (CONFIG_WANT_SOFTWARE_I2C && flags & IF_SOFTWARE)
i2c_software_read(
i2c->i2c_software, reg_len, reg, data_len, receive_data + reg_len);
else
@@ -108,7 +107,7 @@ command_i2c_modify_bits(uint32_t *args)
receive_data[reg_len + i] &= ~clear_set[i];
receive_data[reg_len + i] |= clear_set[data_len + i];
}
- if (flags & IF_SOFTWARE)
+ if (CONFIG_WANT_SOFTWARE_I2C && flags & IF_SOFTWARE)
i2c_software_write(i2c->i2c_software, reg_len + data_len, receive_data);
else
i2c_write(i2c->i2c_config, reg_len + data_len, receive_data);
diff --git a/src/linux/Kconfig b/src/linux/Kconfig
index edf575b0..661f3c30 100644
--- a/src/linux/Kconfig
+++ b/src/linux/Kconfig
@@ -6,12 +6,11 @@ if MACH_LINUX
config LINUX_SELECT
bool
default y
+ select HAVE_GPIO
select HAVE_GPIO_ADC
select HAVE_GPIO_SPI
- select HAVE_GPIO_HARD_PWM
select HAVE_GPIO_I2C
- select HAVE_GPIO_BITBANGING
- select HAVE_GPIO
+ select HAVE_GPIO_HARD_PWM
config BOARD_DIRECTORY
string
diff --git a/src/lpc176x/Kconfig b/src/lpc176x/Kconfig
index 79c3b300..390a081f 100644
--- a/src/lpc176x/Kconfig
+++ b/src/lpc176x/Kconfig
@@ -9,10 +9,9 @@ config LPC_SELECT
select HAVE_GPIO_ADC
select HAVE_GPIO_I2C
select HAVE_GPIO_SPI
- select HAVE_GPIO_BITBANGING
+ select HAVE_GPIO_HARD_PWM
select HAVE_STRICT_TIMING
select HAVE_CHIPID
- select HAVE_GPIO_HARD_PWM
select HAVE_STEPPER_BOTH_EDGE
select HAVE_BOOTLOADER_REQUEST
diff --git a/src/pru/Kconfig b/src/pru/Kconfig
index 8956e6bc..f2c2019a 100644
--- a/src/pru/Kconfig
+++ b/src/pru/Kconfig
@@ -8,6 +8,7 @@ config PRU_SELECT
select HAVE_GPIO
#select HAVE_GPIO_ADC
select HAVE_STRICT_TIMING
+ select HAVE_LIMITED_CODE_SIZE
config BOARD_DIRECTORY
string
diff --git a/src/rp2040/Kconfig b/src/rp2040/Kconfig
index ba6f00f8..59891649 100644
--- a/src/rp2040/Kconfig
+++ b/src/rp2040/Kconfig
@@ -9,7 +9,6 @@ config RP2040_SELECT
select HAVE_GPIO_ADC
select HAVE_GPIO_SPI
select HAVE_GPIO_I2C
- select HAVE_GPIO_BITBANGING
select HAVE_STRICT_TIMING
select HAVE_CHIPID
select HAVE_GPIO_HARD_PWM
diff --git a/src/spicmds.c b/src/spicmds.c
index 2c3f3ed6..8ea915d9 100644
--- a/src/spicmds.c
+++ b/src/spicmds.c
@@ -5,7 +5,7 @@
// This file may be distributed under the terms of the GNU GPLv3 license.
#include <string.h> // memcpy
-#include "autoconf.h" // CONFIG_HAVE_GPIO_BITBANGING
+#include "autoconf.h" // CONFIG_WANT_SOFTWARE_SPI
#include "board/gpio.h" // gpio_out_write
#include "basecmd.h" // oid_alloc
#include "command.h" // DECL_COMMAND
@@ -92,7 +92,7 @@ spidev_transfer(struct spidev_s *spi, uint8_t receive_data
// Not yet initialized
return;
- if (CONFIG_HAVE_GPIO_BITBANGING && flags & SF_SOFTWARE)
+ if (CONFIG_WANT_SOFTWARE_SPI && flags & SF_SOFTWARE)
spi_software_prepare(spi->spi_software);
else
spi_prepare(spi->spi_config);
@@ -100,7 +100,7 @@ spidev_transfer(struct spidev_s *spi, uint8_t receive_data
if (flags & SF_HAVE_PIN)
gpio_out_write(spi->pin, !!(flags & SF_CS_ACTIVE_HIGH));
- if (CONFIG_HAVE_GPIO_BITBANGING && flags & SF_SOFTWARE)
+ if (CONFIG_WANT_SOFTWARE_SPI && flags & SF_SOFTWARE)
spi_software_transfer(spi->spi_software, receive_data, data_len, data);
else
spi_transfer(spi->spi_config, receive_data, data_len, data);
diff --git a/src/stm32/Kconfig b/src/stm32/Kconfig
index 21e78f53..e3961176 100644
--- a/src/stm32/Kconfig
+++ b/src/stm32/Kconfig
@@ -11,11 +11,11 @@ config STM32_SELECT
select HAVE_GPIO_SPI if !MACH_STM32F031
select HAVE_GPIO_SDIO if MACH_STM32F4
select HAVE_GPIO_HARD_PWM if MACH_STM32F1 || MACH_STM32F4 || MACH_STM32F7 || MACH_STM32G0 || MACH_STM32H7
- select HAVE_GPIO_BITBANGING if !MACH_STM32F031
select HAVE_STRICT_TIMING
select HAVE_CHIPID
select HAVE_STEPPER_BOTH_EDGE
select HAVE_BOOTLOADER_REQUEST
+ select HAVE_LIMITED_CODE_SIZE if MACH_STM32F031 || MACH_STM32F042
config BOARD_DIRECTORY
string
diff --git a/test/configs/ar100.config b/test/configs/ar100.config
index 5abf7bf6..a717fe3d 100644
--- a/test/configs/ar100.config
+++ b/test/configs/ar100.config
@@ -1,2 +1,5 @@
# Base config file for the ar100 CPU
CONFIG_MACH_AR100=y
+CONFIG_WANT_DISPLAYS=n
+CONFIG_WANT_SOFTWARE_I2C=n
+CONFIG_WANT_SOFTWARE_SPI=n
diff --git a/test/configs/pru.config b/test/configs/pru.config
index eee1a467..265fbb53 100644
--- a/test/configs/pru.config
+++ b/test/configs/pru.config
@@ -1,2 +1,4 @@
# Base config file for the Beaglebone PRU
CONFIG_MACH_PRU=y
+CONFIG_WANT_GPIO_BITBANGING=n
+CONFIG_WANT_DISPLAYS=n
diff --git a/test/configs/stm32f031.config b/test/configs/stm32f031.config
index 719c6563..aa9c282b 100644
--- a/test/configs/stm32f031.config
+++ b/test/configs/stm32f031.config
@@ -1,3 +1,5 @@
# Base config file for STM32F031 boards
CONFIG_MACH_STM32=y
CONFIG_MACH_STM32F031=y
+CONFIG_WANT_GPIO_BITBANGING=n
+CONFIG_WANT_DISPLAYS=n