| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * MEN 14F021P00 Board Management Controller (BMC) Watchdog Driver. |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright (C) 2014 MEN Mikro Elektronik Nuernberg GmbH |
|---|
| 5 | | - * |
|---|
| 6 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 7 | | - * under the terms of the GNU General Public License as published by the |
|---|
| 8 | | - * Free Software Foundation; either version 2 of the License, or (at your |
|---|
| 9 | | - * option) any later version. |
|---|
| 10 | 6 | */ |
|---|
| 11 | 7 | |
|---|
| 12 | 8 | #include <linux/kernel.h> |
|---|
| .. | .. |
|---|
| 117 | 113 | |
|---|
| 118 | 114 | static int menf21bmc_wdt_probe(struct platform_device *pdev) |
|---|
| 119 | 115 | { |
|---|
| 116 | + struct device *dev = &pdev->dev; |
|---|
| 120 | 117 | int ret, bmc_timeout; |
|---|
| 121 | 118 | struct menf21bmc_wdt *drv_data; |
|---|
| 122 | | - struct i2c_client *i2c_client = to_i2c_client(pdev->dev.parent); |
|---|
| 119 | + struct i2c_client *i2c_client = to_i2c_client(dev->parent); |
|---|
| 123 | 120 | |
|---|
| 124 | | - drv_data = devm_kzalloc(&pdev->dev, |
|---|
| 125 | | - sizeof(struct menf21bmc_wdt), GFP_KERNEL); |
|---|
| 121 | + drv_data = devm_kzalloc(dev, sizeof(struct menf21bmc_wdt), GFP_KERNEL); |
|---|
| 126 | 122 | if (!drv_data) |
|---|
| 127 | 123 | return -ENOMEM; |
|---|
| 128 | 124 | |
|---|
| .. | .. |
|---|
| 130 | 126 | drv_data->wdt.info = &menf21bmc_wdt_info; |
|---|
| 131 | 127 | drv_data->wdt.min_timeout = BMC_WD_TIMEOUT_MIN; |
|---|
| 132 | 128 | drv_data->wdt.max_timeout = BMC_WD_TIMEOUT_MAX; |
|---|
| 133 | | - drv_data->wdt.parent = &pdev->dev; |
|---|
| 129 | + drv_data->wdt.parent = dev; |
|---|
| 134 | 130 | drv_data->i2c_client = i2c_client; |
|---|
| 135 | 131 | |
|---|
| 136 | 132 | /* |
|---|
| .. | .. |
|---|
| 140 | 136 | bmc_timeout = i2c_smbus_read_word_data(drv_data->i2c_client, |
|---|
| 141 | 137 | BMC_CMD_WD_TIME); |
|---|
| 142 | 138 | if (bmc_timeout < 0) { |
|---|
| 143 | | - dev_err(&pdev->dev, "failed to get current WDT timeout\n"); |
|---|
| 139 | + dev_err(dev, "failed to get current WDT timeout\n"); |
|---|
| 144 | 140 | return bmc_timeout; |
|---|
| 145 | 141 | } |
|---|
| 146 | 142 | |
|---|
| 147 | | - watchdog_init_timeout(&drv_data->wdt, bmc_timeout / 10, &pdev->dev); |
|---|
| 143 | + watchdog_init_timeout(&drv_data->wdt, bmc_timeout / 10, dev); |
|---|
| 148 | 144 | watchdog_set_nowayout(&drv_data->wdt, nowayout); |
|---|
| 149 | 145 | watchdog_set_drvdata(&drv_data->wdt, drv_data); |
|---|
| 150 | 146 | platform_set_drvdata(pdev, drv_data); |
|---|
| 151 | 147 | |
|---|
| 152 | 148 | ret = menf21bmc_wdt_set_bootstatus(drv_data); |
|---|
| 153 | 149 | if (ret < 0) { |
|---|
| 154 | | - dev_err(&pdev->dev, "failed to set Watchdog bootstatus\n"); |
|---|
| 150 | + dev_err(dev, "failed to set Watchdog bootstatus\n"); |
|---|
| 155 | 151 | return ret; |
|---|
| 156 | 152 | } |
|---|
| 157 | 153 | |
|---|
| 158 | | - ret = watchdog_register_device(&drv_data->wdt); |
|---|
| 159 | | - if (ret) { |
|---|
| 160 | | - dev_err(&pdev->dev, "failed to register Watchdog device\n"); |
|---|
| 154 | + ret = devm_watchdog_register_device(dev, &drv_data->wdt); |
|---|
| 155 | + if (ret) |
|---|
| 161 | 156 | return ret; |
|---|
| 162 | | - } |
|---|
| 163 | 157 | |
|---|
| 164 | | - dev_info(&pdev->dev, "MEN 14F021P00 BMC Watchdog device enabled\n"); |
|---|
| 165 | | - |
|---|
| 166 | | - return 0; |
|---|
| 167 | | -} |
|---|
| 168 | | - |
|---|
| 169 | | -static int menf21bmc_wdt_remove(struct platform_device *pdev) |
|---|
| 170 | | -{ |
|---|
| 171 | | - struct menf21bmc_wdt *drv_data = platform_get_drvdata(pdev); |
|---|
| 172 | | - |
|---|
| 173 | | - dev_warn(&pdev->dev, |
|---|
| 174 | | - "Unregister MEN 14F021P00 BMC Watchdog device, board may reset\n"); |
|---|
| 175 | | - |
|---|
| 176 | | - watchdog_unregister_device(&drv_data->wdt); |
|---|
| 158 | + dev_info(dev, "MEN 14F021P00 BMC Watchdog device enabled\n"); |
|---|
| 177 | 159 | |
|---|
| 178 | 160 | return 0; |
|---|
| 179 | 161 | } |
|---|
| .. | .. |
|---|
| 191 | 173 | .name = DEVNAME, |
|---|
| 192 | 174 | }, |
|---|
| 193 | 175 | .probe = menf21bmc_wdt_probe, |
|---|
| 194 | | - .remove = menf21bmc_wdt_remove, |
|---|
| 195 | 176 | .shutdown = menf21bmc_wdt_shutdown, |
|---|
| 196 | 177 | }; |
|---|
| 197 | 178 | |
|---|