Re: [PATCH v2] USB: Add MSM USB Device Controller driver

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

 



Hi Dave,

On 11/28/2010 12:00 PM, David Brownell wrote:

implementing specific hooks needed for MSM. I am relying on
gadget_is_xxx() macro for MSM specific workarounds.

NEVER DO THAT from inside controller drivers.

Here we are using the macro in ci13xxx_udc core which is included by
two gadget controller drivers.


(If the code isn't specific to the msm silicon, and works on
other vendors' implementations too, it'd misbehave anyway.

Those calls are for gadget drivers, e.g. to embed knowledge about
controller issues which can't be detected by looking at
what's advertised by the gadget controller device.  Using them isn't
encouraged.


Controller drivers should see what hardware they're talking to by
actually talking to the chip  and detecting any quirks (be they
revision-specific or otherwise).  In some cases platform_data will
be the way to package such information.


We need the following hooks/extension in ci13xxx_udc for MSM SoC.

1. MSM USB device controller depends on OTG driver for clocks, Low power mode, and PHY initialization. So udc_probe() must fail if otg_get_transceiver() fails.
2. By default streaming mode is enabled in ci13xxx controller. It has to be
disabled due to some known issues.
3. Currently, pull-up is enabled upon gadget driver registration. But we want to enable only upon VBUS presence. also controller must be reset before enabling
the pull-up as the controller was in host mode before.
4. Hardware registers should not be accessed in udc_probe()

I have started with flags to achieve the above and ended up with following:

TRANSCEIVER_IS_REQUIRED: Fail udc_probe() if otg_get_transceiver() == NULL
SKIP_RESET_IN_PROBE: avoid resetting the hardware in udc_prob()
ENABLE_PULLUP_UPON_VBUS: Enable pull-up upon VBUS
RESET_BEFORE_PULLUP: Reset the hardware before pull-up
DISABLE_STREAM_MODE: Disable streaming mode
A post reset callback to write into special registers after reset

I thought introducing this many flags may not be a good idea and used gadget_is_xxx() macro to achieve the same. if tomorrow, some gadget controller wants to fail udc_probe() if otg_get_tranceiver(), they can too OR their gadget_is_xxx() macro. If you say using
flags is not _bad_, I will take that approach.

Thanks,
Pavan

--
Sent by a consultant of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


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

  Powered by Linux