18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2017 ZTE Ltd. 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Author: Baoyou Xie <baoyou.xie@linaro.org> 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <dt-bindings/soc/zte,pm_domains.h> 98c2ecf20Sopenharmony_ci#include "zx2967_pm_domains.h" 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistatic u16 zx296718_offsets[REG_ARRAY_SIZE] = { 128c2ecf20Sopenharmony_ci [REG_CLKEN] = 0x18, 138c2ecf20Sopenharmony_ci [REG_ISOEN] = 0x1c, 148c2ecf20Sopenharmony_ci [REG_RSTEN] = 0x20, 158c2ecf20Sopenharmony_ci [REG_PWREN] = 0x24, 168c2ecf20Sopenharmony_ci [REG_ACK_SYNC] = 0x28, 178c2ecf20Sopenharmony_ci}; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cienum { 208c2ecf20Sopenharmony_ci PCU_DM_VOU = 0, 218c2ecf20Sopenharmony_ci PCU_DM_SAPPU, 228c2ecf20Sopenharmony_ci PCU_DM_VDE, 238c2ecf20Sopenharmony_ci PCU_DM_VCE, 248c2ecf20Sopenharmony_ci PCU_DM_HDE, 258c2ecf20Sopenharmony_ci PCU_DM_VIU, 268c2ecf20Sopenharmony_ci PCU_DM_USB20, 278c2ecf20Sopenharmony_ci PCU_DM_USB21, 288c2ecf20Sopenharmony_ci PCU_DM_USB30, 298c2ecf20Sopenharmony_ci PCU_DM_HSIC, 308c2ecf20Sopenharmony_ci PCU_DM_GMAC, 318c2ecf20Sopenharmony_ci PCU_DM_TS, 328c2ecf20Sopenharmony_ci}; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain vou_domain = { 358c2ecf20Sopenharmony_ci .dm = { 368c2ecf20Sopenharmony_ci .name = "vou_domain", 378c2ecf20Sopenharmony_ci }, 388c2ecf20Sopenharmony_ci .bit = PCU_DM_VOU, 398c2ecf20Sopenharmony_ci .polarity = PWREN, 408c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 418c2ecf20Sopenharmony_ci}; 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain sappu_domain = { 448c2ecf20Sopenharmony_ci .dm = { 458c2ecf20Sopenharmony_ci .name = "sappu_domain", 468c2ecf20Sopenharmony_ci }, 478c2ecf20Sopenharmony_ci .bit = PCU_DM_SAPPU, 488c2ecf20Sopenharmony_ci .polarity = PWREN, 498c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 508c2ecf20Sopenharmony_ci}; 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain vde_domain = { 538c2ecf20Sopenharmony_ci .dm = { 548c2ecf20Sopenharmony_ci .name = "vde_domain", 558c2ecf20Sopenharmony_ci }, 568c2ecf20Sopenharmony_ci .bit = PCU_DM_VDE, 578c2ecf20Sopenharmony_ci .polarity = PWREN, 588c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 598c2ecf20Sopenharmony_ci}; 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain vce_domain = { 628c2ecf20Sopenharmony_ci .dm = { 638c2ecf20Sopenharmony_ci .name = "vce_domain", 648c2ecf20Sopenharmony_ci }, 658c2ecf20Sopenharmony_ci .bit = PCU_DM_VCE, 668c2ecf20Sopenharmony_ci .polarity = PWREN, 678c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 688c2ecf20Sopenharmony_ci}; 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain hde_domain = { 718c2ecf20Sopenharmony_ci .dm = { 728c2ecf20Sopenharmony_ci .name = "hde_domain", 738c2ecf20Sopenharmony_ci }, 748c2ecf20Sopenharmony_ci .bit = PCU_DM_HDE, 758c2ecf20Sopenharmony_ci .polarity = PWREN, 768c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 778c2ecf20Sopenharmony_ci}; 788c2ecf20Sopenharmony_ci 798c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain viu_domain = { 808c2ecf20Sopenharmony_ci .dm = { 818c2ecf20Sopenharmony_ci .name = "viu_domain", 828c2ecf20Sopenharmony_ci }, 838c2ecf20Sopenharmony_ci .bit = PCU_DM_VIU, 848c2ecf20Sopenharmony_ci .polarity = PWREN, 858c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 868c2ecf20Sopenharmony_ci}; 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain usb20_domain = { 898c2ecf20Sopenharmony_ci .dm = { 908c2ecf20Sopenharmony_ci .name = "usb20_domain", 918c2ecf20Sopenharmony_ci }, 928c2ecf20Sopenharmony_ci .bit = PCU_DM_USB20, 938c2ecf20Sopenharmony_ci .polarity = PWREN, 948c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 958c2ecf20Sopenharmony_ci}; 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain usb21_domain = { 988c2ecf20Sopenharmony_ci .dm = { 998c2ecf20Sopenharmony_ci .name = "usb21_domain", 1008c2ecf20Sopenharmony_ci }, 1018c2ecf20Sopenharmony_ci .bit = PCU_DM_USB21, 1028c2ecf20Sopenharmony_ci .polarity = PWREN, 1038c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 1048c2ecf20Sopenharmony_ci}; 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain usb30_domain = { 1078c2ecf20Sopenharmony_ci .dm = { 1088c2ecf20Sopenharmony_ci .name = "usb30_domain", 1098c2ecf20Sopenharmony_ci }, 1108c2ecf20Sopenharmony_ci .bit = PCU_DM_USB30, 1118c2ecf20Sopenharmony_ci .polarity = PWREN, 1128c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 1138c2ecf20Sopenharmony_ci}; 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain hsic_domain = { 1168c2ecf20Sopenharmony_ci .dm = { 1178c2ecf20Sopenharmony_ci .name = "hsic_domain", 1188c2ecf20Sopenharmony_ci }, 1198c2ecf20Sopenharmony_ci .bit = PCU_DM_HSIC, 1208c2ecf20Sopenharmony_ci .polarity = PWREN, 1218c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 1228c2ecf20Sopenharmony_ci}; 1238c2ecf20Sopenharmony_ci 1248c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain gmac_domain = { 1258c2ecf20Sopenharmony_ci .dm = { 1268c2ecf20Sopenharmony_ci .name = "gmac_domain", 1278c2ecf20Sopenharmony_ci }, 1288c2ecf20Sopenharmony_ci .bit = PCU_DM_GMAC, 1298c2ecf20Sopenharmony_ci .polarity = PWREN, 1308c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 1318c2ecf20Sopenharmony_ci}; 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_cistatic struct zx2967_pm_domain ts_domain = { 1348c2ecf20Sopenharmony_ci .dm = { 1358c2ecf20Sopenharmony_ci .name = "ts_domain", 1368c2ecf20Sopenharmony_ci }, 1378c2ecf20Sopenharmony_ci .bit = PCU_DM_TS, 1388c2ecf20Sopenharmony_ci .polarity = PWREN, 1398c2ecf20Sopenharmony_ci .reg_offset = zx296718_offsets, 1408c2ecf20Sopenharmony_ci}; 1418c2ecf20Sopenharmony_ci 1428c2ecf20Sopenharmony_cistatic struct generic_pm_domain *zx296718_pm_domains[] = { 1438c2ecf20Sopenharmony_ci [DM_ZX296718_VOU] = &vou_domain.dm, 1448c2ecf20Sopenharmony_ci [DM_ZX296718_SAPPU] = &sappu_domain.dm, 1458c2ecf20Sopenharmony_ci [DM_ZX296718_VDE] = &vde_domain.dm, 1468c2ecf20Sopenharmony_ci [DM_ZX296718_VCE] = &vce_domain.dm, 1478c2ecf20Sopenharmony_ci [DM_ZX296718_HDE] = &hde_domain.dm, 1488c2ecf20Sopenharmony_ci [DM_ZX296718_VIU] = &viu_domain.dm, 1498c2ecf20Sopenharmony_ci [DM_ZX296718_USB20] = &usb20_domain.dm, 1508c2ecf20Sopenharmony_ci [DM_ZX296718_USB21] = &usb21_domain.dm, 1518c2ecf20Sopenharmony_ci [DM_ZX296718_USB30] = &usb30_domain.dm, 1528c2ecf20Sopenharmony_ci [DM_ZX296718_HSIC] = &hsic_domain.dm, 1538c2ecf20Sopenharmony_ci [DM_ZX296718_GMAC] = &gmac_domain.dm, 1548c2ecf20Sopenharmony_ci [DM_ZX296718_TS] = &ts_domain.dm, 1558c2ecf20Sopenharmony_ci}; 1568c2ecf20Sopenharmony_ci 1578c2ecf20Sopenharmony_cistatic int zx296718_pd_probe(struct platform_device *pdev) 1588c2ecf20Sopenharmony_ci{ 1598c2ecf20Sopenharmony_ci return zx2967_pd_probe(pdev, 1608c2ecf20Sopenharmony_ci zx296718_pm_domains, 1618c2ecf20Sopenharmony_ci ARRAY_SIZE(zx296718_pm_domains)); 1628c2ecf20Sopenharmony_ci} 1638c2ecf20Sopenharmony_ci 1648c2ecf20Sopenharmony_cistatic const struct of_device_id zx296718_pm_domain_matches[] = { 1658c2ecf20Sopenharmony_ci { .compatible = "zte,zx296718-pcu", }, 1668c2ecf20Sopenharmony_ci { }, 1678c2ecf20Sopenharmony_ci}; 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_cistatic struct platform_driver zx296718_pd_driver = { 1708c2ecf20Sopenharmony_ci .driver = { 1718c2ecf20Sopenharmony_ci .name = "zx296718-powerdomain", 1728c2ecf20Sopenharmony_ci .of_match_table = zx296718_pm_domain_matches, 1738c2ecf20Sopenharmony_ci }, 1748c2ecf20Sopenharmony_ci .probe = zx296718_pd_probe, 1758c2ecf20Sopenharmony_ci}; 1768c2ecf20Sopenharmony_ci 1778c2ecf20Sopenharmony_cistatic int __init zx296718_pd_init(void) 1788c2ecf20Sopenharmony_ci{ 1798c2ecf20Sopenharmony_ci return platform_driver_register(&zx296718_pd_driver); 1808c2ecf20Sopenharmony_ci} 1818c2ecf20Sopenharmony_cisubsys_initcall(zx296718_pd_init); 182