[PATCH v32 0/5] Add ASPEED AST2600 I2C controller driver
Ryan Chen
ryan_chen at aspeedtech.com
Thu Jun 11 01:42:04 PDT 2026
Hello Andi, Wolfram,
Sorry to bother you, can this i2c patch series can be review?
Ryan
> Subject: [PATCH v32 0/5] Add ASPEED AST2600 I2C controller driver
>
> This series adds support for the AST2600 I2C controller “new register set”
> implementation.
>
> The AST2600 I2C controller introduces a revised register layout which
> separates controller and target functionality into distinct register blocks, and
> extends clock divider configuration and packet-based transfer support
> compared to the legacy mixed register layout used on earlier ASPEED SoCs.
>
> The current driver implementation for the AST2600 I2C peripheral is through
> the hardware's "compatibility mode", which exposes a register set that
> matches the previous generation hardware (AST2500 and earlier).
>
> Instead, add a driver that works in new-register-set mode, to allow the new
> features, and will provide support for future hardware that will not implement
> compatibility mode.
>
> In order to support the new mode, we need a DT binding change to reflect the
> reference to the global register set. Since the binding still represents the same
> (AST2600 SoC) physical hardware, we continue to use the existing compatible
> string of "aspeed,ast2600-i2c-bus".
>
> However: since we're changing semantics for an existing binding, we allow
> backwards compatibility by selecting on presence/absence of the newly-added
> properties, and fall back to the old driver (ie., in compatibility mode) when we
> detect a DT using the old binding spec.
>
> Specifically:
>
> - ast2600-i2c-bus nodes that provide the `aspeed,global-regs` property
> (present in the new binding and absent in the legacy binding) will be
> successfully probed by the new driver
>
> - ast2600-i2c-bus nodes without `aspeed,global-regs` continue to use the
> existing driver (in legacy register mode), ensuring that platforms
> with the current DTBs remain functional
>
> Signed-off-by: Ryan Chen <ryan_chen at aspeedtech.com>
> ---
> Changes in v32:
> - 1/5: add MAINTAINERS entry for aspeed,ast2600-i2c.yaml in the same
> patch that creates the file.
> - 3/5: add if/then conditional schema: when aspeed,global-regs is
> present, require reg to have at least two items. The new driver
> unconditionally maps resource index 1 (the buffer SRAM region); a DT
> with one reg entry and aspeed,global-regs passes schema validation but
> fails probe. The constraint makes the schema consistent with driver
> behaviour.
> - 4/5: address follow-on code review issues:
> - add MAINTAINERS entry for drivers/i2c/busses/i2c-ast2600.c.
> - fix interrupt storm when msgs is NULL: clear PKT_DONE in the IRQ
> handler; per the datasheet this auto-clears all associated status
> bits.
> - fix out-of-bounds: guard msgs_index against msgs_count before
> indexing msgs array in ast2600_i2c_controller_packet_irq().
> - fix use-after-free: WRITE_ONCE() null msgs before complete() in
> all IRQ completion paths so trailing IRQs bail out immediately.
> - fix race in timeout path: null msgs before re-enabling IER so a
> late IRQ cannot access the caller's freed message buffer.
> - fix 0-length SMBus block read hanging the bus: issue STOP via
> CONTROLLER_TRIGGER_LAST_STOP, set stop_pending, poll for
> NORMAL_STOP.
> - initialise clk_div_reg to I2CCG_DIV_CTRL and global_ctrl to 0
> to avoid uninitialized values if regmap_read() fails.
> - guard against clock-frequency = <0> in DT; default to 100 kHz
> to prevent divide-by-zero in ast2600_i2c_ac_timing_config().
> - remove AST2600_I2CM_BUS_RECOVER_FAIL from IER writes; bit 15 is
> Reserved in I2CM10 (IER) and only exists as a status bit in I2CM14.
> - 5/5: address follow-on code review issues:
> - fix target RX data loss in master-abort path: remove BUFF_CTRL
> zeroing that discarded pending target RX data stored in bits [29:24].
> - fix use-after-free in master-abort path: null msgs and re-enable
> IER before complete(), not after, preventing stale IRQ from touching
> the newly-installed msgs of the next transfer.
> - fix shared-buffer corruption on coalesced STOP+SLAVE_MATCH IRQ:
> restore the SLAVE_PENDING guard on target_active = false.
> SLAVE_PENDING
> (bit 29) is set when a new address-match is queued before the previous
> DMA receive completes; clearing target_active in that case allows the
> controller to overwrite the shared Tx/Rx buffer.
> - use READ_ONCE() for all process-context reads of target_active;
> the IRQ path writes it with WRITE_ONCE() and plain loads allow the
> compiler to cache a stale value across the IER-disable window.
> - Link to v31:
> https://lore.kernel.org/r/20260603-upstream_i2c-v31-0-ba7a02714f22@aspee
> dtech.com
> Changes in v31:
> - 1/5: clarify in the commit message that the second reg region is
> optional (minItems: 1), matching the schema change from v30.
> - 2/5: zero-initialise struct i2c_timings so the bus-frequency fallback
> correctly triggers when clock-frequency is absent in the DT.
> - 4/5: fix zero-length RX: ast2600_i2c_setup_buff_rx() now returns
> -EINVAL for xfer_len <= 0, propagated through the controller packet
> IRQ handler to abort the transfer instead of hanging until SW timeout.
> - 4/5: address follow-on code review issues:
> - Guard controller_packet_irq() against NULL msgs (post-timeout UAF).
> - Clamp HW-reported xfer_len via ast2600_i2c_clamp_len() in TX_ACK
> and RX_DONE to prevent out-of-bounds writes on HW length glitches.
> - Use regmap_update_bits() for I2CG_CTRL to avoid clobbering shared
> global bits across parallel bus probes (TOCTOU fix).
> - Fix SMBus block read with recv_len == 0: set controller_xfer_cnt =
> msg->len to satisfy the "msg done" check without an extra 1-byte RX.
> - Mirror the controller timeout sequence in recover_bus() timeout path
> (disable IER, synchronize_irq(), W1C ISR, reset master, restore IER).
> - Remove unused #include <linux/of_device.h>.
> - Remove dead adap.algo_data assignment in probe().
> - 5/5: address follow-on target-mode code review issues:
> - Clear target_active on any STOP (not just STOP without SLAVE_PENDING),
> fixing a deadlock under coalesced IRQ events.
> - Enable target IER in reg_target() rather than unconditionally in
> probe(), matching the disable in unreg_target().
> - Re-arm HW in SLAVE_PENDING|RX_DONE|WAIT_TX_DMA|STOP ISR case
> (missing CMD_STS write left bus SCL-stretched until INACTIVE_TO).
> - Default target ISR case: write TARGET_TRIGGER_CMD instead of
> silently breaking, preventing bus hang on unhandled states.
> - W1C-clear ADDR1/2/3_NAK bits in HW in target_irq() to prevent
> stale NAK bits from bouncing controller transfers with -EBUSY.
> - unreg_target(): write 0 to ADDR_CTRL instead of masking with
> ADDR1_MASK, which left ADDR1_ENABLE (BIT(7)) set after unregister.
> - Link to v30:
> https://lore.kernel.org/r/20260528-upstream_i2c-v30-0-5d4f9adc3530@aspee
> dtech.com
>
> Changes in v30:
> - 1/5: aspeed,ast2600-i2c.yaml: keep backward compatibility for
> existing in-tree AST2600 device trees (Sashiko AI review).
> - reg: add minItems: 1 so legacy single-reg DTs still validate.
> - retain bus-frequency as a deprecated property so DTs that still
> use it are not rejected by unevaluatedProperties: false.
> - 2/5: new patch "i2c: aspeed: Read clock-frequency via
> i2c_parse_fw_timings()". The legacy i2c-aspeed driver now reads
> the standard clock-frequency property first and falls back to
> bus-frequency, avoiding a silent 100 kHz downgrade when a DT
> follows the updated binding but still binds to the legacy
> driver (Sashiko AI review).
> - 4/5: address Sashiko AI code review feedback:
> - Use manual i2c_add_adapter() / i2c_del_adapter() instead of
> devm_i2c_add_adapter() so the adapter is torn down before the
> hardware is disabled in remove(); otherwise client .remove()
> callbacks can fail or hang after FUN_CTRL/IER have been cleared.
> - synchronize_irq() and clear pending IRQ status on the controller
> timeout path to avoid the ISR racing with the next transfer and
> touching freed msgs.
> - Use clamp_t() for AC TIMING divisor / scl_low / scl_high so
> extreme clock-frequency values cannot underflow into the unsigned
> domain and corrupt the AC TIMING register.
> - Derive the RX buffer offset from buf_size instead of hardcoding
> 0x10, since the dual-pool split is configurable.
> - Clamp i2c-scl-clk-low-timeout-us to the TTIMEOUT field's 5-bit
> range (max 31 * 1024us) and emit a dev_warn() instead of letting
> AST2600_I2CC_TTIMEOUT()'s mask silently truncate larger values.
> - Return -EBUSY (not -ENOMEM) for every ast2600_i2c_do_start()
> failure path in the controller packet IRQ handler (NORMAL_STOP,
> TX_ACK, and RX_DONE branches).
> - Advertise I2C_AQ_NO_ZERO_LEN_READ via i2c_adapter_quirks so the
> i2c-core rejects zero-byte reads before they reach the driver.
> The AST2600 packet engine cannot encode a zero-length RX command
> and would otherwise stall waiting for an RX_DONE that never
> arrives.
> - 5/5: address Sashiko AI code review feedback:
> - Force-stop path (target IRQ aborting an in-flight controller
> transfer): disable the controller IER and W1C-clear pending ISR
> before calling complete(), then restore the IER after the
> wake-up. Without the disable/clear sequence the controller IRQ
> handler can race with the target abort path and double-complete
> or touch freed msgs.
> - unreg_target() teardown ordering: disable the target IER first,
> then disable SLAVE_EN / clear ADDR_CTRL, synchronize_irq(), W1C
> pending ISR, and only then NULL i2c_bus->target and clear
> target_active. The old order left IER enabled while target was
> being cleared, allowing an in-flight handler to dereference a
> target pointer the caller had already freed.
> - reg_target() bring-up ordering: assign i2c_bus->target before
> enabling SLAVE_EN. Otherwise an IRQ that fires after SLAVE_EN
> is set but before the pointer is stored finds target == NULL,
> exits without clearing the ISR, and the unmasked event re-fires
> as an IRQ storm.
> - Use writel() instead of writeb() when staging a TX byte into
> the target buffer. The AST2600 buffer SRAM only supports 32-bit
> accesses; byte writes are silently dropped (or, on some
> revisions, raise a bus fault), so a SLAVE_READ_REQUESTED reply
> never reaches the master.
> - reg_target() rejects 10-bit client addresses with
> -EAFNOSUPPORT. AST2600_I2CS_ADDR1 is only a 7-bit field;
> without the check, the high bits of a 10-bit address overflow
> into the adjacent ADDR2 field and silently corrupt a second
> target slot.
> - Initialise the local `u8 value` to 0 in the target packet IRQ
> handler. Its address is passed to i2c_slave_event() for events
> such as I2C_SLAVE_STOP / I2C_SLAVE_READ_REQUESTED; a slave
> backend that reads the byte before writing would otherwise leak
> uninitialised kernel stack.
> - Link to v29:
> https://lore.kernel.org/r/20260415-upstream_i2c-v29-0-317c1a905ae1@aspee
> dtech.com
>
> Changes in v29:
> - 2/4: remove aspeed,enable-dma properties.
> - 3/4: update commit message remove transfer mode selection.
> - 3/4: remove sysfs file.
> - 3/4: remove define I2C_TARGET_MSG_BUF_SIZE and
> AST2600_I2C_DMA_SIZE.
> - 3/4: remove buf_index in struct ast2600_i2c_bus.
> - 3/4, 4/4: remove dma/byte mode, use buffer mode only.
> - 4/4: fix race between unreg_target and IRQ handler.
> - 4/4: move i2cs ier enable from ast2600_i2c_init to probe after master ier
> enable.
> - Link to v28:
> https://lore.kernel.org/r/20260330-upstream_i2c-v28-0-17bdae39c5cb@aspee
> dtech.com
>
> Changes in v28:
> - 2/4: update commit message correspond with aspeed,enable-dma.
> - 2/4: remove aspeed,transfer-mode and add aspeed,enable-dma property
> and description.
> - 2/4: Fix aspeed,enable-dma description to reflect hardware capability
> rather than software behavior.
> - 3/4: Separate xfer_mode_store into distinct parse and availability-check
> steps by introducing ast2600_i2c_xfer_mode_check().
> - 3/4: fix tx dma memcpy source point address.
> - 3/4: Use a temporary variable for
> devm_platform_get_and_ioremap_resource()
> to avoid storing an ERR_PTR in i2c_bus->buf_base; drop the redundant
> NULL assignment in the error path since i2c_bus is kzalloc()ed.
> - 3/4: Add ABI documentation file
> Documentation/ABI/testing/sysfs-driver-ast2600-i2c.
> - 4/4: fix typo condication -> condition.
> - 4/4: fix compile error, when disable CONFIG_I2C_SLAVE.
> - Link to v27:
> https://lore.kernel.org/r/20260324-upstream_i2c-v27-0-f19b511c8c28@aspee
> dtech.com
>
> Changes in v27:
> - 1/4 use aspeed,enable-dma instead aspeed,transfer-mode.
> - 2/4 remove aspeed,transfer-mode selection instad aspeed,transfer-mode
> - 2/4 add sysfs for xfer mode.
> - Link to v26:
> https://lore.kernel.org/r/20260309-upstream_i2c-v26-0-5fedcff8ffe8@aspeedt
> ech.com
>
> Changes in v26:
> - 1/4: binding reworks based on review feedback
> - Link to v25:
> https://lore.kernel.org/r/20260225-upstream_i2c-v25-0-9f4bdd954f3f@aspeed
> tech.com
>
> Changes in v25:
> - Use b4 to send series.
> - Rebase on v7.0-rc1.
> - Clarify cover letter and commit logs based on review feedback.
> - Remove the i2c-aspeed-core multiplexer infrastructure and
> implement driver selection via conditional -ENODEV handling
> in individual probe() functions.
> - 3/4: incorporate review feedback and refactor new driver
> - Link to v24:
> https://lore.kernel.org/r/20251118014034.820988-1-ryan_chen@aspeedtech.c
> om
>
> Changes in v24:
> - aspeed,ast2600-i2c.yaml
> - fix make dt_binding_check blank warning.
> - Link to v23:
> https://lore.kernel.org/all/20251117025040.3622984-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v23:
> - update typo patch (1/4) commit message.
> - aspeed,ast2600-i2c.yaml
> - update reg and description.
> - i2c-ast2600.c controller
> - replace ast2600_select_i2c_clock to ast2600_i2c_ac_timing_config.
> - i2c-ast2600.c target
> - I2C_TARGET_MSG_BUF_SIZE 256 to 4096
> - remove blank line.
> - refine Master comment description to controller
> - Link to v22:
> https://lore.kernel.org/all/20251112085649.1903631-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v22:
> - update patch (1/4) commit message add dts example reason.
> - aspeed,ast2600-i2c.yaml @patch (1/4)
> - rename ast2600-i2c.yaml to aspeed,ast2600-i2c.yaml.
> - update reg, clock-frequency description.
> - aspeed,ast2600-i2c.yaml @patch (2/4)
> - aspeed,transfer-mode, aspeed,transfer-mode add for ast2600.
> - i2c-aspeed-core.c,h @patch (3/4)
> - add i2c-aspeed-core allow both old and new device trees using the
> same compatible string "aspeed,ast2600-i2c-bus".
> - Link to v21:
> https://lore.kernel.org/all/20251027061240.3427875-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v21:
> - update patch (1/4) commit message
> - i2c-ast2600.c
> - move rst to local variable in ast2600_i2c_probe().
> - Link to v20:
> https://lore.kernel.org/all/20251021013548.2375190-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v20:
> - ast2600-i2c.yaml
> - fix warning at make dt_binding_check.
> - Link to v19:
> https://lore.kernel.org/all/20251020013200.1858325-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v19:
> - Split AST2600 binding into its own YAML file
> - Removed `aspeed,ast2600-i2c-bus` from `aspeed,i2c.yaml`
> - Added `aspeed,global-regs` and `aspeed,transfer-mode` to AST2600 binding
> - Link to v18:
> https://lore.kernel.org/all/20250820051832.3605405-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v18:
> - refine patch (1/3) commit message (reason for commit not list.)
> - i2c-ast2600.c
> - remove redundant reset_control_deassert in driver probe.
> - remove reset_control_assert(i2c_bus->rst) in driver remove.
> - Link to v17:
> https://lore.kernel.org/all/20250814084156.1650432-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v17:
> - move i2c new mode register and feature into driver commit message.
> - aspeed,i2c.yaml
> - remove multi-master properties.
> - use aspeed,transfer-mode properties for aspeed,enable-byte/enable-dma.
> -i2c-ast2600.c
> - rename dma_safe_buf to controller_dma_safe_buf.
> - fix ast2600_i2c_recover_bus return overflow warnings.
> - add ast2600_i2c_target_packet_buff_irq unhandle case.
> - add parameter "cmd" in ast2600_i2c_setup_dma_rx,
> ast2600_i2c_setup_buff_rx, ast2600_i2c_setup_byte_rx
> - use reset_control_deassert replace
> devm_reset_control_get_shared_deasserted.
> - useaspeed,transfer-mode properties for transfer mode setting.
> - change compatible = "aspeed,ast2600-i2cv2" to "aspeed,ast2600-i2c-bus".
> - Link to v16:
> https://lore.kernel.org/all/20250224055936.1804279-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v16:
> - aspeed,i2c.yaml: add aspeed,enable-byte properties for force byte mode.
> - i2c-ast2600.c
> - change include asm/unaligned.h to linux/unaligned.h.
> - add reset timeout councter when slave active timeout.
> - modify issue i2c_recovery_bus before slave re-enable.
> - add aspeed,enable-byte properties.
> - Link to v15:
> https://lore.kernel.org/all/20241007035235.2254138-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v15:
> - i2c-ast2600.c
> - add include unaligned.h
> - rename all master -> controller, slave -> target.
> - keep multi-master to align property.
> - remove no used element in ast2600_i2c_bus.
> - Link to v14:
> https://lore.kernel.org/all/20241002070213.1165263-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v14:
> - aspeed,i2c.yaml
> - v13 change people reviewed-by tag, v14 fixed to original people tag,
> modify to Reviewed-by: Krzysztof Kozlowski
> <krzysztof.kozlowski at linaro.org>
> - struct ast2600_i2c_bus layout optimal.
> - ast2600_select_i2c_clock refine.
> - ast2600_i2c_recover_bus overridden fix.
> - dma_mapping_error() returned error code shadowed modify.
> - buffer register in a 4-byte aligned simplified
> - remove smbus alert
> - Link to v13:
> https://lore.kernel.org/all/20240819092850.1590758-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v13:
> - separate i2c master and slave driver to be two patchs.
> - modify include header list, add bits.h include. remove of*.h
> - modify (((x) >> 24) & GENMASK(5, 0)) to (((x) & GENMASK(29, 24)) >> 24)
> - modify ast2600_select_i2c_clock function implement.
> - modify ast2600_i2c_recover_bus function u32 claim to
> u32 state = readl(i2c_bus->reg_base + AST2600_I2CC_STS_AND_BUFF);
> - Link to v12:
> https://lore.kernel.org/all/20230714074522.23827-1-ryan_chen@aspeedtech.c
> om/
>
> Changes in v12:
> - aspeed,i2c.yaml
> - add Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski at linaro.org>
> - i2c-ast2600.c
> - update include by alphabetical order
> - make just a one TAB and put the last two lines on the single one
> - remove no used timing_table structre
> - remove enum explicit assinment
> - rewritten to avoid this and using loop in ast2600_select_i2c_clock
> - use GENMASK for most 0xffff
> - remove too many parentheses
> - use str_read_write replace read write string
> - remove redundant blank line after ast2600_i2c_bus_of_table
> - fix wrong multi-line style of the comment
> - use macro for i2c standard speeds
> - remove useless noise dev_info
> - Link to v11:
> https://lore.kernel.org/all/20230430041712.3247998-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v11:
> - aspeed,i2c.yaml
> - no change, the same with v10.
> - i2c-ast2600.c
> - modify alert_enable from int -> boolean.
> - modify dbg string recovery -> recover.
> - remove no need to init 0.
> - remove new line after break.
> - remove unneeded empty line.
> - modify dma_alloc_coherent to dmam_alloc_coherent
> - modify probe nomem return dev_err_probe
> - modify i2c_add_adapter to devm_i2c_adapter
> - modify checkpatch: Alignment should match open parenthesis
> - modify checkpatch: braces {} should be used on all arms of this statement
> - modify checkpatch: Unbalanced braces around else statement
> - Link to v10:
> https://lore.kernel.org/all/20230415012848.1777768-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v10:
> - aspeed,i2c.yaml
> - move unevaluatedProperties after allOf.
> - remove extra one blank line.
> - i2c-ast2600.c
> - no change, the same with v8.
> - Link to v9:
> https://lore.kernel.org/all/20230405022825.333246-1-ryan_chen@aspeedtech.
> com/
>
> Changes in v9:
> - aspeed,i2c.yaml
> - backoff to v7.
> - no fix typo in maintainer's name and email. this would be another patch.
> - no remove address-cells, size-cells, this would be another patch.
> - use aspeed,enable-dma property instead of aspeed,xfer-mode selection.
> - fix allOf and else false properties for aspeed,ast2600-i2cv2.
> - i2c-ast2600.c
> - no change, the same with v8
> - Link to v8:
> https://lore.kernel.org/all/20230330073259.485606-1-ryan_chen@aspeedtech.
> com/
>
> Changes in v8:
> - aspeed,i2c.yaml
> - modify commit message.
> - Fix typo in maintainer's name and email.
> - remove address-cells, size-cells.
> - i2c-ast2600.c
> - move "i2c timeout counter" comment description before property_read.
> - remove redundant code "return ret" in probe end.
> - Link to v7:
> https://lore.kernel.org/all/20230327092524.3916389-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v7:
> - aspeed,i2c.yaml
> - Update ASPEED I2C maintainers email.
> - use aspeed,enable-dma property instead of aspeed,xfer-mode selection.
> - fix allOf and else false properties for aspeed,ast2600-i2cv2.
> - i2c-ast2600.c
> - remove aspeed,xfer-mode instead of aspeed,enable-dma mode. buffer
> mode
> is default.
> - remove aspeed,timeout instead of i2c-scl-clk-low-timeout-us for
> timeout setting.
> - Link to v6:
> https://lore.kernel.org/all/20230226031321.3126756-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v6:
> - remove aspeed,i2cv2.yaml, merge to aspeed,i2c.yaml -add support for
> i2cv2 properites.
> - i2c-ast2600.c
> - fix ast2600_i2c_remove ordering.
> - remove ast2600_i2c_probe goto labels, and add dev_err_probe -remove
> redundant deb_dbg debug message.
> - rename gr_regmap -> global_regs
> - Link to v5:
> https://lore.kernel.org/all/20230220061745.1973981-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v5:
> - remove ast2600-i2c-global.yaml, i2c-ast2600-global.c.
> - i2c-ast2600.c
> - remove legacy clock divide, all go for new clock divide.
> - remove duplicated read isr.
> - remove no used driver match
> - fix probe return for each labels return.
> - global use mfd driver, driver use phandle to regmap read/write.
> - rename aspeed,i2c-ast2600.yaml to aspeed,i2cv2.yaml -remove
> bus-frequency.
> - add required aspeed,gr
> - add timeout, byte-mode, buff-mode properites.
> - Link to v4:
> https://lore.kernel.org/all/20230201103359.1742140-1-ryan_chen@aspeedtec
> h.com/
>
> Changes in v4:
> - fix i2c-ast2600.c driver buffer mode use single buffer conflit in
> master slave mode both enable.
> - fix kmemleak issue when use dma mode.
> - fix typo aspeed,i2c-ast2600.yaml compatible is "aspeed,ast2600-i2c"
> - fix typo aspeed,i2c-ast2600.ymal to aspeed,i2c-ast2600.yaml
> - Link to v3:
> https://lore.kernel.org/all/20220516064900.30517-1-ryan_chen@aspeedtech.c
> om/
>
> Changes in v3:
> - fix i2c global clock divide default value.
> - remove i2c slave no used dev_dbg info.
> - Link to v2:
> https://lore.kernel.org/all/20220413101735.27678-1-ryan_chen@aspeedtech.c
> om/
>
> Changes in v2:
> - add i2c global ymal file commit.
> - rename file name from new to ast2600.
> aspeed-i2c-new-global.c -> i2c-ast2600-global.c
> aspeed-i2c-new-global.h -> i2c-ast2600-global.h
> i2c-new-aspeed.c -> i2c-ast2600.c
> - rename all driver function name to ast2600.
> - Link to v1:
> https://lore.kernel.org/all/20220323004009.943298-1-ryan_chen@aspeedtech.
> com/
>
> ---
> Ryan Chen (5):
> dt-bindings: i2c: Split AST2600 binding into a new YAML
> i2c: aspeed: Read clock-frequency via i2c_parse_fw_timings()
> dt-bindings: i2c: ast2600-i2c.yaml: Add global-regs properties
> i2c: ast2600: Add controller driver for AST2600 new register set
> i2c: ast2600: Add target mode support
>
> .../bindings/i2c/aspeed,ast2600-i2c.yaml | 88 ++
> .../devicetree/bindings/i2c/aspeed,i2c.yaml | 3 +-
> MAINTAINERS | 2 +
> drivers/i2c/busses/Makefile | 2 +-
> drivers/i2c/busses/i2c-aspeed.c | 24 +-
> drivers/i2c/busses/i2c-ast2600.c | 1290
> ++++++++++++++++++++
> 6 files changed, 1400 insertions(+), 9 deletions(-)
> ---
> base-commit: a293ec25d59dd96309058c70df5a4dd0f889a1e4
> change-id: 20260223-upstream_i2c-ebd07f89739c
>
> Best regards,
> --
> Ryan Chen <ryan_chen at aspeedtech.com>
More information about the linux-arm-kernel
mailing list