.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0 |
---|
1 | 2 | /* |
---|
2 | 3 | * Driver for the Intel P-Unit Mailbox IPC mechanism |
---|
3 | 4 | * |
---|
4 | 5 | * (C) Copyright 2015 Intel Corporation |
---|
5 | 6 | * |
---|
6 | | - * This program is free software; you can redistribute it and/or modify |
---|
7 | | - * it under the terms of the GNU General Public License version 2 as |
---|
8 | | - * published by the Free Software Foundation. |
---|
9 | | - * |
---|
10 | 7 | * The heart of the P-Unit is the Foxton microcontroller and its firmware, |
---|
11 | 8 | * which provide mailbox interface for power management usage. |
---|
12 | 9 | */ |
---|
13 | 10 | |
---|
14 | | -#include <linux/module.h> |
---|
15 | | -#include <linux/mod_devicetable.h> |
---|
16 | | -#include <linux/acpi.h> |
---|
17 | | -#include <linux/delay.h> |
---|
18 | 11 | #include <linux/bitops.h> |
---|
| 12 | +#include <linux/delay.h> |
---|
19 | 13 | #include <linux/device.h> |
---|
20 | 14 | #include <linux/interrupt.h> |
---|
21 | 15 | #include <linux/io.h> |
---|
| 16 | +#include <linux/mod_devicetable.h> |
---|
| 17 | +#include <linux/module.h> |
---|
22 | 18 | #include <linux/platform_device.h> |
---|
| 19 | + |
---|
23 | 20 | #include <asm/intel_punit_ipc.h> |
---|
24 | 21 | |
---|
25 | 22 | /* IPC Mailbox registers */ |
---|
.. | .. |
---|
226 | 223 | |
---|
227 | 224 | static int intel_punit_get_bars(struct platform_device *pdev) |
---|
228 | 225 | { |
---|
229 | | - struct resource *res; |
---|
230 | 226 | void __iomem *addr; |
---|
231 | 227 | |
---|
232 | 228 | /* |
---|
.. | .. |
---|
234 | 230 | * - BIOS_IPC BASE_DATA |
---|
235 | 231 | * - BIOS_IPC BASE_IFACE |
---|
236 | 232 | */ |
---|
237 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
---|
238 | | - addr = devm_ioremap_resource(&pdev->dev, res); |
---|
| 233 | + addr = devm_platform_ioremap_resource(pdev, 0); |
---|
239 | 234 | if (IS_ERR(addr)) |
---|
240 | 235 | return PTR_ERR(addr); |
---|
241 | 236 | punit_ipcdev->base[BIOS_IPC][BASE_DATA] = addr; |
---|
242 | 237 | |
---|
243 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
---|
244 | | - addr = devm_ioremap_resource(&pdev->dev, res); |
---|
| 238 | + addr = devm_platform_ioremap_resource(pdev, 1); |
---|
245 | 239 | if (IS_ERR(addr)) |
---|
246 | 240 | return PTR_ERR(addr); |
---|
247 | 241 | punit_ipcdev->base[BIOS_IPC][BASE_IFACE] = addr; |
---|
.. | .. |
---|
253 | 247 | * - GTDRIVER_IPC BASE_DATA |
---|
254 | 248 | * - GTDRIVER_IPC BASE_IFACE |
---|
255 | 249 | */ |
---|
256 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 2); |
---|
257 | | - if (res && resource_size(res) > 1) { |
---|
258 | | - addr = devm_ioremap_resource(&pdev->dev, res); |
---|
259 | | - if (!IS_ERR(addr)) |
---|
260 | | - punit_ipcdev->base[ISPDRIVER_IPC][BASE_DATA] = addr; |
---|
261 | | - } |
---|
| 250 | + addr = devm_platform_ioremap_resource(pdev, 2); |
---|
| 251 | + if (!IS_ERR(addr)) |
---|
| 252 | + punit_ipcdev->base[ISPDRIVER_IPC][BASE_DATA] = addr; |
---|
262 | 253 | |
---|
263 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 3); |
---|
264 | | - if (res && resource_size(res) > 1) { |
---|
265 | | - addr = devm_ioremap_resource(&pdev->dev, res); |
---|
266 | | - if (!IS_ERR(addr)) |
---|
267 | | - punit_ipcdev->base[ISPDRIVER_IPC][BASE_IFACE] = addr; |
---|
268 | | - } |
---|
| 254 | + addr = devm_platform_ioremap_resource(pdev, 3); |
---|
| 255 | + if (!IS_ERR(addr)) |
---|
| 256 | + punit_ipcdev->base[ISPDRIVER_IPC][BASE_IFACE] = addr; |
---|
269 | 257 | |
---|
270 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 4); |
---|
271 | | - if (res && resource_size(res) > 1) { |
---|
272 | | - addr = devm_ioremap_resource(&pdev->dev, res); |
---|
273 | | - if (!IS_ERR(addr)) |
---|
274 | | - punit_ipcdev->base[GTDRIVER_IPC][BASE_DATA] = addr; |
---|
275 | | - } |
---|
| 258 | + addr = devm_platform_ioremap_resource(pdev, 4); |
---|
| 259 | + if (!IS_ERR(addr)) |
---|
| 260 | + punit_ipcdev->base[GTDRIVER_IPC][BASE_DATA] = addr; |
---|
276 | 261 | |
---|
277 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 5); |
---|
278 | | - if (res && resource_size(res) > 1) { |
---|
279 | | - addr = devm_ioremap_resource(&pdev->dev, res); |
---|
280 | | - if (!IS_ERR(addr)) |
---|
281 | | - punit_ipcdev->base[GTDRIVER_IPC][BASE_IFACE] = addr; |
---|
282 | | - } |
---|
| 262 | + addr = devm_platform_ioremap_resource(pdev, 5); |
---|
| 263 | + if (!IS_ERR(addr)) |
---|
| 264 | + punit_ipcdev->base[GTDRIVER_IPC][BASE_IFACE] = addr; |
---|
283 | 265 | |
---|
284 | 266 | return 0; |
---|
285 | 267 | } |
---|
.. | .. |
---|
295 | 277 | |
---|
296 | 278 | platform_set_drvdata(pdev, punit_ipcdev); |
---|
297 | 279 | |
---|
298 | | - irq = platform_get_irq(pdev, 0); |
---|
| 280 | + irq = platform_get_irq_optional(pdev, 0); |
---|
299 | 281 | if (irq < 0) { |
---|
300 | | - punit_ipcdev->irq = 0; |
---|
301 | 282 | dev_warn(&pdev->dev, "Invalid IRQ, using polling mode\n"); |
---|
302 | 283 | } else { |
---|
303 | 284 | ret = devm_request_irq(&pdev->dev, irq, intel_punit_ioc, |
---|
.. | .. |
---|
312 | 293 | |
---|
313 | 294 | ret = intel_punit_get_bars(pdev); |
---|
314 | 295 | if (ret) |
---|
315 | | - goto out; |
---|
| 296 | + return ret; |
---|
316 | 297 | |
---|
317 | 298 | punit_ipcdev->dev = &pdev->dev; |
---|
318 | 299 | mutex_init(&punit_ipcdev->lock); |
---|
319 | 300 | init_completion(&punit_ipcdev->cmd_complete); |
---|
320 | 301 | |
---|
321 | | -out: |
---|
322 | | - return ret; |
---|
| 302 | + return 0; |
---|
323 | 303 | } |
---|
324 | 304 | |
---|
325 | 305 | static int intel_punit_ipc_remove(struct platform_device *pdev) |
---|
.. | .. |
---|
338 | 318 | .remove = intel_punit_ipc_remove, |
---|
339 | 319 | .driver = { |
---|
340 | 320 | .name = "intel_punit_ipc", |
---|
341 | | - .acpi_match_table = ACPI_PTR(punit_ipc_acpi_ids), |
---|
| 321 | + .acpi_match_table = punit_ipc_acpi_ids, |
---|
342 | 322 | }, |
---|
343 | 323 | }; |
---|
344 | 324 | |
---|