tpm_atmel.c (90dda520c1962d55a0e1d2571deed0d75fd6d6f1) tpm_atmel.c (e0dd03caf20d040a0a86b6bd74028ec9bda545f5)
1/*
2 * Copyright (C) 2004 IBM Corporation
3 *
4 * Authors:
5 * Leendert van Doorn <leendert@watson.ibm.com>
6 * Dave Safford <safford@watson.ibm.com>
7 * Reiner Sailer <sailer@watson.ibm.com>
8 * Kylene Hall <kjhall@us.ibm.com>

--- 126 unchanged lines hidden (view full) ---

135 &dev_attr_pcrs.attr,
136 &dev_attr_caps.attr,
137 &dev_attr_cancel.attr,
138 NULL,
139};
140
141static struct attribute_group atmel_attr_grp = { .attrs = atmel_attrs };
142
1/*
2 * Copyright (C) 2004 IBM Corporation
3 *
4 * Authors:
5 * Leendert van Doorn <leendert@watson.ibm.com>
6 * Dave Safford <safford@watson.ibm.com>
7 * Reiner Sailer <sailer@watson.ibm.com>
8 * Kylene Hall <kjhall@us.ibm.com>

--- 126 unchanged lines hidden (view full) ---

135 &dev_attr_pcrs.attr,
136 &dev_attr_caps.attr,
137 &dev_attr_cancel.attr,
138 NULL,
139};
140
141static struct attribute_group atmel_attr_grp = { .attrs = atmel_attrs };
142
143static struct tpm_vendor_specific tpm_atmel = {
143static const struct tpm_vendor_specific tpm_atmel = {
144 .recv = tpm_atml_recv,
145 .send = tpm_atml_send,
146 .cancel = tpm_atml_cancel,
147 .status = tpm_atml_status,
148 .req_complete_mask = ATML_STATUS_BUSY | ATML_STATUS_DATA_AVAIL,
149 .req_complete_val = ATML_STATUS_DATA_AVAIL,
150 .req_canceled = ATML_STATUS_READY,
151 .attr_group = &atmel_attr_grp,

--- 22 unchanged lines hidden (view full) ---

174 .owner = THIS_MODULE,
175 .suspend = tpm_pm_suspend,
176 .resume = tpm_pm_resume,
177};
178
179static int __init init_atmel(void)
180{
181 int rc = 0;
144 .recv = tpm_atml_recv,
145 .send = tpm_atml_send,
146 .cancel = tpm_atml_cancel,
147 .status = tpm_atml_status,
148 .req_complete_mask = ATML_STATUS_BUSY | ATML_STATUS_DATA_AVAIL,
149 .req_complete_val = ATML_STATUS_DATA_AVAIL,
150 .req_canceled = ATML_STATUS_READY,
151 .attr_group = &atmel_attr_grp,

--- 22 unchanged lines hidden (view full) ---

174 .owner = THIS_MODULE,
175 .suspend = tpm_pm_suspend,
176 .resume = tpm_pm_resume,
177};
178
179static int __init init_atmel(void)
180{
181 int rc = 0;
182 void __iomem *iobase = NULL;
183 int have_region, region_size;
184 unsigned long base;
185 struct tpm_chip *chip;
182
183 driver_register(&atml_drv);
184
186
187 driver_register(&atml_drv);
188
185 if ((tpm_atmel.iobase = atmel_get_base_addr(&tpm_atmel)) == NULL) {
189 if ((iobase = atmel_get_base_addr(&base, &region_size)) == NULL) {
186 rc = -ENODEV;
187 goto err_unreg_drv;
188 }
189
190 rc = -ENODEV;
191 goto err_unreg_drv;
192 }
193
190 tpm_atmel.have_region =
194 have_region =
191 (atmel_request_region
195 (atmel_request_region
192 (tpm_atmel.base, tpm_atmel.region_size,
193 "tpm_atmel0") == NULL) ? 0 : 1;
196 (tpm_atmel.base, region_size, "tpm_atmel0") == NULL) ? 0 : 1;
194
197
198
195 if (IS_ERR
196 (pdev =
197 platform_device_register_simple("tpm_atmel", -1, NULL, 0))) {
198 rc = PTR_ERR(pdev);
199 goto err_rel_reg;
200 }
201
199 if (IS_ERR
200 (pdev =
201 platform_device_register_simple("tpm_atmel", -1, NULL, 0))) {
202 rc = PTR_ERR(pdev);
203 goto err_rel_reg;
204 }
205
202 if ((rc = tpm_register_hardware(&pdev->dev, &tpm_atmel)) < 0)
206 if (!(chip = tpm_register_hardware(&pdev->dev, &tpm_atmel))) {
207 rc = -ENODEV;
203 goto err_unreg_dev;
208 goto err_unreg_dev;
209 }
210
211 chip->vendor.iobase = iobase;
212 chip->vendor.base = base;
213 chip->vendor.have_region = have_region;
214 chip->vendor.region_size = region_size;
215
204 return 0;
205
206err_unreg_dev:
207 platform_device_unregister(pdev);
208err_rel_reg:
216 return 0;
217
218err_unreg_dev:
219 platform_device_unregister(pdev);
220err_rel_reg:
209 atmel_put_base_addr(&tpm_atmel);
210 if (tpm_atmel.have_region)
211 atmel_release_region(tpm_atmel.base,
212 tpm_atmel.region_size);
221 atmel_put_base_addr(iobase);
222 if (have_region)
223 atmel_release_region(base,
224 region_size);
213err_unreg_drv:
214 driver_unregister(&atml_drv);
215 return rc;
216}
217
218static void __exit cleanup_atmel(void)
219{
220 driver_unregister(&atml_drv);
221 atml_plat_remove();
222}
223
224module_init(init_atmel);
225module_exit(cleanup_atmel);
226
227MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
228MODULE_DESCRIPTION("TPM Driver");
229MODULE_VERSION("2.0");
230MODULE_LICENSE("GPL");
225err_unreg_drv:
226 driver_unregister(&atml_drv);
227 return rc;
228}
229
230static void __exit cleanup_atmel(void)
231{
232 driver_unregister(&atml_drv);
233 atml_plat_remove();
234}
235
236module_init(init_atmel);
237module_exit(cleanup_atmel);
238
239MODULE_AUTHOR("Leendert van Doorn (leendert@watson.ibm.com)");
240MODULE_DESCRIPTION("TPM Driver");
241MODULE_VERSION("2.0");
242MODULE_LICENSE("GPL");