linux/drivers/soc/zte/zx296718_pm_domains.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (C) 2017 ZTE Ltd.
   4 *
   5 * Author: Baoyou Xie <baoyou.xie@linaro.org>
   6 */
   7
   8#include <dt-bindings/soc/zte,pm_domains.h>
   9#include "zx2967_pm_domains.h"
  10
  11static u16 zx296718_offsets[REG_ARRAY_SIZE] = {
  12        [REG_CLKEN] = 0x18,
  13        [REG_ISOEN] = 0x1c,
  14        [REG_RSTEN] = 0x20,
  15        [REG_PWREN] = 0x24,
  16        [REG_ACK_SYNC] = 0x28,
  17};
  18
  19enum {
  20        PCU_DM_VOU = 0,
  21        PCU_DM_SAPPU,
  22        PCU_DM_VDE,
  23        PCU_DM_VCE,
  24        PCU_DM_HDE,
  25        PCU_DM_VIU,
  26        PCU_DM_USB20,
  27        PCU_DM_USB21,
  28        PCU_DM_USB30,
  29        PCU_DM_HSIC,
  30        PCU_DM_GMAC,
  31        PCU_DM_TS,
  32};
  33
  34static struct zx2967_pm_domain vou_domain = {
  35        .dm = {
  36                .name           = "vou_domain",
  37        },
  38        .bit = PCU_DM_VOU,
  39        .polarity = PWREN,
  40        .reg_offset = zx296718_offsets,
  41};
  42
  43static struct zx2967_pm_domain sappu_domain = {
  44        .dm = {
  45                .name           = "sappu_domain",
  46        },
  47        .bit = PCU_DM_SAPPU,
  48        .polarity = PWREN,
  49        .reg_offset = zx296718_offsets,
  50};
  51
  52static struct zx2967_pm_domain vde_domain = {
  53        .dm = {
  54                .name           = "vde_domain",
  55        },
  56        .bit = PCU_DM_VDE,
  57        .polarity = PWREN,
  58        .reg_offset = zx296718_offsets,
  59};
  60
  61static struct zx2967_pm_domain vce_domain = {
  62        .dm = {
  63                .name           = "vce_domain",
  64        },
  65        .bit = PCU_DM_VCE,
  66        .polarity = PWREN,
  67        .reg_offset = zx296718_offsets,
  68};
  69
  70static struct zx2967_pm_domain hde_domain = {
  71        .dm = {
  72                .name           = "hde_domain",
  73        },
  74        .bit = PCU_DM_HDE,
  75        .polarity = PWREN,
  76        .reg_offset = zx296718_offsets,
  77};
  78
  79static struct zx2967_pm_domain viu_domain = {
  80        .dm = {
  81                .name           = "viu_domain",
  82        },
  83        .bit = PCU_DM_VIU,
  84        .polarity = PWREN,
  85        .reg_offset = zx296718_offsets,
  86};
  87
  88static struct zx2967_pm_domain usb20_domain = {
  89        .dm = {
  90                .name           = "usb20_domain",
  91        },
  92        .bit = PCU_DM_USB20,
  93        .polarity = PWREN,
  94        .reg_offset = zx296718_offsets,
  95};
  96
  97static struct zx2967_pm_domain usb21_domain = {
  98        .dm = {
  99                .name           = "usb21_domain",
 100        },
 101        .bit = PCU_DM_USB21,
 102        .polarity = PWREN,
 103        .reg_offset = zx296718_offsets,
 104};
 105
 106static struct zx2967_pm_domain usb30_domain = {
 107        .dm = {
 108                .name           = "usb30_domain",
 109        },
 110        .bit = PCU_DM_USB30,
 111        .polarity = PWREN,
 112        .reg_offset = zx296718_offsets,
 113};
 114
 115static struct zx2967_pm_domain hsic_domain = {
 116        .dm = {
 117                .name           = "hsic_domain",
 118        },
 119        .bit = PCU_DM_HSIC,
 120        .polarity = PWREN,
 121        .reg_offset = zx296718_offsets,
 122};
 123
 124static struct zx2967_pm_domain gmac_domain = {
 125        .dm = {
 126                .name           = "gmac_domain",
 127        },
 128        .bit = PCU_DM_GMAC,
 129        .polarity = PWREN,
 130        .reg_offset = zx296718_offsets,
 131};
 132
 133static struct zx2967_pm_domain ts_domain = {
 134        .dm = {
 135                .name           = "ts_domain",
 136        },
 137        .bit = PCU_DM_TS,
 138        .polarity = PWREN,
 139        .reg_offset = zx296718_offsets,
 140};
 141
 142static struct generic_pm_domain *zx296718_pm_domains[] = {
 143        [DM_ZX296718_VOU] = &vou_domain.dm,
 144        [DM_ZX296718_SAPPU] = &sappu_domain.dm,
 145        [DM_ZX296718_VDE] = &vde_domain.dm,
 146        [DM_ZX296718_VCE] = &vce_domain.dm,
 147        [DM_ZX296718_HDE] = &hde_domain.dm,
 148        [DM_ZX296718_VIU] = &viu_domain.dm,
 149        [DM_ZX296718_USB20] = &usb20_domain.dm,
 150        [DM_ZX296718_USB21] = &usb21_domain.dm,
 151        [DM_ZX296718_USB30] = &usb30_domain.dm,
 152        [DM_ZX296718_HSIC] = &hsic_domain.dm,
 153        [DM_ZX296718_GMAC] = &gmac_domain.dm,
 154        [DM_ZX296718_TS] = &ts_domain.dm,
 155};
 156
 157static int zx296718_pd_probe(struct platform_device *pdev)
 158{
 159        return zx2967_pd_probe(pdev,
 160                          zx296718_pm_domains,
 161                          ARRAY_SIZE(zx296718_pm_domains));
 162}
 163
 164static const struct of_device_id zx296718_pm_domain_matches[] = {
 165        { .compatible = "zte,zx296718-pcu", },
 166        { },
 167};
 168
 169static struct platform_driver zx296718_pd_driver = {
 170        .driver = {
 171                .name = "zx296718-powerdomain",
 172                .of_match_table = zx296718_pm_domain_matches,
 173        },
 174        .probe = zx296718_pd_probe,
 175};
 176
 177static int __init zx296718_pd_init(void)
 178{
 179        return platform_driver_register(&zx296718_pd_driver);
 180}
 181subsys_initcall(zx296718_pd_init);
 182