ledtrig-transient.c (552c69b36ebd966186573b9c7a286b390935cce1) | ledtrig-transient.c (2282e125a406e09331c5a785e3df29035c99a607) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2// 3// LED Kernel Transient Trigger 4// 5// Transient trigger allows one shot timer activation. Please refer to 6// Documentation/leds/ledtrig-transient.txt for details 7// Copyright (C) 2012 Shuah Khan <shuahkhan@gmail.com> 8// --- 138 unchanged lines hidden (view full) --- 147} 148 149static DEVICE_ATTR(activate, 0644, transient_activate_show, 150 transient_activate_store); 151static DEVICE_ATTR(duration, 0644, transient_duration_show, 152 transient_duration_store); 153static DEVICE_ATTR(state, 0644, transient_state_show, transient_state_store); 154 | 1// SPDX-License-Identifier: GPL-2.0 2// 3// LED Kernel Transient Trigger 4// 5// Transient trigger allows one shot timer activation. Please refer to 6// Documentation/leds/ledtrig-transient.txt for details 7// Copyright (C) 2012 Shuah Khan <shuahkhan@gmail.com> 8// --- 138 unchanged lines hidden (view full) --- 147} 148 149static DEVICE_ATTR(activate, 0644, transient_activate_show, 150 transient_activate_store); 151static DEVICE_ATTR(duration, 0644, transient_duration_show, 152 transient_duration_store); 153static DEVICE_ATTR(state, 0644, transient_state_show, transient_state_store); 154 |
155static void transient_trig_activate(struct led_classdev *led_cdev) | 155static int transient_trig_activate(struct led_classdev *led_cdev) |
156{ 157 int rc; 158 struct transient_trig_data *tdata; 159 160 tdata = kzalloc(sizeof(struct transient_trig_data), GFP_KERNEL); 161 if (!tdata) { 162 dev_err(led_cdev->dev, 163 "unable to allocate transient trigger\n"); | 156{ 157 int rc; 158 struct transient_trig_data *tdata; 159 160 tdata = kzalloc(sizeof(struct transient_trig_data), GFP_KERNEL); 161 if (!tdata) { 162 dev_err(led_cdev->dev, 163 "unable to allocate transient trigger\n"); |
164 return; | 164 return 0; |
165 } 166 led_cdev->trigger_data = tdata; 167 tdata->led_cdev = led_cdev; 168 169 rc = device_create_file(led_cdev->dev, &dev_attr_activate); 170 if (rc) 171 goto err_out; 172 173 rc = device_create_file(led_cdev->dev, &dev_attr_duration); 174 if (rc) 175 goto err_out_duration; 176 177 rc = device_create_file(led_cdev->dev, &dev_attr_state); 178 if (rc) 179 goto err_out_state; 180 181 timer_setup(&tdata->timer, transient_timer_function, 0); 182 led_cdev->activated = true; 183 | 165 } 166 led_cdev->trigger_data = tdata; 167 tdata->led_cdev = led_cdev; 168 169 rc = device_create_file(led_cdev->dev, &dev_attr_activate); 170 if (rc) 171 goto err_out; 172 173 rc = device_create_file(led_cdev->dev, &dev_attr_duration); 174 if (rc) 175 goto err_out_duration; 176 177 rc = device_create_file(led_cdev->dev, &dev_attr_state); 178 if (rc) 179 goto err_out_state; 180 181 timer_setup(&tdata->timer, transient_timer_function, 0); 182 led_cdev->activated = true; 183 |
184 return; | 184 return 0; |
185 186err_out_state: 187 device_remove_file(led_cdev->dev, &dev_attr_duration); 188err_out_duration: 189 device_remove_file(led_cdev->dev, &dev_attr_activate); 190err_out: 191 dev_err(led_cdev->dev, "unable to register transient trigger\n"); 192 led_cdev->trigger_data = NULL; 193 kfree(tdata); | 185 186err_out_state: 187 device_remove_file(led_cdev->dev, &dev_attr_duration); 188err_out_duration: 189 device_remove_file(led_cdev->dev, &dev_attr_activate); 190err_out: 191 dev_err(led_cdev->dev, "unable to register transient trigger\n"); 192 led_cdev->trigger_data = NULL; 193 kfree(tdata); |
194 195 return 0; |
|
194} 195 196static void transient_trig_deactivate(struct led_classdev *led_cdev) 197{ 198 struct transient_trig_data *transient_data = led_cdev->trigger_data; 199 200 if (led_cdev->activated) { 201 del_timer_sync(&transient_data->timer); --- 33 unchanged lines hidden --- | 196} 197 198static void transient_trig_deactivate(struct led_classdev *led_cdev) 199{ 200 struct transient_trig_data *transient_data = led_cdev->trigger_data; 201 202 if (led_cdev->activated) { 203 del_timer_sync(&transient_data->timer); --- 33 unchanged lines hidden --- |