|
7 | 7 | #include <linux/device.h>
|
8 | 8 | #include <linux/export.h>
|
9 | 9 | #include <linux/math64.h>
|
| 10 | +#include <linux/mfd/core.h> |
10 | 11 | #include <linux/mfd/zl3073x.h>
|
11 | 12 | #include <linux/module.h>
|
12 | 13 | #include <linux/netlink.h>
|
@@ -752,6 +753,14 @@ static void zl3073x_devlink_unregister(void *ptr)
|
752 | 753 | devlink_unregister(ptr);
|
753 | 754 | }
|
754 | 755 |
|
| 756 | +static const struct mfd_cell zl3073x_dpll_cells[] = { |
| 757 | + MFD_CELL_BASIC("zl3073x-dpll", NULL, NULL, 0, 0), |
| 758 | + MFD_CELL_BASIC("zl3073x-dpll", NULL, NULL, 0, 1), |
| 759 | + MFD_CELL_BASIC("zl3073x-dpll", NULL, NULL, 0, 2), |
| 760 | + MFD_CELL_BASIC("zl3073x-dpll", NULL, NULL, 0, 3), |
| 761 | + MFD_CELL_BASIC("zl3073x-dpll", NULL, NULL, 0, 4), |
| 762 | +}; |
| 763 | + |
755 | 764 | /**
|
756 | 765 | * zl3073x_dev_probe - initialize zl3073x device
|
757 | 766 | * @zldev: pointer to zl3073x device
|
@@ -823,6 +832,16 @@ int zl3073x_dev_probe(struct zl3073x_dev *zldev,
|
823 | 832 | if (rc)
|
824 | 833 | return rc;
|
825 | 834 |
|
| 835 | + /* Add DPLL sub-device cell for each DPLL channel */ |
| 836 | + rc = devm_mfd_add_devices(zldev->dev, PLATFORM_DEVID_AUTO, |
| 837 | + zl3073x_dpll_cells, chip_info->num_channels, |
| 838 | + NULL, 0, NULL); |
| 839 | + if (rc) { |
| 840 | + dev_err_probe(zldev->dev, rc, |
| 841 | + "Failed to add DPLL sub-device\n"); |
| 842 | + return rc; |
| 843 | + } |
| 844 | + |
826 | 845 | /* Register the device as devlink device */
|
827 | 846 | devlink = priv_to_devlink(zldev);
|
828 | 847 | devlink_register(devlink);
|
|
0 commit comments