.. | .. |
---|
108 | 108 | |
---|
109 | 109 | static int ts4800_wdt_probe(struct platform_device *pdev) |
---|
110 | 110 | { |
---|
111 | | - struct device_node *np = pdev->dev.of_node; |
---|
| 111 | + struct device *dev = &pdev->dev; |
---|
| 112 | + struct device_node *np = dev->of_node; |
---|
112 | 113 | struct device_node *syscon_np; |
---|
113 | 114 | struct watchdog_device *wdd; |
---|
114 | 115 | struct ts4800_wdt *wdt; |
---|
.. | .. |
---|
117 | 118 | |
---|
118 | 119 | syscon_np = of_parse_phandle(np, "syscon", 0); |
---|
119 | 120 | if (!syscon_np) { |
---|
120 | | - dev_err(&pdev->dev, "no syscon property\n"); |
---|
| 121 | + dev_err(dev, "no syscon property\n"); |
---|
121 | 122 | return -ENODEV; |
---|
122 | 123 | } |
---|
123 | 124 | |
---|
124 | 125 | ret = of_property_read_u32_index(np, "syscon", 1, ®); |
---|
125 | 126 | if (ret < 0) { |
---|
126 | | - dev_err(&pdev->dev, "no offset in syscon\n"); |
---|
| 127 | + dev_err(dev, "no offset in syscon\n"); |
---|
| 128 | + of_node_put(syscon_np); |
---|
127 | 129 | return ret; |
---|
128 | 130 | } |
---|
129 | 131 | |
---|
130 | 132 | /* allocate memory for watchdog struct */ |
---|
131 | | - wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL); |
---|
132 | | - if (!wdt) |
---|
| 133 | + wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL); |
---|
| 134 | + if (!wdt) { |
---|
| 135 | + of_node_put(syscon_np); |
---|
133 | 136 | return -ENOMEM; |
---|
| 137 | + } |
---|
134 | 138 | |
---|
135 | 139 | /* set regmap and offset to know where to write */ |
---|
136 | 140 | wdt->feed_offset = reg; |
---|
137 | 141 | wdt->regmap = syscon_node_to_regmap(syscon_np); |
---|
| 142 | + of_node_put(syscon_np); |
---|
138 | 143 | if (IS_ERR(wdt->regmap)) { |
---|
139 | | - dev_err(&pdev->dev, "cannot get parent's regmap\n"); |
---|
| 144 | + dev_err(dev, "cannot get parent's regmap\n"); |
---|
140 | 145 | return PTR_ERR(wdt->regmap); |
---|
141 | 146 | } |
---|
142 | 147 | |
---|
143 | 148 | /* Initialize struct watchdog_device */ |
---|
144 | 149 | wdd = &wdt->wdd; |
---|
145 | | - wdd->parent = &pdev->dev; |
---|
| 150 | + wdd->parent = dev; |
---|
146 | 151 | wdd->info = &ts4800_wdt_info; |
---|
147 | 152 | wdd->ops = &ts4800_wdt_ops; |
---|
148 | 153 | wdd->min_timeout = ts4800_wdt_map[0].timeout; |
---|
.. | .. |
---|
150 | 155 | |
---|
151 | 156 | watchdog_set_drvdata(wdd, wdt); |
---|
152 | 157 | watchdog_set_nowayout(wdd, nowayout); |
---|
153 | | - watchdog_init_timeout(wdd, 0, &pdev->dev); |
---|
| 158 | + watchdog_init_timeout(wdd, 0, dev); |
---|
154 | 159 | |
---|
155 | 160 | /* |
---|
156 | 161 | * As this watchdog supports only a few values, ts4800_wdt_set_timeout |
---|
.. | .. |
---|
168 | 173 | */ |
---|
169 | 174 | ts4800_wdt_stop(wdd); |
---|
170 | 175 | |
---|
171 | | - ret = watchdog_register_device(wdd); |
---|
172 | | - if (ret) { |
---|
173 | | - dev_err(&pdev->dev, |
---|
174 | | - "failed to register watchdog device\n"); |
---|
| 176 | + ret = devm_watchdog_register_device(dev, wdd); |
---|
| 177 | + if (ret) |
---|
175 | 178 | return ret; |
---|
176 | | - } |
---|
177 | 179 | |
---|
178 | 180 | platform_set_drvdata(pdev, wdt); |
---|
179 | 181 | |
---|
180 | | - dev_info(&pdev->dev, |
---|
181 | | - "initialized (timeout = %d sec, nowayout = %d)\n", |
---|
| 182 | + dev_info(dev, "initialized (timeout = %d sec, nowayout = %d)\n", |
---|
182 | 183 | wdd->timeout, nowayout); |
---|
183 | | - |
---|
184 | | - return 0; |
---|
185 | | -} |
---|
186 | | - |
---|
187 | | -static int ts4800_wdt_remove(struct platform_device *pdev) |
---|
188 | | -{ |
---|
189 | | - struct ts4800_wdt *wdt = platform_get_drvdata(pdev); |
---|
190 | | - |
---|
191 | | - watchdog_unregister_device(&wdt->wdd); |
---|
192 | 184 | |
---|
193 | 185 | return 0; |
---|
194 | 186 | } |
---|
.. | .. |
---|
201 | 193 | |
---|
202 | 194 | static struct platform_driver ts4800_wdt_driver = { |
---|
203 | 195 | .probe = ts4800_wdt_probe, |
---|
204 | | - .remove = ts4800_wdt_remove, |
---|
205 | 196 | .driver = { |
---|
206 | 197 | .name = "ts4800_wdt", |
---|
207 | 198 | .of_match_table = ts4800_wdt_of_match, |
---|