Lines Matching refs:channel

69 static void gb_lights_channel_free(struct gb_channel *channel);
71 static struct gb_connection *get_conn_from_channel(struct gb_channel *channel) in get_conn_from_channel() argument
73 return channel->light->glights->connection; in get_conn_from_channel()
81 static bool is_channel_flash(struct gb_channel *channel) in is_channel_flash() argument
83 return !!(channel->mode & (GB_CHANNEL_MODE_FLASH | GB_CHANNEL_MODE_TORCH in is_channel_flash()
95 static struct led_classdev *get_channel_cdev(struct gb_channel *channel) in get_channel_cdev() argument
97 return &channel->fled.led_cdev; in get_channel_cdev()
103 struct gb_channel *channel; in get_channel_from_mode() local
107 channel = &light->channels[i]; in get_channel_from_mode()
108 if (channel->mode == mode) in get_channel_from_mode()
109 return channel; in get_channel_from_mode()
114 static int __gb_lights_flash_intensity_set(struct gb_channel *channel, in __gb_lights_flash_intensity_set() argument
117 struct gb_connection *connection = get_conn_from_channel(channel); in __gb_lights_flash_intensity_set()
122 if (channel->releasing) in __gb_lights_flash_intensity_set()
129 req.light_id = channel->light->id; in __gb_lights_flash_intensity_set()
130 req.channel_id = channel->id; in __gb_lights_flash_intensity_set()
141 static int __gb_lights_flash_brightness_set(struct gb_channel *channel) in __gb_lights_flash_brightness_set() argument
146 if (channel->mode & GB_CHANNEL_MODE_FLASH) in __gb_lights_flash_brightness_set()
147 channel = get_channel_from_mode(channel->light, in __gb_lights_flash_brightness_set()
150 if (!channel) in __gb_lights_flash_brightness_set()
154 intensity = channel->intensity_uA.min + in __gb_lights_flash_brightness_set()
155 (channel->intensity_uA.step * channel->led->brightness); in __gb_lights_flash_brightness_set()
157 return __gb_lights_flash_intensity_set(channel, intensity); in __gb_lights_flash_brightness_set()
165 static struct led_classdev *get_channel_cdev(struct gb_channel *channel) in get_channel_cdev() argument
167 return &channel->cled; in get_channel_cdev()
170 static int __gb_lights_flash_brightness_set(struct gb_channel *channel) in __gb_lights_flash_brightness_set() argument
176 static int gb_lights_color_set(struct gb_channel *channel, u32 color);
177 static int gb_lights_fade_set(struct gb_channel *channel);
195 struct gb_channel *channel = get_channel_from_cdev(cdev); \
197 return sprintf(buf, "%u\n", channel->fade_##__dir); \
205 struct gb_channel *channel = get_channel_from_cdev(cdev); \
220 if (channel->fade_##__dir == fade) \
222 channel->fade_##__dir = fade; \
224 ret = gb_lights_fade_set(channel); \
242 struct gb_channel *channel = get_channel_from_cdev(cdev); in color_show() local
244 return sprintf(buf, "0x%08x\n", channel->color); in color_show()
251 struct gb_channel *channel = get_channel_from_cdev(cdev); in color_store() local
266 ret = gb_lights_color_set(channel, color); in color_store()
270 channel->color = color; in color_store()
278 static int channel_attr_groups_set(struct gb_channel *channel, in channel_attr_groups_set() argument
284 if (channel->flags & GB_LIGHT_CHANNEL_MULTICOLOR) in channel_attr_groups_set()
286 if (channel->flags & GB_LIGHT_CHANNEL_FADER) in channel_attr_groups_set()
293 channel->attrs = kcalloc(size + 1, sizeof(*channel->attrs), GFP_KERNEL); in channel_attr_groups_set()
294 if (!channel->attrs) in channel_attr_groups_set()
296 channel->attr_group = kzalloc(sizeof(*channel->attr_group), GFP_KERNEL); in channel_attr_groups_set()
297 if (!channel->attr_group) in channel_attr_groups_set()
299 channel->attr_groups = kcalloc(2, sizeof(*channel->attr_groups), in channel_attr_groups_set()
301 if (!channel->attr_groups) in channel_attr_groups_set()
304 if (channel->flags & GB_LIGHT_CHANNEL_MULTICOLOR) in channel_attr_groups_set()
305 channel->attrs[attr++] = &dev_attr_color.attr; in channel_attr_groups_set()
306 if (channel->flags & GB_LIGHT_CHANNEL_FADER) { in channel_attr_groups_set()
307 channel->attrs[attr++] = &dev_attr_fade_in.attr; in channel_attr_groups_set()
308 channel->attrs[attr++] = &dev_attr_fade_out.attr; in channel_attr_groups_set()
311 channel->attr_group->attrs = channel->attrs; in channel_attr_groups_set()
313 channel->attr_groups[0] = channel->attr_group; in channel_attr_groups_set()
315 cdev->groups = channel->attr_groups; in channel_attr_groups_set()
320 static int gb_lights_fade_set(struct gb_channel *channel) in gb_lights_fade_set() argument
322 struct gb_connection *connection = get_conn_from_channel(channel); in gb_lights_fade_set()
327 if (channel->releasing) in gb_lights_fade_set()
334 req.light_id = channel->light->id; in gb_lights_fade_set()
335 req.channel_id = channel->id; in gb_lights_fade_set()
336 req.fade_in = channel->fade_in; in gb_lights_fade_set()
337 req.fade_out = channel->fade_out; in gb_lights_fade_set()
346 static int gb_lights_color_set(struct gb_channel *channel, u32 color) in gb_lights_color_set() argument
348 struct gb_connection *connection = get_conn_from_channel(channel); in gb_lights_color_set()
353 if (channel->releasing) in gb_lights_color_set()
360 req.light_id = channel->light->id; in gb_lights_color_set()
361 req.channel_id = channel->id; in gb_lights_color_set()
371 static int __gb_lights_led_brightness_set(struct gb_channel *channel) in __gb_lights_led_brightness_set() argument
374 struct gb_connection *connection = get_conn_from_channel(channel); in __gb_lights_led_brightness_set()
379 mutex_lock(&channel->lock); in __gb_lights_led_brightness_set()
384 old_active = channel->active; in __gb_lights_led_brightness_set()
386 req.light_id = channel->light->id; in __gb_lights_led_brightness_set()
387 req.channel_id = channel->id; in __gb_lights_led_brightness_set()
388 req.brightness = (u8)channel->led->brightness; in __gb_lights_led_brightness_set()
395 if (channel->led->brightness) in __gb_lights_led_brightness_set()
396 channel->active = true; in __gb_lights_led_brightness_set()
398 channel->active = false; in __gb_lights_led_brightness_set()
401 if (!old_active && channel->active) in __gb_lights_led_brightness_set()
408 if (old_active && !channel->active) in __gb_lights_led_brightness_set()
414 mutex_unlock(&channel->lock); in __gb_lights_led_brightness_set()
419 static int __gb_lights_brightness_set(struct gb_channel *channel) in __gb_lights_brightness_set() argument
423 if (channel->releasing) in __gb_lights_brightness_set()
426 if (is_channel_flash(channel)) in __gb_lights_brightness_set()
427 ret = __gb_lights_flash_brightness_set(channel); in __gb_lights_brightness_set()
429 ret = __gb_lights_led_brightness_set(channel); in __gb_lights_brightness_set()
437 struct gb_channel *channel = get_channel_from_cdev(cdev); in gb_brightness_set() local
439 channel->led->brightness = value; in gb_brightness_set()
441 return __gb_lights_brightness_set(channel); in gb_brightness_set()
447 struct gb_channel *channel = get_channel_from_cdev(cdev); in gb_brightness_get() local
449 return channel->led->brightness; in gb_brightness_get()
455 struct gb_channel *channel = get_channel_from_cdev(cdev); in gb_blink_set() local
456 struct gb_connection *connection = get_conn_from_channel(channel); in gb_blink_set()
462 if (channel->releasing) in gb_blink_set()
468 mutex_lock(&channel->lock); in gb_blink_set()
473 old_active = channel->active; in gb_blink_set()
475 req.light_id = channel->light->id; in gb_blink_set()
476 req.channel_id = channel->id; in gb_blink_set()
486 channel->active = true; in gb_blink_set()
488 channel->active = false; in gb_blink_set()
491 if (!old_active && channel->active) in gb_blink_set()
498 if (old_active && !channel->active) in gb_blink_set()
504 mutex_unlock(&channel->lock); in gb_blink_set()
509 static void gb_lights_led_operations_set(struct gb_channel *channel, in gb_lights_led_operations_set() argument
515 if (channel->flags & GB_LIGHT_CHANNEL_BLINK) in gb_lights_led_operations_set()
614 struct gb_channel *channel = container_of(fcdev, struct gb_channel, in gb_lights_flash_intensity_set() local
618 ret = __gb_lights_flash_intensity_set(channel, brightness); in gb_lights_flash_intensity_set()
638 struct gb_channel *channel = container_of(fcdev, struct gb_channel, in gb_lights_flash_strobe_set() local
640 struct gb_connection *connection = get_conn_from_channel(channel); in gb_lights_flash_strobe_set()
645 if (channel->releasing) in gb_lights_flash_strobe_set()
652 req.light_id = channel->light->id; in gb_lights_flash_strobe_set()
653 req.channel_id = channel->id; in gb_lights_flash_strobe_set()
659 channel->strobe_state = state; in gb_lights_flash_strobe_set()
669 struct gb_channel *channel = container_of(fcdev, struct gb_channel, in gb_lights_flash_strobe_get() local
672 *state = channel->strobe_state; in gb_lights_flash_strobe_get()
679 struct gb_channel *channel = container_of(fcdev, struct gb_channel, in gb_lights_flash_timeout_set() local
681 struct gb_connection *connection = get_conn_from_channel(channel); in gb_lights_flash_timeout_set()
686 if (channel->releasing) in gb_lights_flash_timeout_set()
693 req.light_id = channel->light->id; in gb_lights_flash_timeout_set()
694 req.channel_id = channel->id; in gb_lights_flash_timeout_set()
710 struct gb_channel *channel = container_of(fcdev, struct gb_channel, in gb_lights_flash_fault_get() local
712 struct gb_connection *connection = get_conn_from_channel(channel); in gb_lights_flash_fault_get()
718 if (channel->releasing) in gb_lights_flash_fault_get()
725 req.light_id = channel->light->id; in gb_lights_flash_fault_get()
726 req.channel_id = channel->id; in gb_lights_flash_fault_get()
747 static int __gb_lights_channel_torch_attach(struct gb_channel *channel, in __gb_lights_channel_torch_attach() argument
753 if (!(channel->mode & GB_CHANNEL_MODE_FLASH)) in __gb_lights_channel_torch_attach()
757 channel->led->max_brightness = channel_torch->led->max_brightness; in __gb_lights_channel_torch_attach()
760 name = kasprintf(GFP_KERNEL, "%s_%s", channel->led->name, in __gb_lights_channel_torch_attach()
764 kfree(channel->led->name); in __gb_lights_channel_torch_attach()
765 channel->led->name = name; in __gb_lights_channel_torch_attach()
767 channel_torch->led = channel->led; in __gb_lights_channel_torch_attach()
772 static int __gb_lights_flash_led_register(struct gb_channel *channel) in __gb_lights_flash_led_register() argument
774 struct gb_connection *connection = get_conn_from_channel(channel); in __gb_lights_flash_led_register()
775 struct led_classdev_flash *fled = &channel->fled; in __gb_lights_flash_led_register()
785 fset->min = channel->intensity_uA.min; in __gb_lights_flash_led_register()
786 fset->max = channel->intensity_uA.max; in __gb_lights_flash_led_register()
787 fset->step = channel->intensity_uA.step; in __gb_lights_flash_led_register()
788 fset->val = channel->intensity_uA.max; in __gb_lights_flash_led_register()
791 if (channel->mode & GB_CHANNEL_MODE_FLASH) { in __gb_lights_flash_led_register()
793 fset->min = channel->timeout_us.min; in __gb_lights_flash_led_register()
794 fset->max = channel->timeout_us.max; in __gb_lights_flash_led_register()
795 fset->step = channel->timeout_us.step; in __gb_lights_flash_led_register()
796 fset->val = channel->timeout_us.max; in __gb_lights_flash_led_register()
803 channel_torch = get_channel_from_mode(channel->light, in __gb_lights_flash_led_register()
806 ret = __gb_lights_channel_torch_attach(channel, channel_torch); in __gb_lights_flash_led_register()
815 channel->is_registered = true; in __gb_lights_flash_led_register()
818 channel->led = NULL; in __gb_lights_flash_led_register()
822 static void __gb_lights_flash_led_unregister(struct gb_channel *channel) in __gb_lights_flash_led_unregister() argument
824 if (!channel->is_registered) in __gb_lights_flash_led_unregister()
827 led_classdev_flash_unregister(&channel->fled); in __gb_lights_flash_led_unregister()
830 static int gb_lights_channel_flash_config(struct gb_channel *channel) in gb_lights_channel_flash_config() argument
832 struct gb_connection *connection = get_conn_from_channel(channel); in gb_lights_channel_flash_config()
838 req.light_id = channel->light->id; in gb_lights_channel_flash_config()
839 req.channel_id = channel->id; in gb_lights_channel_flash_config()
851 fset = &channel->intensity_uA; in gb_lights_channel_flash_config()
860 channel->led->max_brightness = (fset->max - fset->min) / fset->step; in gb_lights_channel_flash_config()
863 if (channel->mode & GB_CHANNEL_MODE_FLASH) { in gb_lights_channel_flash_config()
864 fset = &channel->timeout_us; in gb_lights_channel_flash_config()
873 static int gb_lights_channel_flash_config(struct gb_channel *channel) in gb_lights_channel_flash_config() argument
875 struct gb_connection *connection = get_conn_from_channel(channel); in gb_lights_channel_flash_config()
881 static int __gb_lights_flash_led_register(struct gb_channel *channel) in __gb_lights_flash_led_register() argument
886 static void __gb_lights_flash_led_unregister(struct gb_channel *channel) in __gb_lights_flash_led_unregister() argument
892 static int __gb_lights_led_register(struct gb_channel *channel) in __gb_lights_led_register() argument
894 struct gb_connection *connection = get_conn_from_channel(channel); in __gb_lights_led_register()
895 struct led_classdev *cdev = get_channel_cdev(channel); in __gb_lights_led_register()
900 channel->led = NULL; in __gb_lights_led_register()
902 channel->is_registered = true; in __gb_lights_led_register()
906 static int gb_lights_channel_register(struct gb_channel *channel) in gb_lights_channel_register() argument
909 if (!is_channel_flash(channel)) in gb_lights_channel_register()
910 return __gb_lights_led_register(channel); in gb_lights_channel_register()
916 if (!(channel->mode & GB_CHANNEL_MODE_TORCH)) in gb_lights_channel_register()
917 return __gb_lights_flash_led_register(channel); in gb_lights_channel_register()
922 static void __gb_lights_led_unregister(struct gb_channel *channel) in __gb_lights_led_unregister() argument
924 struct led_classdev *cdev = get_channel_cdev(channel); in __gb_lights_led_unregister()
926 if (!channel->is_registered) in __gb_lights_led_unregister()
932 channel->led = NULL; in __gb_lights_led_unregister()
935 static void gb_lights_channel_unregister(struct gb_channel *channel) in gb_lights_channel_unregister() argument
938 if (!is_channel_flash(channel)) { in gb_lights_channel_unregister()
939 __gb_lights_led_unregister(channel); in gb_lights_channel_unregister()
943 if (channel->mode & GB_CHANNEL_MODE_TORCH) in gb_lights_channel_unregister()
944 __gb_lights_led_unregister(channel); in gb_lights_channel_unregister()
946 __gb_lights_flash_led_unregister(channel); in gb_lights_channel_unregister()
950 struct gb_channel *channel) in gb_lights_channel_config() argument
955 struct led_classdev *cdev = get_channel_cdev(channel); in gb_lights_channel_config()
960 req.channel_id = channel->id; in gb_lights_channel_config()
967 channel->light = light; in gb_lights_channel_config()
968 channel->mode = le32_to_cpu(conf.mode); in gb_lights_channel_config()
969 channel->flags = le32_to_cpu(conf.flags); in gb_lights_channel_config()
970 channel->color = le32_to_cpu(conf.color); in gb_lights_channel_config()
971 channel->color_name = kstrndup(conf.color_name, NAMES_MAX, GFP_KERNEL); in gb_lights_channel_config()
972 if (!channel->color_name) in gb_lights_channel_config()
974 channel->mode_name = kstrndup(conf.mode_name, NAMES_MAX, GFP_KERNEL); in gb_lights_channel_config()
975 if (!channel->mode_name) in gb_lights_channel_config()
978 channel->led = cdev; in gb_lights_channel_config()
981 channel->color_name, channel->mode_name); in gb_lights_channel_config()
989 ret = channel_attr_groups_set(channel, cdev); in gb_lights_channel_config()
993 gb_lights_led_operations_set(channel, cdev); in gb_lights_channel_config()
1000 if (!is_channel_flash(channel)) in gb_lights_channel_config()
1005 return gb_lights_channel_flash_config(channel); in gb_lights_channel_config()
1083 static void gb_lights_channel_free(struct gb_channel *channel) in gb_lights_channel_free() argument
1085 kfree(channel->attrs); in gb_lights_channel_free()
1086 kfree(channel->attr_group); in gb_lights_channel_free()
1087 kfree(channel->attr_groups); in gb_lights_channel_free()
1088 kfree(channel->color_name); in gb_lights_channel_free()
1089 kfree(channel->mode_name); in gb_lights_channel_free()
1090 mutex_destroy(&channel->lock); in gb_lights_channel_free()
1093 static void gb_lights_channel_release(struct gb_channel *channel) in gb_lights_channel_release() argument
1095 channel->releasing = true; in gb_lights_channel_release()
1097 gb_lights_channel_unregister(channel); in gb_lights_channel_release()
1099 gb_lights_channel_free(channel); in gb_lights_channel_release()