aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mfd/cros_ec.c
diff options
context:
space:
mode:
authorLee Jones <lee.jones@linaro.org>2013-05-23 11:25:10 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2013-06-13 06:11:42 -0400
commit22f9ee756bfd9ce9b066e2f90cf9f002aa7d1d44 (patch)
tree348c32309062c85868a155b5d95cc0b5ca338040 /drivers/mfd/cros_ec.c
parent1cee87fdf1f8b99585891e7defa1d08fef3c1451 (diff)
mfd: cros_ec: Convert to managed resources for allocating memory
Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/cros_ec.c')
-rw-r--r--drivers/mfd/cros_ec.c28
1 files changed, 9 insertions, 19 deletions
diff --git a/drivers/mfd/cros_ec.c b/drivers/mfd/cros_ec.c
index 10cd14e35eb0..1f36885d674b 100644
--- a/drivers/mfd/cros_ec.c
+++ b/drivers/mfd/cros_ec.c
@@ -104,23 +104,19 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
104 ec_dev->command_sendrecv = cros_ec_command_sendrecv; 104 ec_dev->command_sendrecv = cros_ec_command_sendrecv;
105 105
106 if (ec_dev->din_size) { 106 if (ec_dev->din_size) {
107 ec_dev->din = kmalloc(ec_dev->din_size, GFP_KERNEL); 107 ec_dev->din = devm_kzalloc(dev, ec_dev->din_size, GFP_KERNEL);
108 if (!ec_dev->din) { 108 if (!ec_dev->din)
109 err = -ENOMEM; 109 return -ENOMEM;
110 goto fail_din;
111 }
112 } 110 }
113 if (ec_dev->dout_size) { 111 if (ec_dev->dout_size) {
114 ec_dev->dout = kmalloc(ec_dev->dout_size, GFP_KERNEL); 112 ec_dev->dout = devm_kzalloc(dev, ec_dev->dout_size, GFP_KERNEL);
115 if (!ec_dev->dout) { 113 if (!ec_dev->dout)
116 err = -ENOMEM; 114 return -ENOMEM;
117 goto fail_dout;
118 }
119 } 115 }
120 116
121 if (!ec_dev->irq) { 117 if (!ec_dev->irq) {
122 dev_dbg(dev, "no valid IRQ: %d\n", ec_dev->irq); 118 dev_dbg(dev, "no valid IRQ: %d\n", ec_dev->irq);
123 goto fail_irq; 119 return err;
124 } 120 }
125 121
126 err = request_threaded_irq(ec_dev->irq, NULL, ec_irq_thread, 122 err = request_threaded_irq(ec_dev->irq, NULL, ec_irq_thread,
@@ -128,7 +124,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
128 "chromeos-ec", ec_dev); 124 "chromeos-ec", ec_dev);
129 if (err) { 125 if (err) {
130 dev_err(dev, "request irq %d: error %d\n", ec_dev->irq, err); 126 dev_err(dev, "request irq %d: error %d\n", ec_dev->irq, err);
131 goto fail_irq; 127 return err;
132 } 128 }
133 129
134 err = mfd_add_devices(dev, 0, cros_devs, 130 err = mfd_add_devices(dev, 0, cros_devs,
@@ -145,11 +141,7 @@ int cros_ec_register(struct cros_ec_device *ec_dev)
145 141
146fail_mfd: 142fail_mfd:
147 free_irq(ec_dev->irq, ec_dev); 143 free_irq(ec_dev->irq, ec_dev);
148fail_irq: 144
149 kfree(ec_dev->dout);
150fail_dout:
151 kfree(ec_dev->din);
152fail_din:
153 return err; 145 return err;
154} 146}
155EXPORT_SYMBOL(cros_ec_register); 147EXPORT_SYMBOL(cros_ec_register);
@@ -158,8 +150,6 @@ int cros_ec_remove(struct cros_ec_device *ec_dev)
158{ 150{
159 mfd_remove_devices(ec_dev->dev); 151 mfd_remove_devices(ec_dev->dev);
160 free_irq(ec_dev->irq, ec_dev); 152 free_irq(ec_dev->irq, ec_dev);
161 kfree(ec_dev->dout);
162 kfree(ec_dev->din);
163 153
164 return 0; 154 return 0;
165} 155}