Re: [linux-usb-devel] [RFC] USB: driver for iphone charging

Greg KH <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.usb.devel
Message-ID <[email protected]>
On Fri, Aug 24, 2007 at 10:08:46AM -0400, Alan Stern wrote:
> On Fri, 24 Aug 2007, Oliver Neukum wrote:
> 
> > This schedules the change via a workqueue, so you'll be reprobed. If you
> > fire of the first vendor command you are doing so before the configuration
> > is changed. How is this supposed to work?
> 
> I would do it like this:
> 
> static int iphone_probe(struct usb_interface *intf,
> 			const struct usb_device_id *id)
> {
> 	struct usb_device *udev = interface_to_usbdev(intf);
> 	int rc;
> 
> 	if (udev->actconfig->desc.bConfigurationValue != 3) {
> 		dbg(&udev->dev, "Calling set_configuration\n");
> 		rc = usb_driver_set_configuration(udev, 3);
> 	} else {
> 		dbg(&udev->dev, "Configuration set, sending magic comand\n");
> 		rc = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
> 				0x40, (USB_DIR_OUT | USB_TYPE_VENDOR |
> 					USB_RECIP_DEVICE),
> 				0x6400, 0, NULL, 0, 1000);
> 	}
> 	if (rc)
> 		dev_err(&udev->dev, "Command failed: %d\n", rc);
> 
> 	/* we don't really want to bind to the device, userspace programs can
> 	 * handle the syncing just fine, so get outta here. */
> 	return -ENODEV;
> }

Yeah, that would make more sense, if that is what is needed.

Can someone with a iphone test this out?  If you look at how the
berry_charge driver does it, the set_config stuff happens after the
magic command.  As I don't have an iphone, nor have I ever seen any
dumps of the command streams, I don't really know if the set_config
message really is necessary or not.

thanks,

greg k-h
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.