cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

phy-isp1301-omap.c (40723B)


      1// SPDX-License-Identifier: GPL-2.0+
      2/*
      3 * isp1301_omap - ISP 1301 USB transceiver, talking to OMAP OTG controller
      4 *
      5 * Copyright (C) 2004 Texas Instruments
      6 * Copyright (C) 2004 David Brownell
      7 */
      8
      9#include <linux/kernel.h>
     10#include <linux/module.h>
     11#include <linux/init.h>
     12#include <linux/slab.h>
     13#include <linux/interrupt.h>
     14#include <linux/platform_device.h>
     15#include <linux/gpio/consumer.h>
     16#include <linux/usb/ch9.h>
     17#include <linux/usb/gadget.h>
     18#include <linux/usb.h>
     19#include <linux/usb/otg.h>
     20#include <linux/i2c.h>
     21#include <linux/workqueue.h>
     22
     23#include <asm/irq.h>
     24#include <asm/mach-types.h>
     25
     26#include <linux/soc/ti/omap1-mux.h>
     27#include <linux/soc/ti/omap1-usb.h>
     28#include <linux/soc/ti/omap1-io.h>
     29
     30#undef VERBOSE
     31
     32
     33#define	DRIVER_VERSION	"24 August 2004"
     34#define	DRIVER_NAME	(isp1301_driver.driver.name)
     35
     36MODULE_DESCRIPTION("ISP1301 USB OTG Transceiver Driver");
     37MODULE_LICENSE("GPL");
     38
     39struct isp1301 {
     40	struct usb_phy		phy;
     41	struct i2c_client	*client;
     42	void			(*i2c_release)(struct device *dev);
     43
     44	int			irq_type;
     45
     46	u32			last_otg_ctrl;
     47	unsigned		working:1;
     48
     49	struct timer_list	timer;
     50
     51	/* use keventd context to change the state for us */
     52	struct work_struct	work;
     53
     54	unsigned long		todo;
     55#		define WORK_UPDATE_ISP	0	/* update ISP from OTG */
     56#		define WORK_UPDATE_OTG	1	/* update OTG from ISP */
     57#		define WORK_HOST_RESUME	4	/* resume host */
     58#		define WORK_TIMER	6	/* timer fired */
     59#		define WORK_STOP	7	/* don't resubmit */
     60};
     61
     62
     63/* bits in OTG_CTRL */
     64
     65#define	OTG_XCEIV_OUTPUTS \
     66	(OTG_ASESSVLD|OTG_BSESSEND|OTG_BSESSVLD|OTG_VBUSVLD|OTG_ID)
     67#define	OTG_XCEIV_INPUTS \
     68	(OTG_PULLDOWN|OTG_PULLUP|OTG_DRV_VBUS|OTG_PD_VBUS|OTG_PU_VBUS|OTG_PU_ID)
     69#define	OTG_CTRL_BITS \
     70	(OTG_A_BUSREQ|OTG_A_SETB_HNPEN|OTG_B_BUSREQ|OTG_B_HNPEN|OTG_BUSDROP)
     71	/* and OTG_PULLUP is sometimes written */
     72
     73#define	OTG_CTRL_MASK	(OTG_DRIVER_SEL| \
     74	OTG_XCEIV_OUTPUTS|OTG_XCEIV_INPUTS| \
     75	OTG_CTRL_BITS)
     76
     77
     78/*-------------------------------------------------------------------------*/
     79
     80/* board-specific PM hooks */
     81
     82#if defined(CONFIG_MACH_OMAP_H2) || defined(CONFIG_MACH_OMAP_H3)
     83
     84#if IS_REACHABLE(CONFIG_TPS65010)
     85
     86#include <linux/mfd/tps65010.h>
     87
     88#else
     89
     90static inline int tps65010_set_vbus_draw(unsigned mA)
     91{
     92	pr_debug("tps65010: draw %d mA (STUB)\n", mA);
     93	return 0;
     94}
     95
     96#endif
     97
     98static void enable_vbus_draw(struct isp1301 *isp, unsigned mA)
     99{
    100	int status = tps65010_set_vbus_draw(mA);
    101	if (status < 0)
    102		pr_debug("  VBUS %d mA error %d\n", mA, status);
    103}
    104
    105#else
    106
    107static void enable_vbus_draw(struct isp1301 *isp, unsigned mA)
    108{
    109	/* H4 controls this by DIP switch S2.4; no soft control.
    110	 * ON means the charger is always enabled.  Leave it OFF
    111	 * unless the OTG port is used only in B-peripheral mode.
    112	 */
    113}
    114
    115#endif
    116
    117static void enable_vbus_source(struct isp1301 *isp)
    118{
    119	/* this board won't supply more than 8mA vbus power.
    120	 * some boards can switch a 100ma "unit load" (or more).
    121	 */
    122}
    123
    124
    125/* products will deliver OTG messages with LEDs, GUI, etc */
    126static inline void notresponding(struct isp1301 *isp)
    127{
    128	printk(KERN_NOTICE "OTG device not responding.\n");
    129}
    130
    131
    132/*-------------------------------------------------------------------------*/
    133
    134static struct i2c_driver isp1301_driver;
    135
    136/* smbus apis are used for portability */
    137
    138static inline u8
    139isp1301_get_u8(struct isp1301 *isp, u8 reg)
    140{
    141	return i2c_smbus_read_byte_data(isp->client, reg + 0);
    142}
    143
    144static inline int
    145isp1301_get_u16(struct isp1301 *isp, u8 reg)
    146{
    147	return i2c_smbus_read_word_data(isp->client, reg);
    148}
    149
    150static inline int
    151isp1301_set_bits(struct isp1301 *isp, u8 reg, u8 bits)
    152{
    153	return i2c_smbus_write_byte_data(isp->client, reg + 0, bits);
    154}
    155
    156static inline int
    157isp1301_clear_bits(struct isp1301 *isp, u8 reg, u8 bits)
    158{
    159	return i2c_smbus_write_byte_data(isp->client, reg + 1, bits);
    160}
    161
    162/*-------------------------------------------------------------------------*/
    163
    164/* identification */
    165#define	ISP1301_VENDOR_ID		0x00	/* u16 read */
    166#define	ISP1301_PRODUCT_ID		0x02	/* u16 read */
    167#define	ISP1301_BCD_DEVICE		0x14	/* u16 read */
    168
    169#define	I2C_VENDOR_ID_PHILIPS		0x04cc
    170#define	I2C_PRODUCT_ID_PHILIPS_1301	0x1301
    171
    172/* operational registers */
    173#define	ISP1301_MODE_CONTROL_1		0x04	/* u8 read, set, +1 clear */
    174#	define	MC1_SPEED		(1 << 0)
    175#	define	MC1_SUSPEND		(1 << 1)
    176#	define	MC1_DAT_SE0		(1 << 2)
    177#	define	MC1_TRANSPARENT		(1 << 3)
    178#	define	MC1_BDIS_ACON_EN	(1 << 4)
    179#	define	MC1_OE_INT_EN		(1 << 5)
    180#	define	MC1_UART_EN		(1 << 6)
    181#	define	MC1_MASK		0x7f
    182#define	ISP1301_MODE_CONTROL_2		0x12	/* u8 read, set, +1 clear */
    183#	define	MC2_GLOBAL_PWR_DN	(1 << 0)
    184#	define	MC2_SPD_SUSP_CTRL	(1 << 1)
    185#	define	MC2_BI_DI		(1 << 2)
    186#	define	MC2_TRANSP_BDIR0	(1 << 3)
    187#	define	MC2_TRANSP_BDIR1	(1 << 4)
    188#	define	MC2_AUDIO_EN		(1 << 5)
    189#	define	MC2_PSW_EN		(1 << 6)
    190#	define	MC2_EN2V7		(1 << 7)
    191#define	ISP1301_OTG_CONTROL_1		0x06	/* u8 read, set, +1 clear */
    192#	define	OTG1_DP_PULLUP		(1 << 0)
    193#	define	OTG1_DM_PULLUP		(1 << 1)
    194#	define	OTG1_DP_PULLDOWN	(1 << 2)
    195#	define	OTG1_DM_PULLDOWN	(1 << 3)
    196#	define	OTG1_ID_PULLDOWN	(1 << 4)
    197#	define	OTG1_VBUS_DRV		(1 << 5)
    198#	define	OTG1_VBUS_DISCHRG	(1 << 6)
    199#	define	OTG1_VBUS_CHRG		(1 << 7)
    200#define	ISP1301_OTG_STATUS		0x10	/* u8 readonly */
    201#	define	OTG_B_SESS_END		(1 << 6)
    202#	define	OTG_B_SESS_VLD		(1 << 7)
    203
    204#define	ISP1301_INTERRUPT_SOURCE	0x08	/* u8 read */
    205#define	ISP1301_INTERRUPT_LATCH		0x0A	/* u8 read, set, +1 clear */
    206
    207#define	ISP1301_INTERRUPT_FALLING	0x0C	/* u8 read, set, +1 clear */
    208#define	ISP1301_INTERRUPT_RISING	0x0E	/* u8 read, set, +1 clear */
    209
    210/* same bitfields in all interrupt registers */
    211#	define	INTR_VBUS_VLD		(1 << 0)
    212#	define	INTR_SESS_VLD		(1 << 1)
    213#	define	INTR_DP_HI		(1 << 2)
    214#	define	INTR_ID_GND		(1 << 3)
    215#	define	INTR_DM_HI		(1 << 4)
    216#	define	INTR_ID_FLOAT		(1 << 5)
    217#	define	INTR_BDIS_ACON		(1 << 6)
    218#	define	INTR_CR_INT		(1 << 7)
    219
    220/*-------------------------------------------------------------------------*/
    221
    222static inline const char *state_name(struct isp1301 *isp)
    223{
    224	return usb_otg_state_string(isp->phy.otg->state);
    225}
    226
    227/*-------------------------------------------------------------------------*/
    228
    229/* NOTE:  some of this ISP1301 setup is specific to H2 boards;
    230 * not everything is guarded by board-specific checks, or even using
    231 * omap_usb_config data to deduce MC1_DAT_SE0 and MC2_BI_DI.
    232 *
    233 * ALSO:  this currently doesn't use ISP1301 low-power modes
    234 * while OTG is running.
    235 */
    236
    237static void power_down(struct isp1301 *isp)
    238{
    239	isp->phy.otg->state = OTG_STATE_UNDEFINED;
    240
    241	// isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2, MC2_GLOBAL_PWR_DN);
    242	isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_SUSPEND);
    243
    244	isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_ID_PULLDOWN);
    245	isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
    246}
    247
    248static void __maybe_unused power_up(struct isp1301 *isp)
    249{
    250	// isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_2, MC2_GLOBAL_PWR_DN);
    251	isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1, MC1_SUSPEND);
    252
    253	/* do this only when cpu is driving transceiver,
    254	 * so host won't see a low speed device...
    255	 */
    256	isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
    257}
    258
    259#define	NO_HOST_SUSPEND
    260
    261static int host_suspend(struct isp1301 *isp)
    262{
    263#ifdef	NO_HOST_SUSPEND
    264	return 0;
    265#else
    266	struct device	*dev;
    267
    268	if (!isp->phy.otg->host)
    269		return -ENODEV;
    270
    271	/* Currently ASSUMES only the OTG port matters;
    272	 * other ports could be active...
    273	 */
    274	dev = isp->phy.otg->host->controller;
    275	return dev->driver->suspend(dev, 3, 0);
    276#endif
    277}
    278
    279static int host_resume(struct isp1301 *isp)
    280{
    281#ifdef	NO_HOST_SUSPEND
    282	return 0;
    283#else
    284	struct device	*dev;
    285
    286	if (!isp->phy.otg->host)
    287		return -ENODEV;
    288
    289	dev = isp->phy.otg->host->controller;
    290	return dev->driver->resume(dev, 0);
    291#endif
    292}
    293
    294static int gadget_suspend(struct isp1301 *isp)
    295{
    296	isp->phy.otg->gadget->b_hnp_enable = 0;
    297	isp->phy.otg->gadget->a_hnp_support = 0;
    298	isp->phy.otg->gadget->a_alt_hnp_support = 0;
    299	return usb_gadget_vbus_disconnect(isp->phy.otg->gadget);
    300}
    301
    302/*-------------------------------------------------------------------------*/
    303
    304#define	TIMER_MINUTES	10
    305#define	TIMER_JIFFIES	(TIMER_MINUTES * 60 * HZ)
    306
    307/* Almost all our I2C messaging comes from a work queue's task context.
    308 * NOTE: guaranteeing certain response times might mean we shouldn't
    309 * share keventd's work queue; a realtime task might be safest.
    310 */
    311static void isp1301_defer_work(struct isp1301 *isp, int work)
    312{
    313	int status;
    314
    315	if (isp && !test_and_set_bit(work, &isp->todo)) {
    316		(void) get_device(&isp->client->dev);
    317		status = schedule_work(&isp->work);
    318		if (!status && !isp->working)
    319			dev_vdbg(&isp->client->dev,
    320				"work item %d may be lost\n", work);
    321	}
    322}
    323
    324/* called from irq handlers */
    325static void a_idle(struct isp1301 *isp, const char *tag)
    326{
    327	u32 l;
    328
    329	if (isp->phy.otg->state == OTG_STATE_A_IDLE)
    330		return;
    331
    332	isp->phy.otg->default_a = 1;
    333	if (isp->phy.otg->host) {
    334		isp->phy.otg->host->is_b_host = 0;
    335		host_suspend(isp);
    336	}
    337	if (isp->phy.otg->gadget) {
    338		isp->phy.otg->gadget->is_a_peripheral = 1;
    339		gadget_suspend(isp);
    340	}
    341	isp->phy.otg->state = OTG_STATE_A_IDLE;
    342	l = omap_readl(OTG_CTRL) & OTG_XCEIV_OUTPUTS;
    343	omap_writel(l, OTG_CTRL);
    344	isp->last_otg_ctrl = l;
    345	pr_debug("  --> %s/%s\n", state_name(isp), tag);
    346}
    347
    348/* called from irq handlers */
    349static void b_idle(struct isp1301 *isp, const char *tag)
    350{
    351	u32 l;
    352
    353	if (isp->phy.otg->state == OTG_STATE_B_IDLE)
    354		return;
    355
    356	isp->phy.otg->default_a = 0;
    357	if (isp->phy.otg->host) {
    358		isp->phy.otg->host->is_b_host = 1;
    359		host_suspend(isp);
    360	}
    361	if (isp->phy.otg->gadget) {
    362		isp->phy.otg->gadget->is_a_peripheral = 0;
    363		gadget_suspend(isp);
    364	}
    365	isp->phy.otg->state = OTG_STATE_B_IDLE;
    366	l = omap_readl(OTG_CTRL) & OTG_XCEIV_OUTPUTS;
    367	omap_writel(l, OTG_CTRL);
    368	isp->last_otg_ctrl = l;
    369	pr_debug("  --> %s/%s\n", state_name(isp), tag);
    370}
    371
    372static void
    373dump_regs(struct isp1301 *isp, const char *label)
    374{
    375	u8	ctrl = isp1301_get_u8(isp, ISP1301_OTG_CONTROL_1);
    376	u8	status = isp1301_get_u8(isp, ISP1301_OTG_STATUS);
    377	u8	src = isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE);
    378
    379	pr_debug("otg: %06x, %s %s, otg/%02x stat/%02x.%02x\n",
    380		omap_readl(OTG_CTRL), label, state_name(isp),
    381		ctrl, status, src);
    382	/* mode control and irq enables don't change much */
    383}
    384
    385/*-------------------------------------------------------------------------*/
    386
    387#ifdef	CONFIG_USB_OTG
    388
    389/*
    390 * The OMAP OTG controller handles most of the OTG state transitions.
    391 *
    392 * We translate isp1301 outputs (mostly voltage comparator status) into
    393 * OTG inputs; OTG outputs (mostly pullup/pulldown controls) and HNP state
    394 * flags into isp1301 inputs ... and infer state transitions.
    395 */
    396
    397#ifdef	VERBOSE
    398
    399static void check_state(struct isp1301 *isp, const char *tag)
    400{
    401	enum usb_otg_state	state = OTG_STATE_UNDEFINED;
    402	u8			fsm = omap_readw(OTG_TEST) & 0x0ff;
    403	unsigned		extra = 0;
    404
    405	switch (fsm) {
    406
    407	/* default-b */
    408	case 0x0:
    409		state = OTG_STATE_B_IDLE;
    410		break;
    411	case 0x3:
    412	case 0x7:
    413		extra = 1;
    414	case 0x1:
    415		state = OTG_STATE_B_PERIPHERAL;
    416		break;
    417	case 0x11:
    418		state = OTG_STATE_B_SRP_INIT;
    419		break;
    420
    421	/* extra dual-role default-b states */
    422	case 0x12:
    423	case 0x13:
    424	case 0x16:
    425		extra = 1;
    426	case 0x17:
    427		state = OTG_STATE_B_WAIT_ACON;
    428		break;
    429	case 0x34:
    430		state = OTG_STATE_B_HOST;
    431		break;
    432
    433	/* default-a */
    434	case 0x36:
    435		state = OTG_STATE_A_IDLE;
    436		break;
    437	case 0x3c:
    438		state = OTG_STATE_A_WAIT_VFALL;
    439		break;
    440	case 0x7d:
    441		state = OTG_STATE_A_VBUS_ERR;
    442		break;
    443	case 0x9e:
    444	case 0x9f:
    445		extra = 1;
    446	case 0x89:
    447		state = OTG_STATE_A_PERIPHERAL;
    448		break;
    449	case 0xb7:
    450		state = OTG_STATE_A_WAIT_VRISE;
    451		break;
    452	case 0xb8:
    453		state = OTG_STATE_A_WAIT_BCON;
    454		break;
    455	case 0xb9:
    456		state = OTG_STATE_A_HOST;
    457		break;
    458	case 0xba:
    459		state = OTG_STATE_A_SUSPEND;
    460		break;
    461	default:
    462		break;
    463	}
    464	if (isp->phy.otg->state == state && !extra)
    465		return;
    466	pr_debug("otg: %s FSM %s/%02x, %s, %06x\n", tag,
    467		usb_otg_state_string(state), fsm, state_name(isp),
    468		omap_readl(OTG_CTRL));
    469}
    470
    471#else
    472
    473static inline void check_state(struct isp1301 *isp, const char *tag) { }
    474
    475#endif
    476
    477/* outputs from ISP1301_INTERRUPT_SOURCE */
    478static void update_otg1(struct isp1301 *isp, u8 int_src)
    479{
    480	u32	otg_ctrl;
    481
    482	otg_ctrl = omap_readl(OTG_CTRL) & OTG_CTRL_MASK;
    483	otg_ctrl &= ~OTG_XCEIV_INPUTS;
    484	otg_ctrl &= ~(OTG_ID|OTG_ASESSVLD|OTG_VBUSVLD);
    485
    486	if (int_src & INTR_SESS_VLD)
    487		otg_ctrl |= OTG_ASESSVLD;
    488	else if (isp->phy.otg->state == OTG_STATE_A_WAIT_VFALL) {
    489		a_idle(isp, "vfall");
    490		otg_ctrl &= ~OTG_CTRL_BITS;
    491	}
    492	if (int_src & INTR_VBUS_VLD)
    493		otg_ctrl |= OTG_VBUSVLD;
    494	if (int_src & INTR_ID_GND) {		/* default-A */
    495		if (isp->phy.otg->state == OTG_STATE_B_IDLE
    496				|| isp->phy.otg->state
    497					== OTG_STATE_UNDEFINED) {
    498			a_idle(isp, "init");
    499			return;
    500		}
    501	} else {				/* default-B */
    502		otg_ctrl |= OTG_ID;
    503		if (isp->phy.otg->state == OTG_STATE_A_IDLE
    504			|| isp->phy.otg->state == OTG_STATE_UNDEFINED) {
    505			b_idle(isp, "init");
    506			return;
    507		}
    508	}
    509	omap_writel(otg_ctrl, OTG_CTRL);
    510}
    511
    512/* outputs from ISP1301_OTG_STATUS */
    513static void update_otg2(struct isp1301 *isp, u8 otg_status)
    514{
    515	u32	otg_ctrl;
    516
    517	otg_ctrl = omap_readl(OTG_CTRL) & OTG_CTRL_MASK;
    518	otg_ctrl &= ~OTG_XCEIV_INPUTS;
    519	otg_ctrl &= ~(OTG_BSESSVLD | OTG_BSESSEND);
    520	if (otg_status & OTG_B_SESS_VLD)
    521		otg_ctrl |= OTG_BSESSVLD;
    522	else if (otg_status & OTG_B_SESS_END)
    523		otg_ctrl |= OTG_BSESSEND;
    524	omap_writel(otg_ctrl, OTG_CTRL);
    525}
    526
    527/* inputs going to ISP1301 */
    528static void otg_update_isp(struct isp1301 *isp)
    529{
    530	u32	otg_ctrl, otg_change;
    531	u8	set = OTG1_DM_PULLDOWN, clr = OTG1_DM_PULLUP;
    532
    533	otg_ctrl = omap_readl(OTG_CTRL);
    534	otg_change = otg_ctrl ^ isp->last_otg_ctrl;
    535	isp->last_otg_ctrl = otg_ctrl;
    536	otg_ctrl = otg_ctrl & OTG_XCEIV_INPUTS;
    537
    538	switch (isp->phy.otg->state) {
    539	case OTG_STATE_B_IDLE:
    540	case OTG_STATE_B_PERIPHERAL:
    541	case OTG_STATE_B_SRP_INIT:
    542		if (!(otg_ctrl & OTG_PULLUP)) {
    543			// if (otg_ctrl & OTG_B_HNPEN) {
    544			if (isp->phy.otg->gadget->b_hnp_enable) {
    545				isp->phy.otg->state = OTG_STATE_B_WAIT_ACON;
    546				pr_debug("  --> b_wait_acon\n");
    547			}
    548			goto pulldown;
    549		}
    550pullup:
    551		set |= OTG1_DP_PULLUP;
    552		clr |= OTG1_DP_PULLDOWN;
    553		break;
    554	case OTG_STATE_A_SUSPEND:
    555	case OTG_STATE_A_PERIPHERAL:
    556		if (otg_ctrl & OTG_PULLUP)
    557			goto pullup;
    558		fallthrough;
    559	// case OTG_STATE_B_WAIT_ACON:
    560	default:
    561pulldown:
    562		set |= OTG1_DP_PULLDOWN;
    563		clr |= OTG1_DP_PULLUP;
    564		break;
    565	}
    566
    567#	define toggle(OTG,ISP) do { \
    568		if (otg_ctrl & OTG) set |= ISP; \
    569		else clr |= ISP; \
    570		} while (0)
    571
    572	if (!(isp->phy.otg->host))
    573		otg_ctrl &= ~OTG_DRV_VBUS;
    574
    575	switch (isp->phy.otg->state) {
    576	case OTG_STATE_A_SUSPEND:
    577		if (otg_ctrl & OTG_DRV_VBUS) {
    578			set |= OTG1_VBUS_DRV;
    579			break;
    580		}
    581		/* HNP failed for some reason (A_AIDL_BDIS timeout) */
    582		notresponding(isp);
    583
    584		fallthrough;
    585	case OTG_STATE_A_VBUS_ERR:
    586		isp->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
    587		pr_debug("  --> a_wait_vfall\n");
    588		fallthrough;
    589	case OTG_STATE_A_WAIT_VFALL:
    590		/* FIXME usbcore thinks port power is still on ... */
    591		clr |= OTG1_VBUS_DRV;
    592		break;
    593	case OTG_STATE_A_IDLE:
    594		if (otg_ctrl & OTG_DRV_VBUS) {
    595			isp->phy.otg->state = OTG_STATE_A_WAIT_VRISE;
    596			pr_debug("  --> a_wait_vrise\n");
    597		}
    598		fallthrough;
    599	default:
    600		toggle(OTG_DRV_VBUS, OTG1_VBUS_DRV);
    601	}
    602
    603	toggle(OTG_PU_VBUS, OTG1_VBUS_CHRG);
    604	toggle(OTG_PD_VBUS, OTG1_VBUS_DISCHRG);
    605
    606#	undef toggle
    607
    608	isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1, set);
    609	isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1, clr);
    610
    611	/* HNP switch to host or peripheral; and SRP */
    612	if (otg_change & OTG_PULLUP) {
    613		u32 l;
    614
    615		switch (isp->phy.otg->state) {
    616		case OTG_STATE_B_IDLE:
    617			if (clr & OTG1_DP_PULLUP)
    618				break;
    619			isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
    620			pr_debug("  --> b_peripheral\n");
    621			break;
    622		case OTG_STATE_A_SUSPEND:
    623			if (clr & OTG1_DP_PULLUP)
    624				break;
    625			isp->phy.otg->state = OTG_STATE_A_PERIPHERAL;
    626			pr_debug("  --> a_peripheral\n");
    627			break;
    628		default:
    629			break;
    630		}
    631		l = omap_readl(OTG_CTRL);
    632		l |= OTG_PULLUP;
    633		omap_writel(l, OTG_CTRL);
    634	}
    635
    636	check_state(isp, __func__);
    637	dump_regs(isp, "otg->isp1301");
    638}
    639
    640static irqreturn_t omap_otg_irq(int irq, void *_isp)
    641{
    642	u16		otg_irq = omap_readw(OTG_IRQ_SRC);
    643	u32		otg_ctrl;
    644	int		ret = IRQ_NONE;
    645	struct isp1301	*isp = _isp;
    646	struct usb_otg	*otg = isp->phy.otg;
    647
    648	/* update ISP1301 transceiver from OTG controller */
    649	if (otg_irq & OPRT_CHG) {
    650		omap_writew(OPRT_CHG, OTG_IRQ_SRC);
    651		isp1301_defer_work(isp, WORK_UPDATE_ISP);
    652		ret = IRQ_HANDLED;
    653
    654	/* SRP to become b_peripheral failed */
    655	} else if (otg_irq & B_SRP_TMROUT) {
    656		pr_debug("otg: B_SRP_TIMEOUT, %06x\n", omap_readl(OTG_CTRL));
    657		notresponding(isp);
    658
    659		/* gadget drivers that care should monitor all kinds of
    660		 * remote wakeup (SRP, normal) using their own timer
    661		 * to give "check cable and A-device" messages.
    662		 */
    663		if (isp->phy.otg->state == OTG_STATE_B_SRP_INIT)
    664			b_idle(isp, "srp_timeout");
    665
    666		omap_writew(B_SRP_TMROUT, OTG_IRQ_SRC);
    667		ret = IRQ_HANDLED;
    668
    669	/* HNP to become b_host failed */
    670	} else if (otg_irq & B_HNP_FAIL) {
    671		pr_debug("otg: %s B_HNP_FAIL, %06x\n",
    672				state_name(isp), omap_readl(OTG_CTRL));
    673		notresponding(isp);
    674
    675		otg_ctrl = omap_readl(OTG_CTRL);
    676		otg_ctrl |= OTG_BUSDROP;
    677		otg_ctrl &= OTG_CTRL_MASK & ~OTG_XCEIV_INPUTS;
    678		omap_writel(otg_ctrl, OTG_CTRL);
    679
    680		/* subset of b_peripheral()... */
    681		isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
    682		pr_debug("  --> b_peripheral\n");
    683
    684		omap_writew(B_HNP_FAIL, OTG_IRQ_SRC);
    685		ret = IRQ_HANDLED;
    686
    687	/* detect SRP from B-device ... */
    688	} else if (otg_irq & A_SRP_DETECT) {
    689		pr_debug("otg: %s SRP_DETECT, %06x\n",
    690				state_name(isp), omap_readl(OTG_CTRL));
    691
    692		isp1301_defer_work(isp, WORK_UPDATE_OTG);
    693		switch (isp->phy.otg->state) {
    694		case OTG_STATE_A_IDLE:
    695			if (!otg->host)
    696				break;
    697			isp1301_defer_work(isp, WORK_HOST_RESUME);
    698			otg_ctrl = omap_readl(OTG_CTRL);
    699			otg_ctrl |= OTG_A_BUSREQ;
    700			otg_ctrl &= ~(OTG_BUSDROP|OTG_B_BUSREQ)
    701					& ~OTG_XCEIV_INPUTS
    702					& OTG_CTRL_MASK;
    703			omap_writel(otg_ctrl, OTG_CTRL);
    704			break;
    705		default:
    706			break;
    707		}
    708
    709		omap_writew(A_SRP_DETECT, OTG_IRQ_SRC);
    710		ret = IRQ_HANDLED;
    711
    712	/* timer expired:  T(a_wait_bcon) and maybe T(a_wait_vrise)
    713	 * we don't track them separately
    714	 */
    715	} else if (otg_irq & A_REQ_TMROUT) {
    716		otg_ctrl = omap_readl(OTG_CTRL);
    717		pr_info("otg: BCON_TMOUT from %s, %06x\n",
    718				state_name(isp), otg_ctrl);
    719		notresponding(isp);
    720
    721		otg_ctrl |= OTG_BUSDROP;
    722		otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK & ~OTG_XCEIV_INPUTS;
    723		omap_writel(otg_ctrl, OTG_CTRL);
    724		isp->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
    725
    726		omap_writew(A_REQ_TMROUT, OTG_IRQ_SRC);
    727		ret = IRQ_HANDLED;
    728
    729	/* A-supplied voltage fell too low; overcurrent */
    730	} else if (otg_irq & A_VBUS_ERR) {
    731		otg_ctrl = omap_readl(OTG_CTRL);
    732		printk(KERN_ERR "otg: %s, VBUS_ERR %04x ctrl %06x\n",
    733			state_name(isp), otg_irq, otg_ctrl);
    734
    735		otg_ctrl |= OTG_BUSDROP;
    736		otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK & ~OTG_XCEIV_INPUTS;
    737		omap_writel(otg_ctrl, OTG_CTRL);
    738		isp->phy.otg->state = OTG_STATE_A_VBUS_ERR;
    739
    740		omap_writew(A_VBUS_ERR, OTG_IRQ_SRC);
    741		ret = IRQ_HANDLED;
    742
    743	/* switch driver; the transceiver code activates it,
    744	 * ungating the udc clock or resuming OHCI.
    745	 */
    746	} else if (otg_irq & DRIVER_SWITCH) {
    747		int	kick = 0;
    748
    749		otg_ctrl = omap_readl(OTG_CTRL);
    750		printk(KERN_NOTICE "otg: %s, SWITCH to %s, ctrl %06x\n",
    751				state_name(isp),
    752				(otg_ctrl & OTG_DRIVER_SEL)
    753					? "gadget" : "host",
    754				otg_ctrl);
    755		isp1301_defer_work(isp, WORK_UPDATE_ISP);
    756
    757		/* role is peripheral */
    758		if (otg_ctrl & OTG_DRIVER_SEL) {
    759			switch (isp->phy.otg->state) {
    760			case OTG_STATE_A_IDLE:
    761				b_idle(isp, __func__);
    762				break;
    763			default:
    764				break;
    765			}
    766			isp1301_defer_work(isp, WORK_UPDATE_ISP);
    767
    768		/* role is host */
    769		} else {
    770			if (!(otg_ctrl & OTG_ID)) {
    771				otg_ctrl &= OTG_CTRL_MASK & ~OTG_XCEIV_INPUTS;
    772				omap_writel(otg_ctrl | OTG_A_BUSREQ, OTG_CTRL);
    773			}
    774
    775			if (otg->host) {
    776				switch (isp->phy.otg->state) {
    777				case OTG_STATE_B_WAIT_ACON:
    778					isp->phy.otg->state = OTG_STATE_B_HOST;
    779					pr_debug("  --> b_host\n");
    780					kick = 1;
    781					break;
    782				case OTG_STATE_A_WAIT_BCON:
    783					isp->phy.otg->state = OTG_STATE_A_HOST;
    784					pr_debug("  --> a_host\n");
    785					break;
    786				case OTG_STATE_A_PERIPHERAL:
    787					isp->phy.otg->state = OTG_STATE_A_WAIT_BCON;
    788					pr_debug("  --> a_wait_bcon\n");
    789					break;
    790				default:
    791					break;
    792				}
    793				isp1301_defer_work(isp, WORK_HOST_RESUME);
    794			}
    795		}
    796
    797		omap_writew(DRIVER_SWITCH, OTG_IRQ_SRC);
    798		ret = IRQ_HANDLED;
    799
    800		if (kick)
    801			usb_bus_start_enum(otg->host, otg->host->otg_port);
    802	}
    803
    804	check_state(isp, __func__);
    805	return ret;
    806}
    807
    808static struct platform_device *otg_dev;
    809
    810static int isp1301_otg_init(struct isp1301 *isp)
    811{
    812	u32 l;
    813
    814	if (!otg_dev)
    815		return -ENODEV;
    816
    817	dump_regs(isp, __func__);
    818	/* some of these values are board-specific... */
    819	l = omap_readl(OTG_SYSCON_2);
    820	l |= OTG_EN
    821		/* for B-device: */
    822		| SRP_GPDATA		/* 9msec Bdev D+ pulse */
    823		| SRP_GPDVBUS		/* discharge after VBUS pulse */
    824		// | (3 << 24)		/* 2msec VBUS pulse */
    825		/* for A-device: */
    826		| (0 << 20)		/* 200ms nominal A_WAIT_VRISE timer */
    827		| SRP_DPW		/* detect 167+ns SRP pulses */
    828		| SRP_DATA | SRP_VBUS	/* accept both kinds of SRP pulse */
    829		;
    830	omap_writel(l, OTG_SYSCON_2);
    831
    832	update_otg1(isp, isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE));
    833	update_otg2(isp, isp1301_get_u8(isp, ISP1301_OTG_STATUS));
    834
    835	check_state(isp, __func__);
    836	pr_debug("otg: %s, %s %06x\n",
    837			state_name(isp), __func__, omap_readl(OTG_CTRL));
    838
    839	omap_writew(DRIVER_SWITCH | OPRT_CHG
    840			| B_SRP_TMROUT | B_HNP_FAIL
    841			| A_VBUS_ERR | A_SRP_DETECT | A_REQ_TMROUT, OTG_IRQ_EN);
    842
    843	l = omap_readl(OTG_SYSCON_2);
    844	l |= OTG_EN;
    845	omap_writel(l, OTG_SYSCON_2);
    846
    847	return 0;
    848}
    849
    850static int otg_probe(struct platform_device *dev)
    851{
    852	// struct omap_usb_config *config = dev->platform_data;
    853
    854	otg_dev = dev;
    855	return 0;
    856}
    857
    858static int otg_remove(struct platform_device *dev)
    859{
    860	otg_dev = NULL;
    861	return 0;
    862}
    863
    864static struct platform_driver omap_otg_driver = {
    865	.probe		= otg_probe,
    866	.remove		= otg_remove,
    867	.driver		= {
    868		.name	= "omap_otg",
    869	},
    870};
    871
    872static int otg_bind(struct isp1301 *isp)
    873{
    874	int	status;
    875
    876	if (otg_dev)
    877		return -EBUSY;
    878
    879	status = platform_driver_register(&omap_otg_driver);
    880	if (status < 0)
    881		return status;
    882
    883	if (otg_dev)
    884		status = request_irq(otg_dev->resource[1].start, omap_otg_irq,
    885				0, DRIVER_NAME, isp);
    886	else
    887		status = -ENODEV;
    888
    889	if (status < 0)
    890		platform_driver_unregister(&omap_otg_driver);
    891	return status;
    892}
    893
    894static void otg_unbind(struct isp1301 *isp)
    895{
    896	if (!otg_dev)
    897		return;
    898	free_irq(otg_dev->resource[1].start, isp);
    899}
    900
    901#else
    902
    903/* OTG controller isn't clocked */
    904
    905#endif	/* CONFIG_USB_OTG */
    906
    907/*-------------------------------------------------------------------------*/
    908
    909static void b_peripheral(struct isp1301 *isp)
    910{
    911	u32 l;
    912
    913	l = omap_readl(OTG_CTRL) & OTG_XCEIV_OUTPUTS;
    914	omap_writel(l, OTG_CTRL);
    915
    916	usb_gadget_vbus_connect(isp->phy.otg->gadget);
    917
    918#ifdef	CONFIG_USB_OTG
    919	enable_vbus_draw(isp, 8);
    920	otg_update_isp(isp);
    921#else
    922	enable_vbus_draw(isp, 100);
    923	/* UDC driver just set OTG_BSESSVLD */
    924	isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_DP_PULLUP);
    925	isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_DP_PULLDOWN);
    926	isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
    927	pr_debug("  --> b_peripheral\n");
    928	dump_regs(isp, "2periph");
    929#endif
    930}
    931
    932static void isp_update_otg(struct isp1301 *isp, u8 stat)
    933{
    934	struct usb_otg		*otg = isp->phy.otg;
    935	u8			isp_stat, isp_bstat;
    936	enum usb_otg_state	state = isp->phy.otg->state;
    937
    938	if (stat & INTR_BDIS_ACON)
    939		pr_debug("OTG:  BDIS_ACON, %s\n", state_name(isp));
    940
    941	/* start certain state transitions right away */
    942	isp_stat = isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE);
    943	if (isp_stat & INTR_ID_GND) {
    944		if (otg->default_a) {
    945			switch (state) {
    946			case OTG_STATE_B_IDLE:
    947				a_idle(isp, "idle");
    948				fallthrough;
    949			case OTG_STATE_A_IDLE:
    950				enable_vbus_source(isp);
    951				fallthrough;
    952			case OTG_STATE_A_WAIT_VRISE:
    953				/* we skip over OTG_STATE_A_WAIT_BCON, since
    954				 * the HC will transition to A_HOST (or
    955				 * A_SUSPEND!) without our noticing except
    956				 * when HNP is used.
    957				 */
    958				if (isp_stat & INTR_VBUS_VLD)
    959					isp->phy.otg->state = OTG_STATE_A_HOST;
    960				break;
    961			case OTG_STATE_A_WAIT_VFALL:
    962				if (!(isp_stat & INTR_SESS_VLD))
    963					a_idle(isp, "vfell");
    964				break;
    965			default:
    966				if (!(isp_stat & INTR_VBUS_VLD))
    967					isp->phy.otg->state = OTG_STATE_A_VBUS_ERR;
    968				break;
    969			}
    970			isp_bstat = isp1301_get_u8(isp, ISP1301_OTG_STATUS);
    971		} else {
    972			switch (state) {
    973			case OTG_STATE_B_PERIPHERAL:
    974			case OTG_STATE_B_HOST:
    975			case OTG_STATE_B_WAIT_ACON:
    976				usb_gadget_vbus_disconnect(otg->gadget);
    977				break;
    978			default:
    979				break;
    980			}
    981			if (state != OTG_STATE_A_IDLE)
    982				a_idle(isp, "id");
    983			if (otg->host && state == OTG_STATE_A_IDLE)
    984				isp1301_defer_work(isp, WORK_HOST_RESUME);
    985			isp_bstat = 0;
    986		}
    987	} else {
    988		u32 l;
    989
    990		/* if user unplugged mini-A end of cable,
    991		 * don't bypass A_WAIT_VFALL.
    992		 */
    993		if (otg->default_a) {
    994			switch (state) {
    995			default:
    996				isp->phy.otg->state = OTG_STATE_A_WAIT_VFALL;
    997				break;
    998			case OTG_STATE_A_WAIT_VFALL:
    999				state = OTG_STATE_A_IDLE;
   1000				/* hub_wq may take a while to notice and
   1001				 * handle this disconnect, so don't go
   1002				 * to B_IDLE quite yet.
   1003				 */
   1004				break;
   1005			case OTG_STATE_A_IDLE:
   1006				host_suspend(isp);
   1007				isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1,
   1008						MC1_BDIS_ACON_EN);
   1009				isp->phy.otg->state = OTG_STATE_B_IDLE;
   1010				l = omap_readl(OTG_CTRL) & OTG_CTRL_MASK;
   1011				l &= ~OTG_CTRL_BITS;
   1012				omap_writel(l, OTG_CTRL);
   1013				break;
   1014			case OTG_STATE_B_IDLE:
   1015				break;
   1016			}
   1017		}
   1018		isp_bstat = isp1301_get_u8(isp, ISP1301_OTG_STATUS);
   1019
   1020		switch (isp->phy.otg->state) {
   1021		case OTG_STATE_B_PERIPHERAL:
   1022		case OTG_STATE_B_WAIT_ACON:
   1023		case OTG_STATE_B_HOST:
   1024			if (likely(isp_bstat & OTG_B_SESS_VLD))
   1025				break;
   1026			enable_vbus_draw(isp, 0);
   1027#ifndef	CONFIG_USB_OTG
   1028			/* UDC driver will clear OTG_BSESSVLD */
   1029			isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1,
   1030						OTG1_DP_PULLDOWN);
   1031			isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1,
   1032						OTG1_DP_PULLUP);
   1033			dump_regs(isp, __func__);
   1034#endif
   1035			fallthrough;
   1036		case OTG_STATE_B_SRP_INIT:
   1037			b_idle(isp, __func__);
   1038			l = omap_readl(OTG_CTRL) & OTG_XCEIV_OUTPUTS;
   1039			omap_writel(l, OTG_CTRL);
   1040			fallthrough;
   1041		case OTG_STATE_B_IDLE:
   1042			if (otg->gadget && (isp_bstat & OTG_B_SESS_VLD)) {
   1043#ifdef	CONFIG_USB_OTG
   1044				update_otg1(isp, isp_stat);
   1045				update_otg2(isp, isp_bstat);
   1046#endif
   1047				b_peripheral(isp);
   1048			} else if (!(isp_stat & (INTR_VBUS_VLD|INTR_SESS_VLD)))
   1049				isp_bstat |= OTG_B_SESS_END;
   1050			break;
   1051		case OTG_STATE_A_WAIT_VFALL:
   1052			break;
   1053		default:
   1054			pr_debug("otg: unsupported b-device %s\n",
   1055				state_name(isp));
   1056			break;
   1057		}
   1058	}
   1059
   1060	if (state != isp->phy.otg->state)
   1061		pr_debug("  isp, %s -> %s\n",
   1062				usb_otg_state_string(state), state_name(isp));
   1063
   1064#ifdef	CONFIG_USB_OTG
   1065	/* update the OTG controller state to match the isp1301; may
   1066	 * trigger OPRT_CHG irqs for changes going to the isp1301.
   1067	 */
   1068	update_otg1(isp, isp_stat);
   1069	update_otg2(isp, isp_bstat);
   1070	check_state(isp, __func__);
   1071#endif
   1072
   1073	dump_regs(isp, "isp1301->otg");
   1074}
   1075
   1076/*-------------------------------------------------------------------------*/
   1077
   1078static u8 isp1301_clear_latch(struct isp1301 *isp)
   1079{
   1080	u8 latch = isp1301_get_u8(isp, ISP1301_INTERRUPT_LATCH);
   1081	isp1301_clear_bits(isp, ISP1301_INTERRUPT_LATCH, latch);
   1082	return latch;
   1083}
   1084
   1085static void
   1086isp1301_work(struct work_struct *work)
   1087{
   1088	struct isp1301	*isp = container_of(work, struct isp1301, work);
   1089	int		stop;
   1090
   1091	/* implicit lock:  we're the only task using this device */
   1092	isp->working = 1;
   1093	do {
   1094		stop = test_bit(WORK_STOP, &isp->todo);
   1095
   1096#ifdef	CONFIG_USB_OTG
   1097		/* transfer state from otg engine to isp1301 */
   1098		if (test_and_clear_bit(WORK_UPDATE_ISP, &isp->todo)) {
   1099			otg_update_isp(isp);
   1100			put_device(&isp->client->dev);
   1101		}
   1102#endif
   1103		/* transfer state from isp1301 to otg engine */
   1104		if (test_and_clear_bit(WORK_UPDATE_OTG, &isp->todo)) {
   1105			u8		stat = isp1301_clear_latch(isp);
   1106
   1107			isp_update_otg(isp, stat);
   1108			put_device(&isp->client->dev);
   1109		}
   1110
   1111		if (test_and_clear_bit(WORK_HOST_RESUME, &isp->todo)) {
   1112			u32	otg_ctrl;
   1113
   1114			/*
   1115			 * skip A_WAIT_VRISE; hc transitions invisibly
   1116			 * skip A_WAIT_BCON; same.
   1117			 */
   1118			switch (isp->phy.otg->state) {
   1119			case OTG_STATE_A_WAIT_BCON:
   1120			case OTG_STATE_A_WAIT_VRISE:
   1121				isp->phy.otg->state = OTG_STATE_A_HOST;
   1122				pr_debug("  --> a_host\n");
   1123				otg_ctrl = omap_readl(OTG_CTRL);
   1124				otg_ctrl |= OTG_A_BUSREQ;
   1125				otg_ctrl &= ~(OTG_BUSDROP|OTG_B_BUSREQ)
   1126						& OTG_CTRL_MASK;
   1127				omap_writel(otg_ctrl, OTG_CTRL);
   1128				break;
   1129			case OTG_STATE_B_WAIT_ACON:
   1130				isp->phy.otg->state = OTG_STATE_B_HOST;
   1131				pr_debug("  --> b_host (acon)\n");
   1132				break;
   1133			case OTG_STATE_B_HOST:
   1134			case OTG_STATE_B_IDLE:
   1135			case OTG_STATE_A_IDLE:
   1136				break;
   1137			default:
   1138				pr_debug("  host resume in %s\n",
   1139						state_name(isp));
   1140			}
   1141			host_resume(isp);
   1142			// mdelay(10);
   1143			put_device(&isp->client->dev);
   1144		}
   1145
   1146		if (test_and_clear_bit(WORK_TIMER, &isp->todo)) {
   1147#ifdef	VERBOSE
   1148			dump_regs(isp, "timer");
   1149			if (!stop)
   1150				mod_timer(&isp->timer, jiffies + TIMER_JIFFIES);
   1151#endif
   1152			put_device(&isp->client->dev);
   1153		}
   1154
   1155		if (isp->todo)
   1156			dev_vdbg(&isp->client->dev,
   1157				"work done, todo = 0x%lx\n",
   1158				isp->todo);
   1159		if (stop) {
   1160			dev_dbg(&isp->client->dev, "stop\n");
   1161			break;
   1162		}
   1163	} while (isp->todo);
   1164	isp->working = 0;
   1165}
   1166
   1167static irqreturn_t isp1301_irq(int irq, void *isp)
   1168{
   1169	isp1301_defer_work(isp, WORK_UPDATE_OTG);
   1170	return IRQ_HANDLED;
   1171}
   1172
   1173static void isp1301_timer(struct timer_list *t)
   1174{
   1175	struct isp1301 *isp = from_timer(isp, t, timer);
   1176
   1177	isp1301_defer_work(isp, WORK_TIMER);
   1178}
   1179
   1180/*-------------------------------------------------------------------------*/
   1181
   1182static void isp1301_release(struct device *dev)
   1183{
   1184	struct isp1301	*isp;
   1185
   1186	isp = dev_get_drvdata(dev);
   1187
   1188	/* FIXME -- not with a "new style" driver, it doesn't!! */
   1189
   1190	/* ugly -- i2c hijacks our memory hook to wait_for_completion() */
   1191	if (isp->i2c_release)
   1192		isp->i2c_release(dev);
   1193	kfree(isp->phy.otg);
   1194	kfree (isp);
   1195}
   1196
   1197static struct isp1301 *the_transceiver;
   1198
   1199static int isp1301_remove(struct i2c_client *i2c)
   1200{
   1201	struct isp1301	*isp;
   1202
   1203	isp = i2c_get_clientdata(i2c);
   1204
   1205	isp1301_clear_bits(isp, ISP1301_INTERRUPT_FALLING, ~0);
   1206	isp1301_clear_bits(isp, ISP1301_INTERRUPT_RISING, ~0);
   1207	free_irq(i2c->irq, isp);
   1208#ifdef	CONFIG_USB_OTG
   1209	otg_unbind(isp);
   1210#endif
   1211	set_bit(WORK_STOP, &isp->todo);
   1212	del_timer_sync(&isp->timer);
   1213	flush_work(&isp->work);
   1214
   1215	put_device(&i2c->dev);
   1216	the_transceiver = NULL;
   1217
   1218	return 0;
   1219}
   1220
   1221/*-------------------------------------------------------------------------*/
   1222
   1223/* NOTE:  three modes are possible here, only one of which
   1224 * will be standards-conformant on any given system:
   1225 *
   1226 *  - OTG mode (dual-role), required if there's a Mini-AB connector
   1227 *  - HOST mode, for when there's one or more A (host) connectors
   1228 *  - DEVICE mode, for when there's a B/Mini-B (device) connector
   1229 *
   1230 * As a rule, you won't have an isp1301 chip unless it's there to
   1231 * support the OTG mode.  Other modes help testing USB controllers
   1232 * in isolation from (full) OTG support, or maybe so later board
   1233 * revisions can help to support those feature.
   1234 */
   1235
   1236#ifdef	CONFIG_USB_OTG
   1237
   1238static int isp1301_otg_enable(struct isp1301 *isp)
   1239{
   1240	power_up(isp);
   1241	isp1301_otg_init(isp);
   1242
   1243	/* NOTE:  since we don't change this, this provides
   1244	 * a few more interrupts than are strictly needed.
   1245	 */
   1246	isp1301_set_bits(isp, ISP1301_INTERRUPT_RISING,
   1247		INTR_VBUS_VLD | INTR_SESS_VLD | INTR_ID_GND);
   1248	isp1301_set_bits(isp, ISP1301_INTERRUPT_FALLING,
   1249		INTR_VBUS_VLD | INTR_SESS_VLD | INTR_ID_GND);
   1250
   1251	dev_info(&isp->client->dev, "ready for dual-role USB ...\n");
   1252
   1253	return 0;
   1254}
   1255
   1256#endif
   1257
   1258/* add or disable the host device+driver */
   1259static int
   1260isp1301_set_host(struct usb_otg *otg, struct usb_bus *host)
   1261{
   1262	struct isp1301	*isp = container_of(otg->usb_phy, struct isp1301, phy);
   1263
   1264	if (isp != the_transceiver)
   1265		return -ENODEV;
   1266
   1267	if (!host) {
   1268		omap_writew(0, OTG_IRQ_EN);
   1269		power_down(isp);
   1270		otg->host = NULL;
   1271		return 0;
   1272	}
   1273
   1274#ifdef	CONFIG_USB_OTG
   1275	otg->host = host;
   1276	dev_dbg(&isp->client->dev, "registered host\n");
   1277	host_suspend(isp);
   1278	if (otg->gadget)
   1279		return isp1301_otg_enable(isp);
   1280	return 0;
   1281
   1282#elif !IS_ENABLED(CONFIG_USB_OMAP)
   1283	// FIXME update its refcount
   1284	otg->host = host;
   1285
   1286	power_up(isp);
   1287
   1288	if (machine_is_omap_h2())
   1289		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
   1290
   1291	dev_info(&isp->client->dev, "A-Host sessions ok\n");
   1292	isp1301_set_bits(isp, ISP1301_INTERRUPT_RISING,
   1293		INTR_ID_GND);
   1294	isp1301_set_bits(isp, ISP1301_INTERRUPT_FALLING,
   1295		INTR_ID_GND);
   1296
   1297	/* If this has a Mini-AB connector, this mode is highly
   1298	 * nonstandard ... but can be handy for testing, especially with
   1299	 * the Mini-A end of an OTG cable.  (Or something nonstandard
   1300	 * like MiniB-to-StandardB, maybe built with a gender mender.)
   1301	 */
   1302	isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_VBUS_DRV);
   1303
   1304	dump_regs(isp, __func__);
   1305
   1306	return 0;
   1307
   1308#else
   1309	dev_dbg(&isp->client->dev, "host sessions not allowed\n");
   1310	return -EINVAL;
   1311#endif
   1312
   1313}
   1314
   1315static int
   1316isp1301_set_peripheral(struct usb_otg *otg, struct usb_gadget *gadget)
   1317{
   1318	struct isp1301	*isp = container_of(otg->usb_phy, struct isp1301, phy);
   1319
   1320	if (isp != the_transceiver)
   1321		return -ENODEV;
   1322
   1323	if (!gadget) {
   1324		omap_writew(0, OTG_IRQ_EN);
   1325		if (!otg->default_a)
   1326			enable_vbus_draw(isp, 0);
   1327		usb_gadget_vbus_disconnect(otg->gadget);
   1328		otg->gadget = NULL;
   1329		power_down(isp);
   1330		return 0;
   1331	}
   1332
   1333#ifdef	CONFIG_USB_OTG
   1334	otg->gadget = gadget;
   1335	dev_dbg(&isp->client->dev, "registered gadget\n");
   1336	/* gadget driver may be suspended until vbus_connect () */
   1337	if (otg->host)
   1338		return isp1301_otg_enable(isp);
   1339	return 0;
   1340
   1341#elif	!defined(CONFIG_USB_OHCI_HCD) && !defined(CONFIG_USB_OHCI_HCD_MODULE)
   1342	otg->gadget = gadget;
   1343	// FIXME update its refcount
   1344
   1345	{
   1346		u32 l;
   1347
   1348		l = omap_readl(OTG_CTRL) & OTG_CTRL_MASK;
   1349		l &= ~(OTG_XCEIV_OUTPUTS|OTG_CTRL_BITS);
   1350		l |= OTG_ID;
   1351		omap_writel(l, OTG_CTRL);
   1352	}
   1353
   1354	power_up(isp);
   1355	isp->phy.otg->state = OTG_STATE_B_IDLE;
   1356
   1357	if (machine_is_omap_h2() || machine_is_omap_h3())
   1358		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
   1359
   1360	isp1301_set_bits(isp, ISP1301_INTERRUPT_RISING,
   1361		INTR_SESS_VLD);
   1362	isp1301_set_bits(isp, ISP1301_INTERRUPT_FALLING,
   1363		INTR_VBUS_VLD);
   1364	dev_info(&isp->client->dev, "B-Peripheral sessions ok\n");
   1365	dump_regs(isp, __func__);
   1366
   1367	/* If this has a Mini-AB connector, this mode is highly
   1368	 * nonstandard ... but can be handy for testing, so long
   1369	 * as you don't plug a Mini-A cable into the jack.
   1370	 */
   1371	if (isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE) & INTR_VBUS_VLD)
   1372		b_peripheral(isp);
   1373
   1374	return 0;
   1375
   1376#else
   1377	dev_dbg(&isp->client->dev, "peripheral sessions not allowed\n");
   1378	return -EINVAL;
   1379#endif
   1380}
   1381
   1382
   1383/*-------------------------------------------------------------------------*/
   1384
   1385static int
   1386isp1301_set_power(struct usb_phy *dev, unsigned mA)
   1387{
   1388	if (!the_transceiver)
   1389		return -ENODEV;
   1390	if (dev->otg->state == OTG_STATE_B_PERIPHERAL)
   1391		enable_vbus_draw(the_transceiver, mA);
   1392	return 0;
   1393}
   1394
   1395static int
   1396isp1301_start_srp(struct usb_otg *otg)
   1397{
   1398	struct isp1301	*isp = container_of(otg->usb_phy, struct isp1301, phy);
   1399	u32		otg_ctrl;
   1400
   1401	if (isp != the_transceiver || isp->phy.otg->state != OTG_STATE_B_IDLE)
   1402		return -ENODEV;
   1403
   1404	otg_ctrl = omap_readl(OTG_CTRL);
   1405	if (!(otg_ctrl & OTG_BSESSEND))
   1406		return -EINVAL;
   1407
   1408	otg_ctrl |= OTG_B_BUSREQ;
   1409	otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK;
   1410	omap_writel(otg_ctrl, OTG_CTRL);
   1411	isp->phy.otg->state = OTG_STATE_B_SRP_INIT;
   1412
   1413	pr_debug("otg: SRP, %s ... %06x\n", state_name(isp),
   1414			omap_readl(OTG_CTRL));
   1415#ifdef	CONFIG_USB_OTG
   1416	check_state(isp, __func__);
   1417#endif
   1418	return 0;
   1419}
   1420
   1421static int
   1422isp1301_start_hnp(struct usb_otg *otg)
   1423{
   1424#ifdef	CONFIG_USB_OTG
   1425	struct isp1301	*isp = container_of(otg->usb_phy, struct isp1301, phy);
   1426	u32 l;
   1427
   1428	if (isp != the_transceiver)
   1429		return -ENODEV;
   1430	if (otg->default_a && (otg->host == NULL || !otg->host->b_hnp_enable))
   1431		return -ENOTCONN;
   1432	if (!otg->default_a && (otg->gadget == NULL
   1433			|| !otg->gadget->b_hnp_enable))
   1434		return -ENOTCONN;
   1435
   1436	/* We want hardware to manage most HNP protocol timings.
   1437	 * So do this part as early as possible...
   1438	 */
   1439	switch (isp->phy.otg->state) {
   1440	case OTG_STATE_B_HOST:
   1441		isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
   1442		/* caller will suspend next */
   1443		break;
   1444	case OTG_STATE_A_HOST:
   1445#if 0
   1446		/* autoconnect mode avoids irq latency bugs */
   1447		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1,
   1448				MC1_BDIS_ACON_EN);
   1449#endif
   1450		/* caller must suspend then clear A_BUSREQ */
   1451		usb_gadget_vbus_connect(otg->gadget);
   1452		l = omap_readl(OTG_CTRL);
   1453		l |= OTG_A_SETB_HNPEN;
   1454		omap_writel(l, OTG_CTRL);
   1455
   1456		break;
   1457	case OTG_STATE_A_PERIPHERAL:
   1458		/* initiated by B-Host suspend */
   1459		break;
   1460	default:
   1461		return -EILSEQ;
   1462	}
   1463	pr_debug("otg: HNP %s, %06x ...\n",
   1464		state_name(isp), omap_readl(OTG_CTRL));
   1465	check_state(isp, __func__);
   1466	return 0;
   1467#else
   1468	/* srp-only */
   1469	return -EINVAL;
   1470#endif
   1471}
   1472
   1473/*-------------------------------------------------------------------------*/
   1474
   1475static int
   1476isp1301_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
   1477{
   1478	int			status;
   1479	struct isp1301		*isp;
   1480	int irq;
   1481
   1482	if (the_transceiver)
   1483		return 0;
   1484
   1485	isp = kzalloc(sizeof *isp, GFP_KERNEL);
   1486	if (!isp)
   1487		return 0;
   1488
   1489	isp->phy.otg = kzalloc(sizeof *isp->phy.otg, GFP_KERNEL);
   1490	if (!isp->phy.otg) {
   1491		kfree(isp);
   1492		return 0;
   1493	}
   1494
   1495	INIT_WORK(&isp->work, isp1301_work);
   1496	timer_setup(&isp->timer, isp1301_timer, 0);
   1497
   1498	i2c_set_clientdata(i2c, isp);
   1499	isp->client = i2c;
   1500
   1501	/* verify the chip (shouldn't be necessary) */
   1502	status = isp1301_get_u16(isp, ISP1301_VENDOR_ID);
   1503	if (status != I2C_VENDOR_ID_PHILIPS) {
   1504		dev_dbg(&i2c->dev, "not philips id: %d\n", status);
   1505		goto fail;
   1506	}
   1507	status = isp1301_get_u16(isp, ISP1301_PRODUCT_ID);
   1508	if (status != I2C_PRODUCT_ID_PHILIPS_1301) {
   1509		dev_dbg(&i2c->dev, "not isp1301, %d\n", status);
   1510		goto fail;
   1511	}
   1512	isp->i2c_release = i2c->dev.release;
   1513	i2c->dev.release = isp1301_release;
   1514
   1515	/* initial development used chiprev 2.00 */
   1516	status = i2c_smbus_read_word_data(i2c, ISP1301_BCD_DEVICE);
   1517	dev_info(&i2c->dev, "chiprev %x.%02x, driver " DRIVER_VERSION "\n",
   1518		status >> 8, status & 0xff);
   1519
   1520	/* make like power-on reset */
   1521	isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1, MC1_MASK);
   1522
   1523	isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2, MC2_BI_DI);
   1524	isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_2, ~MC2_BI_DI);
   1525
   1526	isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1,
   1527				OTG1_DM_PULLDOWN | OTG1_DP_PULLDOWN);
   1528	isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1,
   1529				~(OTG1_DM_PULLDOWN | OTG1_DP_PULLDOWN));
   1530
   1531	isp1301_clear_bits(isp, ISP1301_INTERRUPT_LATCH, ~0);
   1532	isp1301_clear_bits(isp, ISP1301_INTERRUPT_FALLING, ~0);
   1533	isp1301_clear_bits(isp, ISP1301_INTERRUPT_RISING, ~0);
   1534
   1535#ifdef	CONFIG_USB_OTG
   1536	status = otg_bind(isp);
   1537	if (status < 0) {
   1538		dev_dbg(&i2c->dev, "can't bind OTG\n");
   1539		goto fail;
   1540	}
   1541#endif
   1542
   1543	if (machine_is_omap_h2()) {
   1544		struct gpio_desc *gpiod;
   1545
   1546		/* full speed signaling by default */
   1547		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1,
   1548			MC1_SPEED);
   1549		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2,
   1550			MC2_SPD_SUSP_CTRL);
   1551
   1552		gpiod = devm_gpiod_get(&i2c->dev, NULL, GPIOD_IN);
   1553		if (IS_ERR(gpiod)) {
   1554			dev_err(&i2c->dev, "cannot obtain H2 GPIO\n");
   1555			goto fail;
   1556		}
   1557		gpiod_set_consumer_name(gpiod, "isp1301");
   1558		irq = gpiod_to_irq(gpiod);
   1559		isp->irq_type = IRQF_TRIGGER_FALLING;
   1560	} else {
   1561		irq = i2c->irq;
   1562	}
   1563
   1564	status = request_irq(irq, isp1301_irq,
   1565			isp->irq_type, DRIVER_NAME, isp);
   1566	if (status < 0) {
   1567		dev_dbg(&i2c->dev, "can't get IRQ %d, err %d\n",
   1568				i2c->irq, status);
   1569		goto fail;
   1570	}
   1571
   1572	isp->phy.dev = &i2c->dev;
   1573	isp->phy.label = DRIVER_NAME;
   1574	isp->phy.set_power = isp1301_set_power;
   1575
   1576	isp->phy.otg->usb_phy = &isp->phy;
   1577	isp->phy.otg->set_host = isp1301_set_host;
   1578	isp->phy.otg->set_peripheral = isp1301_set_peripheral;
   1579	isp->phy.otg->start_srp = isp1301_start_srp;
   1580	isp->phy.otg->start_hnp = isp1301_start_hnp;
   1581
   1582	enable_vbus_draw(isp, 0);
   1583	power_down(isp);
   1584	the_transceiver = isp;
   1585
   1586#ifdef	CONFIG_USB_OTG
   1587	update_otg1(isp, isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE));
   1588	update_otg2(isp, isp1301_get_u8(isp, ISP1301_OTG_STATUS));
   1589#endif
   1590
   1591	dump_regs(isp, __func__);
   1592
   1593#ifdef	VERBOSE
   1594	mod_timer(&isp->timer, jiffies + TIMER_JIFFIES);
   1595	dev_dbg(&i2c->dev, "scheduled timer, %d min\n", TIMER_MINUTES);
   1596#endif
   1597
   1598	status = usb_add_phy(&isp->phy, USB_PHY_TYPE_USB2);
   1599	if (status < 0)
   1600		dev_err(&i2c->dev, "can't register transceiver, %d\n",
   1601			status);
   1602
   1603	return 0;
   1604
   1605fail:
   1606	kfree(isp->phy.otg);
   1607	kfree(isp);
   1608	return -ENODEV;
   1609}
   1610
   1611static const struct i2c_device_id isp1301_id[] = {
   1612	{ "isp1301_omap", 0 },
   1613	{ }
   1614};
   1615MODULE_DEVICE_TABLE(i2c, isp1301_id);
   1616
   1617static struct i2c_driver isp1301_driver = {
   1618	.driver = {
   1619		.name	= "isp1301_omap",
   1620	},
   1621	.probe		= isp1301_probe,
   1622	.remove		= isp1301_remove,
   1623	.id_table	= isp1301_id,
   1624};
   1625
   1626/*-------------------------------------------------------------------------*/
   1627
   1628static int __init isp_init(void)
   1629{
   1630	return i2c_add_driver(&isp1301_driver);
   1631}
   1632subsys_initcall(isp_init);
   1633
   1634static void __exit isp_exit(void)
   1635{
   1636	if (the_transceiver)
   1637		usb_remove_phy(&the_transceiver->phy);
   1638	i2c_del_driver(&isp1301_driver);
   1639}
   1640module_exit(isp_exit);
   1641