Re: Driver for something that's neither a device nor an interface driver?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 27 Sep 2019, Bastien Nocera wrote:

> Hey,
> 
> I'm trying to write a "power supply" class driver for Apple MFi
> devices, and struggling a little with the USB drivers.
> 
> To ask many Apple devices to draw more power, we need to make a call to
> the device using a vendor command. It doesn't go to an interface, but
> to the device itself.
> 
> The call done in the kernel would look something like:
> usb_control_msg(mfi->udev, usb_sndctrlpipe(mfi->udev, 0), 
>                 0x40, /* Vendor-defined USB get enabled capabilities request. */
>                 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
>                 current_ma, /* wValue, current offset */
>                 current_ma, /* wIndex, current offset */
>                 NULL, 0, USB_CTRL_GET_TIMEOUT);
> 
> But I can't figure out what type of driver I'd need to just be able to
> export that power_supply interface.
> 
> Trying to use a "struct usb_device_driver" didn't work as probe
> functions were never called, and a "struct usb_driver" gets unbound
> after user-space and the ipheth drivers comes around.
> 
> This is my "struct usb_driver" attempt:
> https://github.com/hadess/apple-mfi-fastcharge
> 
> Any ideas what type of driver, or what trick I should be using here?

Is there any reason this needs to be done in a kernel driver?  Can it 
be handled from userspace instead?

You said this was for a "power supply" class driver.  It's not clear 
what that means -- the devices you want to communicate with are 
iphones, ipads, etc., not power supplies.

Under what circumstances would these messages need to get sent?  What 
piece of code is responsible for them?

If necessary, you can modify the core/generic.c driver.  However that 
might not be the right approach, considering that this is meant only 
for devices manufactured by Apple.

Alan Stern




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux