drivers/pinctrl/ti/pinctrl-ti-iodelay.c
Source file repositories/reference/linux-study-clean/drivers/pinctrl/ti/pinctrl-ti-iodelay.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/pinctrl/ti/pinctrl-ti-iodelay.c- Extension
.c- Size
- 24664 bytes
- Lines
- 901
- Domain
- Driver Families
- Bucket
- drivers/pinctrl
- 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/err.hlinux/init.hlinux/io.hlinux/module.hlinux/of.hlinux/platform_device.hlinux/property.hlinux/regmap.hlinux/seq_file.hlinux/slab.hlinux/pinctrl/pinconf-generic.hlinux/pinctrl/pinconf.hlinux/pinctrl/pinctrl.h../core.h../devicetree.h
Detected Declarations
struct ti_iodelay_reg_datastruct ti_iodelay_reg_valuesstruct ti_iodelay_cfgstruct ti_iodelay_pingroupstruct ti_iodelay_devicefunction ti_iodelay_extractfunction ti_iodelay_compute_dpefunction ti_iodelay_pinconf_setfunction ti_iodelay_pinconf_deinit_devfunction ti_iodelay_pinconf_init_devfunction ti_iodelay_get_pingroupfunction ti_iodelay_offset_to_pinfunction ti_iodelay_node_iteratorfunction ti_iodelay_dt_node_to_mapfunction ti_iodelay_pinconf_group_getfunction ti_iodelay_pinconf_group_setfunction ti_iodelay_pin_to_offsetfunction ti_iodelay_pin_dbg_showfunction ti_iodelay_pinconf_group_dbg_showfunction ti_iodelay_alloc_pinsfunction ti_iodelay_probe
Annotated Snippet
struct ti_iodelay_reg_data {
u32 signature_mask;
u32 signature_value;
u32 lock_mask;
u32 lock_val;
u32 unlock_val;
u32 binary_data_coarse_mask;
u32 binary_data_fine_mask;
u32 reg_refclk_offset;
u32 refclk_period_mask;
u32 reg_coarse_offset;
u32 coarse_delay_count_mask;
u32 coarse_ref_count_mask;
u32 reg_fine_offset;
u32 fine_delay_count_mask;
u32 fine_ref_count_mask;
u32 reg_global_lock_offset;
u32 global_lock_mask;
u32 global_unlock_val;
u32 global_lock_val;
u32 reg_start_offset;
u32 reg_nr_per_pin;
const struct regmap_config *regmap_config;
};
/**
* struct ti_iodelay_reg_values - Computed io_reg configuration values (see TRM)
* @coarse_ref_count: Coarse reference count
* @coarse_delay_count: Coarse delay count
* @fine_ref_count: Fine reference count
* @fine_delay_count: Fine Delay count
* @ref_clk_period: Reference Clock period
* @cdpe: Coarse delay parameter
* @fdpe: Fine delay parameter
*/
struct ti_iodelay_reg_values {
u16 coarse_ref_count;
u16 coarse_delay_count;
u16 fine_ref_count;
u16 fine_delay_count;
u16 ref_clk_period;
u32 cdpe;
u32 fdpe;
};
/**
* struct ti_iodelay_cfg - Description of each configuration parameters
* @offset: Configuration register offset
* @a_delay: Agnostic Delay (in ps)
* @g_delay: Gnostic Delay (in ps)
*/
struct ti_iodelay_cfg {
u16 offset;
u16 a_delay;
u16 g_delay;
};
/**
* struct ti_iodelay_pingroup - Structure that describes one group
* @cfg: configuration array for the pin (from dt)
* @ncfg: number of configuration values allocated
* @config: pinconf "Config" - currently a dummy value
*/
struct ti_iodelay_pingroup {
struct ti_iodelay_cfg *cfg;
int ncfg;
unsigned long config;
};
/**
* struct ti_iodelay_device - Represents information for a iodelay instance
* @dev: Device pointer
* @phys_base: Physical address base of the iodelay device
* @reg_base: Virtual address base of the iodelay device
* @regmap: Regmap for this iodelay instance
* @pctl: Pinctrl device
* @desc: pinctrl descriptor for pctl
* @pa: pinctrl pin wise description
* @reg_data: Register definition data for the IODelay instance
* @reg_init_conf_values: Initial configuration values.
*/
Annotation
- Immediate include surface: `linux/err.h`, `linux/init.h`, `linux/io.h`, `linux/module.h`, `linux/of.h`, `linux/platform_device.h`, `linux/property.h`, `linux/regmap.h`.
- Detected declarations: `struct ti_iodelay_reg_data`, `struct ti_iodelay_reg_values`, `struct ti_iodelay_cfg`, `struct ti_iodelay_pingroup`, `struct ti_iodelay_device`, `function ti_iodelay_extract`, `function ti_iodelay_compute_dpe`, `function ti_iodelay_pinconf_set`, `function ti_iodelay_pinconf_deinit_dev`, `function ti_iodelay_pinconf_init_dev`.
- Atlas domain: Driver Families / drivers/pinctrl.
- 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.