| .. | .. |
|---|
| 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 | } |
|---|