drivers/pinctrl/freescale/pinctrl-scu.c
Source file repositories/reference/linux-study-clean/drivers/pinctrl/freescale/pinctrl-scu.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/pinctrl/freescale/pinctrl-scu.c- Extension
.c- Size
- 3955 bytes
- Lines
- 162
- Domain
- Driver Families
- Bucket
- drivers/pinctrl
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration 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.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/err.hlinux/firmware/imx/sci.hlinux/module.hlinux/of_address.hlinux/pinctrl/pinctrl.hlinux/platform_device.h../core.hpinctrl-imx.h
Detected Declarations
struct imx_sc_msg_req_pad_setstruct imx_sc_msg_req_pad_getstruct imx_sc_msg_resp_pad_getstruct imx_sc_msg_gpio_set_pad_wakeupenum pad_func_efunction imx_pinctrl_sc_ipc_initfunction imx_pinconf_get_scufunction imx_pinconf_set_scufunction imx_pinctrl_parse_pin_scuexport imx_pinctrl_sc_ipc_initexport imx_pinconf_get_scuexport imx_pinconf_set_scuexport imx_pinctrl_parse_pin_scu
Annotated Snippet
struct imx_sc_msg_req_pad_set {
struct imx_sc_rpc_msg hdr;
u32 val;
u16 pad;
} __packed __aligned(4);
struct imx_sc_msg_req_pad_get {
struct imx_sc_rpc_msg hdr;
u16 pad;
} __packed __aligned(4);
struct imx_sc_msg_resp_pad_get {
struct imx_sc_rpc_msg hdr;
u32 val;
} __packed;
struct imx_sc_msg_gpio_set_pad_wakeup {
struct imx_sc_rpc_msg hdr;
u16 pad;
u8 wakeup;
} __packed __aligned(4);
static struct imx_sc_ipc *pinctrl_ipc_handle;
int imx_pinctrl_sc_ipc_init(struct platform_device *pdev)
{
imx_scu_irq_group_enable(IMX_SC_IRQ_GROUP_WAKE,
IMX_SC_IRQ_PAD, true);
return imx_scu_get_handle(&pinctrl_ipc_handle);
}
EXPORT_SYMBOL_GPL(imx_pinctrl_sc_ipc_init);
int imx_pinconf_get_scu(struct pinctrl_dev *pctldev, unsigned pin_id,
unsigned long *config)
{
struct imx_sc_msg_req_pad_get msg;
struct imx_sc_msg_resp_pad_get *resp;
struct imx_sc_rpc_msg *hdr = &msg.hdr;
int ret;
hdr->ver = IMX_SC_RPC_VERSION;
hdr->svc = IMX_SC_RPC_SVC_PAD;
hdr->func = IMX_SC_PAD_FUNC_GET;
hdr->size = 2;
msg.pad = pin_id;
ret = imx_scu_call_rpc(pinctrl_ipc_handle, &msg, true);
if (ret)
return ret;
resp = (struct imx_sc_msg_resp_pad_get *)&msg;
*config = resp->val;
return 0;
}
EXPORT_SYMBOL_GPL(imx_pinconf_get_scu);
int imx_pinconf_set_scu(struct pinctrl_dev *pctldev, unsigned pin_id,
unsigned long *configs, unsigned num_configs)
{
struct imx_pinctrl *ipctl = pinctrl_dev_get_drvdata(pctldev);
struct imx_sc_msg_req_pad_set msg;
struct imx_sc_rpc_msg *hdr = &msg.hdr;
unsigned int mux = configs[0];
unsigned int conf;
unsigned int val;
int ret;
if (num_configs == 1) {
struct imx_sc_msg_gpio_set_pad_wakeup wmsg;
hdr = &wmsg.hdr;
hdr->ver = IMX_SC_RPC_VERSION;
hdr->svc = IMX_SC_RPC_SVC_PAD;
hdr->func = IMX_SC_PAD_FUNC_SET_WAKEUP;
hdr->size = 2;
wmsg.pad = pin_id;
wmsg.wakeup = *configs;
ret = imx_scu_call_rpc(pinctrl_ipc_handle, &wmsg, true);
dev_dbg(ipctl->dev, "wakeup pin_id: %d type: %ld\n",
pin_id, *configs);
return ret;
}
/*
* Set mux and conf together in one IPC call
*/
WARN_ON(num_configs != 2);
Annotation
- Immediate include surface: `linux/err.h`, `linux/firmware/imx/sci.h`, `linux/module.h`, `linux/of_address.h`, `linux/pinctrl/pinctrl.h`, `linux/platform_device.h`, `../core.h`, `pinctrl-imx.h`.
- Detected declarations: `struct imx_sc_msg_req_pad_set`, `struct imx_sc_msg_req_pad_get`, `struct imx_sc_msg_resp_pad_get`, `struct imx_sc_msg_gpio_set_pad_wakeup`, `enum pad_func_e`, `function imx_pinctrl_sc_ipc_init`, `function imx_pinconf_get_scu`, `function imx_pinconf_set_scu`, `function imx_pinctrl_parse_pin_scu`, `export imx_pinctrl_sc_ipc_init`.
- Atlas domain: Driver Families / drivers/pinctrl.
- Implementation status: integration 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.