aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/soc/renesas/r8a7795-sysc.c')
-rw-r--r--drivers/soc/renesas/r8a7795-sysc.c26
1 files changed, 24 insertions, 2 deletions
diff --git a/drivers/soc/renesas/r8a7795-sysc.c b/drivers/soc/renesas/r8a7795-sysc.c
index 5e7537c96f7b..7412666187b3 100644
--- a/drivers/soc/renesas/r8a7795-sysc.c
+++ b/drivers/soc/renesas/r8a7795-sysc.c
@@ -1,7 +1,7 @@
1/* 1/*
2 * Renesas R-Car H3 System Controller 2 * Renesas R-Car H3 System Controller
3 * 3 *
4 * Copyright (C) 2016 Glider bvba 4 * Copyright (C) 2016-2017 Glider bvba
5 * 5 *
6 * This program is free software; you can redistribute it and/or modify 6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by 7 * it under the terms of the GNU General Public License as published by
@@ -10,12 +10,13 @@
10 10
11#include <linux/bug.h> 11#include <linux/bug.h>
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <linux/sys_soc.h>
13 14
14#include <dt-bindings/power/r8a7795-sysc.h> 15#include <dt-bindings/power/r8a7795-sysc.h>
15 16
16#include "rcar-sysc.h" 17#include "rcar-sysc.h"
17 18
18static const struct rcar_sysc_area r8a7795_areas[] __initconst = { 19static struct rcar_sysc_area r8a7795_areas[] __initdata = {
19 { "always-on", 0, 0, R8A7795_PD_ALWAYS_ON, -1, PD_ALWAYS_ON }, 20 { "always-on", 0, 0, R8A7795_PD_ALWAYS_ON, -1, PD_ALWAYS_ON },
20 { "ca57-scu", 0x1c0, 0, R8A7795_PD_CA57_SCU, R8A7795_PD_ALWAYS_ON, 21 { "ca57-scu", 0x1c0, 0, R8A7795_PD_CA57_SCU, R8A7795_PD_ALWAYS_ON,
21 PD_SCU }, 22 PD_SCU },
@@ -40,6 +41,7 @@ static const struct rcar_sysc_area r8a7795_areas[] __initconst = {
40 { "a3vp", 0x340, 0, R8A7795_PD_A3VP, R8A7795_PD_ALWAYS_ON }, 41 { "a3vp", 0x340, 0, R8A7795_PD_A3VP, R8A7795_PD_ALWAYS_ON },
41 { "cr7", 0x240, 0, R8A7795_PD_CR7, R8A7795_PD_ALWAYS_ON }, 42 { "cr7", 0x240, 0, R8A7795_PD_CR7, R8A7795_PD_ALWAYS_ON },
42 { "a3vc", 0x380, 0, R8A7795_PD_A3VC, R8A7795_PD_ALWAYS_ON }, 43 { "a3vc", 0x380, 0, R8A7795_PD_A3VC, R8A7795_PD_ALWAYS_ON },
44 /* A2VC0 exists on ES1.x only */
43 { "a2vc0", 0x3c0, 0, R8A7795_PD_A2VC0, R8A7795_PD_A3VC }, 45 { "a2vc0", 0x3c0, 0, R8A7795_PD_A2VC0, R8A7795_PD_A3VC },
44 { "a2vc1", 0x3c0, 1, R8A7795_PD_A2VC1, R8A7795_PD_A3VC }, 46 { "a2vc1", 0x3c0, 1, R8A7795_PD_A2VC1, R8A7795_PD_A3VC },
45 { "3dg-a", 0x100, 0, R8A7795_PD_3DG_A, R8A7795_PD_ALWAYS_ON }, 47 { "3dg-a", 0x100, 0, R8A7795_PD_3DG_A, R8A7795_PD_ALWAYS_ON },
@@ -50,7 +52,27 @@ static const struct rcar_sysc_area r8a7795_areas[] __initconst = {
50 { "a3ir", 0x180, 0, R8A7795_PD_A3IR, R8A7795_PD_ALWAYS_ON }, 52 { "a3ir", 0x180, 0, R8A7795_PD_A3IR, R8A7795_PD_ALWAYS_ON },
51}; 53};
52 54
55
56 /*
57 * Fixups for R-Car H3 revisions after ES1.x
58 */
59
60static const struct soc_device_attribute r8a7795es1[] __initconst = {
61 { .soc_id = "r8a7795", .revision = "ES1.*" },
62 { /* sentinel */ }
63};
64
65static int __init r8a7795_sysc_init(void)
66{
67 if (!soc_device_match(r8a7795es1))
68 rcar_sysc_nullify(r8a7795_areas, ARRAY_SIZE(r8a7795_areas),
69 R8A7795_PD_A2VC0);
70
71 return 0;
72}
73
53const struct rcar_sysc_info r8a7795_sysc_info __initconst = { 74const struct rcar_sysc_info r8a7795_sysc_info __initconst = {
75 .init = r8a7795_sysc_init,
54 .areas = r8a7795_areas, 76 .areas = r8a7795_areas,
55 .num_areas = ARRAY_SIZE(r8a7795_areas), 77 .num_areas = ARRAY_SIZE(r8a7795_areas),
56}; 78};