diff options
Diffstat (limited to 'drivers/w1')
-rw-r--r-- | drivers/w1/masters/mxc_w1.c | 49 |
1 files changed, 10 insertions, 39 deletions
diff --git a/drivers/w1/masters/mxc_w1.c b/drivers/w1/masters/mxc_w1.c index 708a25fc9961..372c8c0d54a0 100644 --- a/drivers/w1/masters/mxc_w1.c +++ b/drivers/w1/masters/mxc_w1.c | |||
@@ -109,34 +109,21 @@ static int mxc_w1_probe(struct platform_device *pdev) | |||
109 | struct resource *res; | 109 | struct resource *res; |
110 | int err = 0; | 110 | int err = 0; |
111 | 111 | ||
112 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 112 | mdev = devm_kzalloc(&pdev->dev, sizeof(struct mxc_w1_device), |
113 | if (!res) | 113 | GFP_KERNEL); |
114 | return -ENODEV; | ||
115 | |||
116 | mdev = kzalloc(sizeof(struct mxc_w1_device), GFP_KERNEL); | ||
117 | if (!mdev) | 114 | if (!mdev) |
118 | return -ENOMEM; | 115 | return -ENOMEM; |
119 | 116 | ||
120 | mdev->clk = clk_get(&pdev->dev, NULL); | 117 | mdev->clk = devm_clk_get(&pdev->dev, NULL); |
121 | if (IS_ERR(mdev->clk)) { | 118 | if (IS_ERR(mdev->clk)) |
122 | err = PTR_ERR(mdev->clk); | 119 | return PTR_ERR(mdev->clk); |
123 | goto failed_clk; | ||
124 | } | ||
125 | 120 | ||
126 | mdev->clkdiv = (clk_get_rate(mdev->clk) / 1000000) - 1; | 121 | mdev->clkdiv = (clk_get_rate(mdev->clk) / 1000000) - 1; |
127 | 122 | ||
128 | res = request_mem_region(res->start, resource_size(res), | 123 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
129 | "mxc_w1"); | 124 | mdev->regs = devm_request_and_ioremap(&pdev->dev, res); |
130 | if (!res) { | 125 | if (!mdev->regs) |
131 | err = -EBUSY; | 126 | return -EBUSY; |
132 | goto failed_req; | ||
133 | } | ||
134 | |||
135 | mdev->regs = ioremap(res->start, resource_size(res)); | ||
136 | if (!mdev->regs) { | ||
137 | dev_err(&pdev->dev, "Cannot map mxc_w1 registers\n"); | ||
138 | goto failed_ioremap; | ||
139 | } | ||
140 | 127 | ||
141 | clk_prepare_enable(mdev->clk); | 128 | clk_prepare_enable(mdev->clk); |
142 | __raw_writeb(mdev->clkdiv, mdev->regs + MXC_W1_TIME_DIVIDER); | 129 | __raw_writeb(mdev->clkdiv, mdev->regs + MXC_W1_TIME_DIVIDER); |
@@ -148,20 +135,10 @@ static int mxc_w1_probe(struct platform_device *pdev) | |||
148 | err = w1_add_master_device(&mdev->bus_master); | 135 | err = w1_add_master_device(&mdev->bus_master); |
149 | 136 | ||
150 | if (err) | 137 | if (err) |
151 | goto failed_add; | 138 | return err; |
152 | 139 | ||
153 | platform_set_drvdata(pdev, mdev); | 140 | platform_set_drvdata(pdev, mdev); |
154 | return 0; | 141 | return 0; |
155 | |||
156 | failed_add: | ||
157 | iounmap(mdev->regs); | ||
158 | failed_ioremap: | ||
159 | release_mem_region(res->start, resource_size(res)); | ||
160 | failed_req: | ||
161 | clk_put(mdev->clk); | ||
162 | failed_clk: | ||
163 | kfree(mdev); | ||
164 | return err; | ||
165 | } | 142 | } |
166 | 143 | ||
167 | /* | 144 | /* |
@@ -170,16 +147,10 @@ failed_clk: | |||
170 | static int mxc_w1_remove(struct platform_device *pdev) | 147 | static int mxc_w1_remove(struct platform_device *pdev) |
171 | { | 148 | { |
172 | struct mxc_w1_device *mdev = platform_get_drvdata(pdev); | 149 | struct mxc_w1_device *mdev = platform_get_drvdata(pdev); |
173 | struct resource *res; | ||
174 | |||
175 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
176 | 150 | ||
177 | w1_remove_master_device(&mdev->bus_master); | 151 | w1_remove_master_device(&mdev->bus_master); |
178 | 152 | ||
179 | iounmap(mdev->regs); | ||
180 | release_mem_region(res->start, resource_size(res)); | ||
181 | clk_disable_unprepare(mdev->clk); | 153 | clk_disable_unprepare(mdev->clk); |
182 | clk_put(mdev->clk); | ||
183 | 154 | ||
184 | platform_set_drvdata(pdev, NULL); | 155 | platform_set_drvdata(pdev, NULL); |
185 | 156 | ||