From 3272819bfcb77d28b864c3337fb4d94676e22265 Mon Sep 17 00:00:00 2001 From: Marek Szyprowski Date: Tue, 8 Oct 2024 11:02:07 +0200 Subject: [PATCH] extcon: add fixed (always connected) USB extcon driver Some boards doesn't have capability of detecting USB cable connection and thus doesn't implement any extcon driver. Add simple, fixed, always connected USB extcon driver to notify Tizen that USB cable is indeed connected and let it start SDB/MTP services. Change-Id: I33d3e4cfa9a7f259312cef38e08c19a166f61a27 Signed-off-by: Marek Szyprowski --- kernel/Makefile | 2 ++ kernel/extcon-usb-fixed.c | 57 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 kernel/extcon-usb-fixed.c diff --git a/kernel/Makefile b/kernel/Makefile index e0d8a3f..db51bcd 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -21,6 +21,7 @@ CFLAGS_inform-reboot.o += -DTIZEN_INFORM_PATH="\"$(TIZEN_INFORM_PATH)\"" # it won't get automatically build in packages using it (that would break these automatically as file list # would no longer match). BUILD_dm_bow ?= n +BUILD_extcon_usb_fixed ?= n BUILD_inform_reboot ?= n BUILD_logger ?= n BUILD_proc_tsm ?= n @@ -28,6 +29,7 @@ BUILD_kdbus ?= n BUILD_zlogger ?= n obj-$(BUILD_dm_bow) += dm-bow.o +obj-$(BUILD_extcon_usb_fixed) += extcon-usb-fixed.o obj-$(BUILD_inform_reboot) += inform-reboot.o obj-$(BUILD_logger) += logger.o obj-$(BUILD_proc_tsm) += proc-tsm.o diff --git a/kernel/extcon-usb-fixed.c b/kernel/extcon-usb-fixed.c new file mode 100644 index 0000000..aa6aeeb --- /dev/null +++ b/kernel/extcon-usb-fixed.c @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * extcon_usb_fixed.c - Fixed state (always connected) USB extcon driver + * + * Copyright (C) 2024 Samsung Electrnoics + * Author: Marek Szyprowski + */ + +#include +#include +#include +#include +#include + +static struct extcon_dev *edev; + +static const unsigned int supported_cable[] = { + EXTCON_USB, + EXTCON_NONE, +}; + +static struct platform_device extcon_usb_fixed_dev = { + .name = "extcon_usb_fixed", +}; + +static int fixed_usb_extcon_init(void) +{ + int ret; + + ret = platform_device_register(&extcon_usb_fixed_dev); + if (ret) + return ret; + + edev = devm_extcon_dev_allocate(&extcon_usb_fixed_dev.dev, supported_cable); + if (IS_ERR(edev)) + return PTR_ERR(edev); + + ret = devm_extcon_dev_register(&extcon_usb_fixed_dev.dev, edev); + if (ret) + return ret; + + extcon_set_state_sync(edev, EXTCON_USB, true); + + return 0; +} + +static void fixed_usb_extcon_exit(void) +{ + platform_device_unregister(&extcon_usb_fixed_dev); +} + +module_init(fixed_usb_extcon_init); +module_exit(fixed_usb_extcon_exit); + +MODULE_AUTHOR("Marek Szyprowski "); +MODULE_DESCRIPTION("Fixed USB extcon driver"); +MODULE_LICENSE("GPL"); -- 2.34.1