Lines Matching full:acpm
15 #include <linux/firmware/samsung/exynos-acpm-protocol.h>
31 #include "exynos-acpm.h"
32 #include "exynos-acpm-pmic.h"
89 * struct acpm_queue - exynos acpm queue.
120 * @acpm: pointer to driver private data.
142 struct acpm_info *acpm; member
162 * @chans: pointer to the ACPM channel parameters retrieved from SRAM.
163 * @dev: pointer to the exynos-acpm device.
189 * @achan: ACPM channel info.
212 * @achan: ACPM channel info.
294 * @achan: ACPM channel info.
302 struct device *dev = achan->acpm->dev; in acpm_dequeue_by_polling()
331 * @achan: ACPM channel info.
347 dev_err(achan->acpm->dev, "RX front can not keep up with TX front.\n"); in acpm_wait_for_queue_slots()
354 dev_err(achan->acpm->dev, "TX queue is full.\n"); in acpm_wait_for_queue_slots()
362 * @achan: ACPM channel info.
393 * @achan: ACPM channel info.
407 * @handle: pointer to the acpm handle.
414 struct acpm_info *acpm = handle_to_acpm_info(handle); in acpm_do_xfer() local
420 if (xfer->acpm_chan_id >= acpm->num_chans) in acpm_do_xfer()
423 achan = &acpm->chans[xfer->acpm_chan_id]; in acpm_do_xfer()
429 dev_err(achan->acpm->dev, "Interrupt mode not supported\n"); in acpm_do_xfer()
466 * @achan: ACPM channel info.
472 void __iomem *base = achan->acpm->sram_base; in acpm_chan_shmem_get_params()
489 dev_vdbg(achan->acpm->dev, "ID = %d poll = %d, mlen = %d, qlen = %d\n", in acpm_chan_shmem_get_params()
494 * acpm_achan_alloc_cmds() - allocate buffers for retrieving data from the ACPM
496 * @achan: ACPM channel info.
502 struct device *dev = achan->acpm->dev; in acpm_achan_alloc_cmds()
526 * @acpm: pointer to driver data.
528 static void acpm_free_mbox_chans(struct acpm_info *acpm) in acpm_free_mbox_chans() argument
532 for (i = 0; i < acpm->num_chans; i++) in acpm_free_mbox_chans()
533 if (!IS_ERR_OR_NULL(acpm->chans[i].chan)) in acpm_free_mbox_chans()
534 mbox_free_channel(acpm->chans[i].chan); in acpm_free_mbox_chans()
540 * @acpm: pointer to driver data.
544 static int acpm_channels_init(struct acpm_info *acpm) in acpm_channels_init() argument
546 struct acpm_shmem __iomem *shmem = acpm->shmem; in acpm_channels_init()
548 struct device *dev = acpm->dev; in acpm_channels_init()
551 acpm->num_chans = readl(&shmem->num_chans); in acpm_channels_init()
552 acpm->chans = devm_kcalloc(dev, acpm->num_chans, sizeof(*acpm->chans), in acpm_channels_init()
554 if (!acpm->chans) in acpm_channels_init()
557 chans_shmem = acpm->sram_base + readl(&shmem->chans); in acpm_channels_init()
559 for (i = 0; i < acpm->num_chans; i++) { in acpm_channels_init()
561 struct acpm_chan *achan = &acpm->chans[i]; in acpm_channels_init()
564 achan->acpm = acpm; in acpm_channels_init()
579 acpm_free_mbox_chans(acpm); in acpm_channels_init()
589 * @acpm: pointer to the driver data.
591 static void acpm_setup_ops(struct acpm_info *acpm) in acpm_setup_ops() argument
593 struct acpm_pmic_ops *pmic_ops = &acpm->handle.ops.pmic_ops; in acpm_setup_ops()
607 struct acpm_info *acpm; in acpm_probe() local
612 acpm = devm_kzalloc(dev, sizeof(*acpm), GFP_KERNEL); in acpm_probe()
613 if (!acpm) in acpm_probe()
624 acpm->sram_base = devm_ioremap(dev, res.start, size); in acpm_probe()
625 if (!acpm->sram_base) in acpm_probe()
634 acpm->shmem = acpm->sram_base + match_data->initdata_base; in acpm_probe()
635 acpm->dev = dev; in acpm_probe()
637 ret = acpm_channels_init(acpm); in acpm_probe()
641 acpm_setup_ops(acpm); in acpm_probe()
643 platform_set_drvdata(pdev, acpm); in acpm_probe()
654 struct acpm_info *acpm = handle_to_acpm_info(handle); in acpm_handle_put() local
655 struct device *dev = acpm->dev; in acpm_handle_put()
673 * acpm_get_by_node() - get the ACPM handle using node pointer.
674 * @dev: device pointer requesting ACPM handle.
675 * @np: ACPM device tree node.
684 struct acpm_info *acpm; in acpm_get_by_node() local
690 acpm = platform_get_drvdata(pdev); in acpm_get_by_node()
691 if (!acpm) { in acpm_get_by_node()
711 return &acpm->handle; in acpm_get_by_node()
716 * @dev: device pointer requesting ACPM handle.
717 * @np: ACPM device tree node.
748 .compatible = "google,gs101-acpm-ipc",
758 .name = "exynos-acpm-protocol",
765 MODULE_DESCRIPTION("Samsung Exynos ACPM mailbox protocol driver");