diff options
author | Florian Didron <fdidron@users.noreply.github.com> | 2020-01-21 13:50:53 +0900 |
---|---|---|
committer | Florian Didron <fdidron@users.noreply.github.com> | 2020-02-26 10:15:12 +0900 |
commit | d3f23ecfbcd2a69714422ab68f346e51fcc2a6de (patch) | |
tree | c5c07493f4175738f623ca23f618682cc04b779a /drivers/eeprom/eeprom_i2c.h | |
parent | 0c676d6e471e3c1eabf3158fab5cb4645abd29ee (diff) |
Apollo (#246)
* Add External EEPROM driver
* Add keyboard
* Fix i2c address
* Revert i2c address for eeprom
* Reduce page size for 24LC128
* Disable External EEPROM for now
* Fix up RGB Matrix and layout
* Cleanup moonlander.c file
* Fix led array center
* Disable External EEPROM for now
* Cleanup and optimization of files
* Add and clean up mappings
* Enable "ZSA" defaults for Moonlander
* Update matrix to use i2c_readReg
* Disable render limit for rgb matrix
* Update pin controls to GPIO Commands
* Add proper changed mechanism
* Additional cleanup
* Run clang-format on moonlander files
* Align keymap
* Limit brightness for rgb matrix to 200
To prevent power draw issues
* Add USB-IF VID/PID
* Add RGB Matrix Sleep code
* Enable External EEPROM on Moonlander
* Port over Ergodox Expander error handling and retry code
* Re-init RGB Matrix drivers when half is reconnected
* Add threaded LED display
* Correct layer state settings after moonlander_led_task
* Update Moonlander to include Oryx configuration
* Add webUSB Stuff
* Update default keymap
* fix: merge conflict
Co-authored-by: Drashna Jaelre <drashna@live.com>
Diffstat (limited to 'drivers/eeprom/eeprom_i2c.h')
-rw-r--r-- | drivers/eeprom/eeprom_i2c.h | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/drivers/eeprom/eeprom_i2c.h b/drivers/eeprom/eeprom_i2c.h new file mode 100644 index 0000000000..51bce825b0 --- /dev/null +++ b/drivers/eeprom/eeprom_i2c.h @@ -0,0 +1,115 @@ +/* Copyright 2019 Nick Brassel (tzarc) + * + * 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 + +/* + Default device configurations: + + For the Sparkfun Qwiic I2C EEPROM module: https://www.sparkfun.com/products/14764 + #define EEPROM_I2C_CAT24C512 // (part number 24512A) + #define EEPROM_I2C_RM24C512C // (part number 24512C) + + For the Sparkfun I2C EEPROM chip: https://www.sparkfun.com/products/525 + #define EEPROM_I2C_24LC256 + + For the Adafruit I2C FRAM chip: https://www.adafruit.com/product/1895 + #define EEPROM_I2C_MB85RC256V +*/ +#if defined(EEPROM_I2C_CAT24C512) +# define EXTERNAL_EEPROM_BYTE_COUNT 65536 +# define EXTERNAL_EEPROM_PAGE_SIZE 128 +# define EXTERNAL_EEPROM_ADDRESS_SIZE 2 +# define EXTERNAL_EEPROM_WRITE_TIME 5 +#elif defined(EEPROM_I2C_RM24C512C) +# define EXTERNAL_EEPROM_BYTE_COUNT 65536 +# define EXTERNAL_EEPROM_PAGE_SIZE 128 +# define EXTERNAL_EEPROM_ADDRESS_SIZE 2 +# define EXTERNAL_EEPROM_WRITE_TIME 3 +#elif defined(EEPROM_I2C_24LC256) +# define EXTERNAL_EEPROM_BYTE_COUNT 32768 +# define EXTERNAL_EEPROM_PAGE_SIZE 64 +# define EXTERNAL_EEPROM_ADDRESS_SIZE 2 +# define EXTERNAL_EEPROM_WRITE_TIME 5 +#elif defined(EEPROM_I2C_24LC128) +# define EXTERNAL_EEPROM_BYTE_COUNT 16384 +# define EXTERNAL_EEPROM_PAGE_SIZE 64 +# define EXTERNAL_EEPROM_ADDRESS_SIZE 2 +# define EXTERNAL_EEPROM_WRITE_TIME 5 +#elif defined(EEPROM_I2C_MB85RC256V) +# define EXTERNAL_EEPROM_BYTE_COUNT 32768 +# define EXTERNAL_EEPROM_PAGE_SIZE 128 +# define EXTERNAL_EEPROM_ADDRESS_SIZE 2 +# define EXTERNAL_EEPROM_WRITE_TIME 0 +#endif + +/* + The base I2C address of the EEPROM. + This needs to be shifted up by 1, to match i2c_master requirements. +*/ +#ifndef EXTERNAL_EEPROM_I2C_BASE_ADDRESS +# define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10100000 +#endif + +/* + The calculated I2C address based on the input memory location. + + For EEPROM chips that embed part of the memory location in the I2C address + such as AT24M02 you can use something similar to the following (ensuring the + result is shifted by left by 1): + + #define EXTERNAL_EEPROM_I2C_ADDRESS(loc) \ + (EXTERNAL_EEPROM_I2C_BASE_ADDRESS | ((((loc) >> 16) & 0x07) << 1)) + +*/ +#ifndef EXTERNAL_EEPROM_I2C_ADDRESS +# define EXTERNAL_EEPROM_I2C_ADDRESS(loc) (EXTERNAL_EEPROM_I2C_BASE_ADDRESS) +#endif + +/* + The total size of the EEPROM, in bytes. The EEPROM datasheet will usually + specify this value in kbits, and will require conversion to bytes. +*/ +#ifndef EXTERNAL_EEPROM_BYTE_COUNT +# define EXTERNAL_EEPROM_BYTE_COUNT 8192 +#endif + +/* + The page size in bytes of the EEPROM, as specified in the datasheet. +*/ +#ifndef EXTERNAL_EEPROM_PAGE_SIZE +# define EXTERNAL_EEPROM_PAGE_SIZE 32 +#endif + +/* + The address size in bytes of the EEPROM. For EEPROMs with <=256 bytes, this + will likely be 1. For EEPROMs >256 and <=65536, this will be 2. For EEPROMs + >65536, this will likely need to be 2 with the modified variant of + EXTERNAL_EEPROM_I2C_ADDRESS above. + + As expected, consult the datasheet for specifics of your EEPROM. +*/ +#ifndef EXTERNAL_EEPROM_ADDRESS_SIZE +# define EXTERNAL_EEPROM_ADDRESS_SIZE 2 +#endif + +/* + The write cycle time of the EEPROM in milliseconds, as specified in the + datasheet. +*/ +#ifndef EXTERNAL_EEPROM_WRITE_TIME +# define EXTERNAL_EEPROM_WRITE_TIME 5 +#endif |