1*cba57ed6SMika Westerberg // SPDX-License-Identifier: GPL-2.0 2*cba57ed6SMika Westerberg /* 3*cba57ed6SMika Westerberg * ConfigFS support 4*cba57ed6SMika Westerberg * 5*cba57ed6SMika Westerberg * Copyright (C) 2026, Intel Corporation 6*cba57ed6SMika Westerberg * Author: Mika Westerberg <mika.westerberg@linux.intel.com> 7*cba57ed6SMika Westerberg */ 8*cba57ed6SMika Westerberg 9*cba57ed6SMika Westerberg #include <linux/configfs.h> 10*cba57ed6SMika Westerberg #include <linux/export.h> 11*cba57ed6SMika Westerberg 12*cba57ed6SMika Westerberg #include "tb.h" 13*cba57ed6SMika Westerberg 14*cba57ed6SMika Westerberg static const struct config_item_type tb_root_group_type = { 15*cba57ed6SMika Westerberg .ct_owner = THIS_MODULE, 16*cba57ed6SMika Westerberg }; 17*cba57ed6SMika Westerberg 18*cba57ed6SMika Westerberg static struct configfs_subsystem tb_configfs = { 19*cba57ed6SMika Westerberg .su_group = { 20*cba57ed6SMika Westerberg .cg_item = { 21*cba57ed6SMika Westerberg .ci_namebuf = "thunderbolt", 22*cba57ed6SMika Westerberg .ci_type = &tb_root_group_type, 23*cba57ed6SMika Westerberg }, 24*cba57ed6SMika Westerberg }, 25*cba57ed6SMika Westerberg }; 26*cba57ed6SMika Westerberg 27*cba57ed6SMika Westerberg /** 28*cba57ed6SMika Westerberg * tb_configfs_register_group() - Register Thunderbolt ConfigFS group 29*cba57ed6SMika Westerberg * @group: Group to register. 30*cba57ed6SMika Westerberg * 31*cba57ed6SMika Westerberg * Registers the new @group under Thunderbolt subsystem ConfigFS. 32*cba57ed6SMika Westerberg * 33*cba57ed6SMika Westerberg * Return: 0% in case of success, negative errno otherwise. 34*cba57ed6SMika Westerberg */ 35*cba57ed6SMika Westerberg int tb_configfs_register_group(struct config_group *group) 36*cba57ed6SMika Westerberg { 37*cba57ed6SMika Westerberg return configfs_register_group(&tb_configfs.su_group, group); 38*cba57ed6SMika Westerberg } 39*cba57ed6SMika Westerberg EXPORT_SYMBOL_GPL(tb_configfs_register_group); 40*cba57ed6SMika Westerberg 41*cba57ed6SMika Westerberg /** 42*cba57ed6SMika Westerberg * tb_configfs_unregister_group() - Unregister previously registered group 43*cba57ed6SMika Westerberg * @group: Group to unregister. 44*cba57ed6SMika Westerberg */ 45*cba57ed6SMika Westerberg void tb_configfs_unregister_group(struct config_group *group) 46*cba57ed6SMika Westerberg { 47*cba57ed6SMika Westerberg configfs_unregister_group(group); 48*cba57ed6SMika Westerberg } 49*cba57ed6SMika Westerberg EXPORT_SYMBOL_GPL(tb_configfs_unregister_group); 50*cba57ed6SMika Westerberg 51*cba57ed6SMika Westerberg int tb_configfs_init(void) 52*cba57ed6SMika Westerberg { 53*cba57ed6SMika Westerberg config_group_init(&tb_configfs.su_group); 54*cba57ed6SMika Westerberg mutex_init(&tb_configfs.su_mutex); 55*cba57ed6SMika Westerberg return configfs_register_subsystem(&tb_configfs); 56*cba57ed6SMika Westerberg } 57*cba57ed6SMika Westerberg 58*cba57ed6SMika Westerberg void tb_configfs_exit(void) 59*cba57ed6SMika Westerberg { 60*cba57ed6SMika Westerberg configfs_unregister_subsystem(&tb_configfs); 61*cba57ed6SMika Westerberg } 62