.. | .. |
---|
4 | 4 | #include <linux/io.h> |
---|
5 | 5 | #include <linux/of.h> |
---|
6 | 6 | #include <linux/of_address.h> |
---|
7 | | -#include <linux/slab.h> |
---|
8 | | -#include <linux/sys_soc.h> |
---|
9 | 7 | |
---|
10 | 8 | #include "hardware.h" |
---|
11 | 9 | #include "common.h" |
---|
.. | .. |
---|
71 | 69 | WARN_ON(!aips_base_addr); |
---|
72 | 70 | imx_set_aips(aips_base_addr); |
---|
73 | 71 | } |
---|
74 | | -} |
---|
75 | | - |
---|
76 | | -struct device * __init imx_soc_device_init(void) |
---|
77 | | -{ |
---|
78 | | - struct soc_device_attribute *soc_dev_attr; |
---|
79 | | - struct soc_device *soc_dev; |
---|
80 | | - struct device_node *root; |
---|
81 | | - const char *soc_id; |
---|
82 | | - int ret; |
---|
83 | | - |
---|
84 | | - soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL); |
---|
85 | | - if (!soc_dev_attr) |
---|
86 | | - return NULL; |
---|
87 | | - |
---|
88 | | - soc_dev_attr->family = "Freescale i.MX"; |
---|
89 | | - |
---|
90 | | - root = of_find_node_by_path("/"); |
---|
91 | | - ret = of_property_read_string(root, "model", &soc_dev_attr->machine); |
---|
92 | | - of_node_put(root); |
---|
93 | | - if (ret) |
---|
94 | | - goto free_soc; |
---|
95 | | - |
---|
96 | | - switch (__mxc_cpu_type) { |
---|
97 | | - case MXC_CPU_MX1: |
---|
98 | | - soc_id = "i.MX1"; |
---|
99 | | - break; |
---|
100 | | - case MXC_CPU_MX21: |
---|
101 | | - soc_id = "i.MX21"; |
---|
102 | | - break; |
---|
103 | | - case MXC_CPU_MX25: |
---|
104 | | - soc_id = "i.MX25"; |
---|
105 | | - break; |
---|
106 | | - case MXC_CPU_MX27: |
---|
107 | | - soc_id = "i.MX27"; |
---|
108 | | - break; |
---|
109 | | - case MXC_CPU_MX31: |
---|
110 | | - soc_id = "i.MX31"; |
---|
111 | | - break; |
---|
112 | | - case MXC_CPU_MX35: |
---|
113 | | - soc_id = "i.MX35"; |
---|
114 | | - break; |
---|
115 | | - case MXC_CPU_MX51: |
---|
116 | | - soc_id = "i.MX51"; |
---|
117 | | - break; |
---|
118 | | - case MXC_CPU_MX53: |
---|
119 | | - soc_id = "i.MX53"; |
---|
120 | | - break; |
---|
121 | | - case MXC_CPU_IMX6SL: |
---|
122 | | - soc_id = "i.MX6SL"; |
---|
123 | | - break; |
---|
124 | | - case MXC_CPU_IMX6DL: |
---|
125 | | - soc_id = "i.MX6DL"; |
---|
126 | | - break; |
---|
127 | | - case MXC_CPU_IMX6SX: |
---|
128 | | - soc_id = "i.MX6SX"; |
---|
129 | | - break; |
---|
130 | | - case MXC_CPU_IMX6Q: |
---|
131 | | - soc_id = "i.MX6Q"; |
---|
132 | | - break; |
---|
133 | | - case MXC_CPU_IMX6UL: |
---|
134 | | - soc_id = "i.MX6UL"; |
---|
135 | | - break; |
---|
136 | | - case MXC_CPU_IMX6ULL: |
---|
137 | | - soc_id = "i.MX6ULL"; |
---|
138 | | - break; |
---|
139 | | - case MXC_CPU_IMX6SLL: |
---|
140 | | - soc_id = "i.MX6SLL"; |
---|
141 | | - break; |
---|
142 | | - case MXC_CPU_IMX7D: |
---|
143 | | - soc_id = "i.MX7D"; |
---|
144 | | - break; |
---|
145 | | - default: |
---|
146 | | - soc_id = "Unknown"; |
---|
147 | | - } |
---|
148 | | - soc_dev_attr->soc_id = soc_id; |
---|
149 | | - |
---|
150 | | - soc_dev_attr->revision = kasprintf(GFP_KERNEL, "%d.%d", |
---|
151 | | - (imx_soc_revision >> 4) & 0xf, |
---|
152 | | - imx_soc_revision & 0xf); |
---|
153 | | - if (!soc_dev_attr->revision) |
---|
154 | | - goto free_soc; |
---|
155 | | - |
---|
156 | | - soc_dev = soc_device_register(soc_dev_attr); |
---|
157 | | - if (IS_ERR(soc_dev)) |
---|
158 | | - goto free_rev; |
---|
159 | | - |
---|
160 | | - return soc_device_to_device(soc_dev); |
---|
161 | | - |
---|
162 | | -free_rev: |
---|
163 | | - kfree(soc_dev_attr->revision); |
---|
164 | | -free_soc: |
---|
165 | | - kfree(soc_dev_attr); |
---|
166 | | - return NULL; |
---|
167 | 72 | } |
---|