drivers/mfd/mt6360-core.c
Source file repositories/reference/linux-study-clean/drivers/mfd/mt6360-core.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/mfd/mt6360-core.c- Extension
.c- Size
- 19467 bytes
- Lines
- 628
- Domain
- Driver Families
- Bucket
- drivers/mfd
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/cleanup.hlinux/crc8.hlinux/i2c.hlinux/init.hlinux/interrupt.hlinux/kernel.hlinux/mfd/core.hlinux/module.hlinux/regmap.hlinux/slab.h
Detected Declarations
struct mt6360_ddatafunction mt6360_check_vendor_infofunction mt6360_xlate_pmicldo_addrfunction mt6360_regmap_readfunction mt6360_regmap_writefunction mt6360_is_readwrite_regfunction mt6360_probefunction mt6360_suspendfunction mt6360_resume
Annotated Snippet
struct mt6360_ddata {
struct i2c_client *i2c[MT6360_SLAVE_MAX];
struct device *dev;
struct regmap *regmap;
struct regmap_irq_chip_data *irq_data;
unsigned int chip_rev;
u8 crc8_tbl[CRC8_TABLE_SIZE];
};
#define MT6360_TCPC_SLAVEID 0x4E
#define MT6360_PMIC_SLAVEID 0x1A
#define MT6360_LDO_SLAVEID 0x64
#define MT6360_PMU_SLAVEID 0x34
#define MT6360_REG_TCPCSTART 0x00
#define MT6360_REG_TCPCEND 0xFF
#define MT6360_REG_PMICSTART 0x100
#define MT6360_REG_PMICEND 0x13B
#define MT6360_REG_LDOSTART 0x200
#define MT6360_REG_LDOEND 0x21C
#define MT6360_REG_PMUSTART 0x300
#define MT6360_PMU_DEV_INFO 0x300
#define MT6360_PMU_CHG_IRQ1 0x3D0
#define MT6360_PMU_CHG_MASK1 0x3F0
#define MT6360_REG_PMUEND 0x3FF
#define MT6360_PMU_IRQ_REGNUM 16
#define CHIP_VEN_MASK 0xF0
#define CHIP_VEN_MT6360 0x50
#define CHIP_REV_MASK 0x0F
#define MT6360_ADDRESS_MASK 0x3F
#define MT6360_DATA_SIZE_1_BYTE 0x00
#define MT6360_DATA_SIZE_2_BYTES 0x40
#define MT6360_DATA_SIZE_3_BYTES 0x80
#define MT6360_DATA_SIZE_4_BYTES 0xC0
#define MT6360_CRC8_POLYNOMIAL 0x7
#define MT6360_CRC_I2C_ADDR_SIZE 1
#define MT6360_CRC_REG_ADDR_SIZE 1
/* prealloca read size = i2c device addr + i2c reg addr + val ... + crc8 */
#define MT6360_ALLOC_READ_SIZE(_size) (_size + 3)
/* prealloca write size = i2c device addr + i2c reg addr + val ... + crc8 + dummy byte */
#define MT6360_ALLOC_WRITE_SIZE(_size) (_size + 4)
#define MT6360_CRC_PREDATA_OFFSET (MT6360_CRC_I2C_ADDR_SIZE + MT6360_CRC_REG_ADDR_SIZE)
#define MT6360_CRC_CRC8_SIZE 1
#define MT6360_CRC_DUMMY_BYTE_SIZE 1
#define MT6360_REGMAP_REG_BYTE_SIZE 2
#define I2C_ADDR_XLATE_8BIT(_addr, _rw) (((_addr & 0x7F) << 1) + _rw)
/* reg 0 -> 0 ~ 7 */
#define MT6360_CHG_TREG_EVT 4
#define MT6360_CHG_AICR_EVT 5
#define MT6360_CHG_MIVR_EVT 6
#define MT6360_PWR_RDY_EVT 7
/* REG 1 -> 8 ~ 15 */
#define MT6360_CHG_BATSYSUV_EVT 9
#define MT6360_FLED_CHG_VINOVP_EVT 11
#define MT6360_CHG_VSYSUV_EVT 12
#define MT6360_CHG_VSYSOV_EVT 13
#define MT6360_CHG_VBATOV_EVT 14
#define MT6360_CHG_VBUSOV_EVT 15
/* REG 2 -> 16 ~ 23 */
/* REG 3 -> 24 ~ 31 */
#define MT6360_WD_PMU_DET 25
#define MT6360_WD_PMU_DONE 26
#define MT6360_CHG_TMRI 27
#define MT6360_CHG_ADPBADI 29
#define MT6360_CHG_RVPI 30
#define MT6360_OTPI 31
/* REG 4 -> 32 ~ 39 */
#define MT6360_CHG_AICCMEASL 32
#define MT6360_CHGDET_DONEI 34
#define MT6360_WDTMRI 35
#define MT6360_SSFINISHI 36
#define MT6360_CHG_RECHGI 37
#define MT6360_CHG_TERMI 38
#define MT6360_CHG_IEOCI 39
/* REG 5 -> 40 ~ 47 */
#define MT6360_PUMPX_DONEI 40
#define MT6360_BAT_OVP_ADC_EVT 41
#define MT6360_TYPEC_OTP_EVT 42
#define MT6360_ADC_WAKEUP_EVT 43
#define MT6360_ADC_DONEI 44
#define MT6360_BST_BATUVI 45
#define MT6360_BST_VBUSOVI 46
#define MT6360_BST_OLPI 47
/* REG 6 -> 48 ~ 55 */
Annotation
- Immediate include surface: `linux/cleanup.h`, `linux/crc8.h`, `linux/i2c.h`, `linux/init.h`, `linux/interrupt.h`, `linux/kernel.h`, `linux/mfd/core.h`, `linux/module.h`.
- Detected declarations: `struct mt6360_ddata`, `function mt6360_check_vendor_info`, `function mt6360_xlate_pmicldo_addr`, `function mt6360_regmap_read`, `function mt6360_regmap_write`, `function mt6360_is_readwrite_reg`, `function mt6360_probe`, `function mt6360_suspend`, `function mt6360_resume`.
- Atlas domain: Driver Families / drivers/mfd.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.