当前位置: 首页 > news >正文

linux USB --- 监听 USB 角色

 

#include <linux/device.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/gpio/consumer.h>
#include <linux/platform_device.h>
#include <linux/usb/typec_dp.h>
#include <linux/usb/typec_mux.h>
#include <linux/usb/role.h>
#include <linux/kernel.h>
#include <linux/of_device.h>
#include <linux/of_gpio.h>struct usb_switch {struct device *dev;struct usb_role_switch *usb_role;struct mutex lock;char role;
};static int usb_switch_set_role(struct usb_role_switch *sw, enum usb_role role)
{struct usb_switch *usb_switch = usb_role_switch_get_drvdata(sw);struct device *dev = usb_switch->dev;// struct platform_device *pdev = container_of(sw, struct platform_device, usb_role);// struct usb_switch *usb_switch = platform_get_drvdata(pdev);
    printk("%s role=%d\n", __func__, role);usb_switch->role = role;kobject_uevent(&dev->kobj, KOBJ_CHANGE);return 0;
}static enum usb_role usb_switch_get_role(struct usb_role_switch *sw)
{// struct platform_device *pdev = container_of(dev, struct platform_device, dev);// struct usb_switch *usb_switch = platform_get_drvdata(pdev);struct usb_switch *usb_switch = usb_role_switch_get_drvdata(sw);// struct device *dev = usb_switch->dev;
    printk("%s role=%d\n", __func__, usb_switch->role);return usb_switch->role;
}static ssize_t role_show(struct device *dev, struct device_attribute *attr, char *buf)
{struct platform_device *pdev = container_of(dev, struct platform_device, dev);struct usb_switch *usb_switch = platform_get_drvdata(pdev);return sprintf(buf, "%d", usb_switch->role);
}DEVICE_ATTR(role, S_IRUGO, role_show, NULL);static int usb_switch_probe(struct platform_device *pdev)
{int ret;struct usb_role_switch_desc role_desc = {};struct device *dev = &pdev->dev;struct usb_switch *usb_switch;printk("%s start\n", __func__);usb_switch = devm_kzalloc(dev, sizeof(*usb_switch), GFP_KERNEL);if (!usb_switch)return -ENOMEM;usb_switch->dev = dev;platform_set_drvdata(pdev, usb_switch);mutex_init(&usb_switch->lock);role_desc.set = usb_switch_set_role;role_desc.get = usb_switch_get_role;role_desc.allow_userspace_control = true;role_desc.fwnode = dev_fwnode(dev);role_desc.driver_data = usb_switch;usb_switch->usb_role = usb_role_switch_register(dev, &role_desc);if (IS_ERR(usb_switch->usb_role)){dev_err(dev, "failed to register typec switch\n");return ret;}device_create_file(dev, &dev_attr_role);// platform_set_drvdata(pdev, usb_switch);return 0;
}static int usb_switch_remove(struct platform_device *pdev)
{struct device *dev = &pdev->dev;struct usb_switch *usb_switch = platform_get_drvdata(pdev);device_remove_file(dev, &dev_attr_role);usb_role_switch_unregister(usb_switch->usb_role);return 0;
}static const struct of_device_id usb_switch_match[] = {{.compatible = "usb-switch",},{}
};
MODULE_DEVICE_TABLE(of, usb_switch_match);static struct platform_driver usb_switch_driver = {.probe = usb_switch_probe,.remove = usb_switch_remove,.driver = {.name = "usb_switch",.of_match_table = usb_switch_match,},
};
module_platform_driver(usb_switch_driver);MODULE_AUTHOR("XXX");
MODULE_DESCRIPTION("usb-switch driver");
MODULE_LICENSE("GPL");

 

http://www.jsqmd.com/news/39664/

相关文章:

  • 温州工友自动包装设备有限公司:专注螺丝五金智能包装,助力企业降本增效
  • 25.11.09
  • NOI2025 游记
  • NOIP 考前做题计划
  • 网络攻防实战 lab06 靶机 VulnHub hard-socnet2
  • [豪の学习笔记] Spring框架学习碎碎念#5
  • Docker部署Code-Server,实现远程写代码
  • 2025 年 11 月电力金具厂家最新推荐,精准检测与稳定性能深度解析!
  • 2025 年 11 月铁附件厂家最新推荐,聚焦资质、案例、售后的五家企业深度解读!
  • LucaOne模型的词汇表系统
  • v4l2用户侧使用流程
  • 2025 年终端数据安全软件公司推荐数篷科技(深圳)有限公司,数据安全领域的坚实力量
  • Day37(7)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\springboot-web-01
  • 网络协议工程 - eNSP及相关软件安装 - [eNSP, VirtualBox, WinPcap, Wireshark, Win7] - 教程
  • 20232314 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 20232314 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 深度学习实验一之图像特征提取和深度学习训练数据标注 - 实践
  • 题解:ABC232G Modulo Shortest Path
  • 如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程,附安装包)
  • 题解:P3791 普通数学题
  • 芒格变富的逻辑
  • 基于Ai元人文构想的关系图
  • Numerical results of ar-HTMDFP in AMS 2025
  • 题解:P10360 [PA 2024] Desant 3
  • 软件项目管理工具推荐|飞书项目 vs Asana vs ClickUp vs Jira
  • 11.13 模拟赛 T3
  • 再加个数学专题
  • 再加个数学专题
  • QF-Lib:用一个库搞定Python量化回测和策略开发
  • 动态路由协议