Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
   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 void 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
1219/*-------------------------------------------------------------------------*/
1220
1221/* NOTE:  three modes are possible here, only one of which
1222 * will be standards-conformant on any given system:
1223 *
1224 *  - OTG mode (dual-role), required if there's a Mini-AB connector
1225 *  - HOST mode, for when there's one or more A (host) connectors
1226 *  - DEVICE mode, for when there's a B/Mini-B (device) connector
1227 *
1228 * As a rule, you won't have an isp1301 chip unless it's there to
1229 * support the OTG mode.  Other modes help testing USB controllers
1230 * in isolation from (full) OTG support, or maybe so later board
1231 * revisions can help to support those feature.
1232 */
1233
1234#ifdef	CONFIG_USB_OTG
1235
1236static int isp1301_otg_enable(struct isp1301 *isp)
1237{
1238	power_up(isp);
1239	isp1301_otg_init(isp);
1240
1241	/* NOTE:  since we don't change this, this provides
1242	 * a few more interrupts than are strictly needed.
1243	 */
1244	isp1301_set_bits(isp, ISP1301_INTERRUPT_RISING,
1245		INTR_VBUS_VLD | INTR_SESS_VLD | INTR_ID_GND);
1246	isp1301_set_bits(isp, ISP1301_INTERRUPT_FALLING,
1247		INTR_VBUS_VLD | INTR_SESS_VLD | INTR_ID_GND);
1248
1249	dev_info(&isp->client->dev, "ready for dual-role USB ...\n");
1250
1251	return 0;
1252}
1253
1254#endif
1255
1256/* add or disable the host device+driver */
1257static int
1258isp1301_set_host(struct usb_otg *otg, struct usb_bus *host)
1259{
1260	struct isp1301	*isp = container_of(otg->usb_phy, struct isp1301, phy);
1261
1262	if (isp != the_transceiver)
1263		return -ENODEV;
1264
1265	if (!host) {
1266		omap_writew(0, OTG_IRQ_EN);
1267		power_down(isp);
1268		otg->host = NULL;
1269		return 0;
1270	}
1271
1272#ifdef	CONFIG_USB_OTG
1273	otg->host = host;
1274	dev_dbg(&isp->client->dev, "registered host\n");
1275	host_suspend(isp);
1276	if (otg->gadget)
1277		return isp1301_otg_enable(isp);
1278	return 0;
1279
1280#elif !IS_ENABLED(CONFIG_USB_OMAP)
1281	// FIXME update its refcount
1282	otg->host = host;
1283
1284	power_up(isp);
1285
1286	if (machine_is_omap_h2())
1287		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
1288
1289	dev_info(&isp->client->dev, "A-Host sessions ok\n");
1290	isp1301_set_bits(isp, ISP1301_INTERRUPT_RISING,
1291		INTR_ID_GND);
1292	isp1301_set_bits(isp, ISP1301_INTERRUPT_FALLING,
1293		INTR_ID_GND);
1294
1295	/* If this has a Mini-AB connector, this mode is highly
1296	 * nonstandard ... but can be handy for testing, especially with
1297	 * the Mini-A end of an OTG cable.  (Or something nonstandard
1298	 * like MiniB-to-StandardB, maybe built with a gender mender.)
1299	 */
1300	isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1, OTG1_VBUS_DRV);
1301
1302	dump_regs(isp, __func__);
1303
1304	return 0;
1305
1306#else
1307	dev_dbg(&isp->client->dev, "host sessions not allowed\n");
1308	return -EINVAL;
1309#endif
1310
1311}
1312
1313static int
1314isp1301_set_peripheral(struct usb_otg *otg, struct usb_gadget *gadget)
1315{
1316	struct isp1301	*isp = container_of(otg->usb_phy, struct isp1301, phy);
1317
1318	if (isp != the_transceiver)
1319		return -ENODEV;
1320
1321	if (!gadget) {
1322		omap_writew(0, OTG_IRQ_EN);
1323		if (!otg->default_a)
1324			enable_vbus_draw(isp, 0);
1325		usb_gadget_vbus_disconnect(otg->gadget);
1326		otg->gadget = NULL;
1327		power_down(isp);
1328		return 0;
1329	}
1330
1331#ifdef	CONFIG_USB_OTG
1332	otg->gadget = gadget;
1333	dev_dbg(&isp->client->dev, "registered gadget\n");
1334	/* gadget driver may be suspended until vbus_connect () */
1335	if (otg->host)
1336		return isp1301_otg_enable(isp);
1337	return 0;
1338
1339#elif	!defined(CONFIG_USB_OHCI_HCD) && !defined(CONFIG_USB_OHCI_HCD_MODULE)
1340	otg->gadget = gadget;
1341	// FIXME update its refcount
1342
1343	{
1344		u32 l;
1345
1346		l = omap_readl(OTG_CTRL) & OTG_CTRL_MASK;
1347		l &= ~(OTG_XCEIV_OUTPUTS|OTG_CTRL_BITS);
1348		l |= OTG_ID;
1349		omap_writel(l, OTG_CTRL);
1350	}
1351
1352	power_up(isp);
1353	isp->phy.otg->state = OTG_STATE_B_IDLE;
1354
1355	if (machine_is_omap_h2() || machine_is_omap_h3())
1356		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1, MC1_DAT_SE0);
1357
1358	isp1301_set_bits(isp, ISP1301_INTERRUPT_RISING,
1359		INTR_SESS_VLD);
1360	isp1301_set_bits(isp, ISP1301_INTERRUPT_FALLING,
1361		INTR_VBUS_VLD);
1362	dev_info(&isp->client->dev, "B-Peripheral sessions ok\n");
1363	dump_regs(isp, __func__);
1364
1365	/* If this has a Mini-AB connector, this mode is highly
1366	 * nonstandard ... but can be handy for testing, so long
1367	 * as you don't plug a Mini-A cable into the jack.
1368	 */
1369	if (isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE) & INTR_VBUS_VLD)
1370		b_peripheral(isp);
1371
1372	return 0;
1373
1374#else
1375	dev_dbg(&isp->client->dev, "peripheral sessions not allowed\n");
1376	return -EINVAL;
1377#endif
1378}
1379
1380
1381/*-------------------------------------------------------------------------*/
1382
1383static int
1384isp1301_set_power(struct usb_phy *dev, unsigned mA)
1385{
1386	if (!the_transceiver)
1387		return -ENODEV;
1388	if (dev->otg->state == OTG_STATE_B_PERIPHERAL)
1389		enable_vbus_draw(the_transceiver, mA);
1390	return 0;
1391}
1392
1393static int
1394isp1301_start_srp(struct usb_otg *otg)
1395{
1396	struct isp1301	*isp = container_of(otg->usb_phy, struct isp1301, phy);
1397	u32		otg_ctrl;
1398
1399	if (isp != the_transceiver || isp->phy.otg->state != OTG_STATE_B_IDLE)
1400		return -ENODEV;
1401
1402	otg_ctrl = omap_readl(OTG_CTRL);
1403	if (!(otg_ctrl & OTG_BSESSEND))
1404		return -EINVAL;
1405
1406	otg_ctrl |= OTG_B_BUSREQ;
1407	otg_ctrl &= ~OTG_A_BUSREQ & OTG_CTRL_MASK;
1408	omap_writel(otg_ctrl, OTG_CTRL);
1409	isp->phy.otg->state = OTG_STATE_B_SRP_INIT;
1410
1411	pr_debug("otg: SRP, %s ... %06x\n", state_name(isp),
1412			omap_readl(OTG_CTRL));
1413#ifdef	CONFIG_USB_OTG
1414	check_state(isp, __func__);
1415#endif
1416	return 0;
1417}
1418
1419static int
1420isp1301_start_hnp(struct usb_otg *otg)
1421{
1422#ifdef	CONFIG_USB_OTG
1423	struct isp1301	*isp = container_of(otg->usb_phy, struct isp1301, phy);
1424	u32 l;
1425
1426	if (isp != the_transceiver)
1427		return -ENODEV;
1428	if (otg->default_a && (otg->host == NULL || !otg->host->b_hnp_enable))
1429		return -ENOTCONN;
1430	if (!otg->default_a && (otg->gadget == NULL
1431			|| !otg->gadget->b_hnp_enable))
1432		return -ENOTCONN;
1433
1434	/* We want hardware to manage most HNP protocol timings.
1435	 * So do this part as early as possible...
1436	 */
1437	switch (isp->phy.otg->state) {
1438	case OTG_STATE_B_HOST:
1439		isp->phy.otg->state = OTG_STATE_B_PERIPHERAL;
1440		/* caller will suspend next */
1441		break;
1442	case OTG_STATE_A_HOST:
1443#if 0
1444		/* autoconnect mode avoids irq latency bugs */
1445		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1,
1446				MC1_BDIS_ACON_EN);
1447#endif
1448		/* caller must suspend then clear A_BUSREQ */
1449		usb_gadget_vbus_connect(otg->gadget);
1450		l = omap_readl(OTG_CTRL);
1451		l |= OTG_A_SETB_HNPEN;
1452		omap_writel(l, OTG_CTRL);
1453
1454		break;
1455	case OTG_STATE_A_PERIPHERAL:
1456		/* initiated by B-Host suspend */
1457		break;
1458	default:
1459		return -EILSEQ;
1460	}
1461	pr_debug("otg: HNP %s, %06x ...\n",
1462		state_name(isp), omap_readl(OTG_CTRL));
1463	check_state(isp, __func__);
1464	return 0;
1465#else
1466	/* srp-only */
1467	return -EINVAL;
1468#endif
1469}
1470
1471/*-------------------------------------------------------------------------*/
1472
1473static int
1474isp1301_probe(struct i2c_client *i2c)
1475{
1476	int			status;
1477	struct isp1301		*isp;
1478	int irq;
1479
1480	if (the_transceiver)
1481		return 0;
1482
1483	isp = kzalloc(sizeof *isp, GFP_KERNEL);
1484	if (!isp)
1485		return 0;
1486
1487	isp->phy.otg = kzalloc(sizeof *isp->phy.otg, GFP_KERNEL);
1488	if (!isp->phy.otg) {
1489		kfree(isp);
1490		return 0;
1491	}
1492
1493	INIT_WORK(&isp->work, isp1301_work);
1494	timer_setup(&isp->timer, isp1301_timer, 0);
1495
1496	i2c_set_clientdata(i2c, isp);
1497	isp->client = i2c;
1498
1499	/* verify the chip (shouldn't be necessary) */
1500	status = isp1301_get_u16(isp, ISP1301_VENDOR_ID);
1501	if (status != I2C_VENDOR_ID_PHILIPS) {
1502		dev_dbg(&i2c->dev, "not philips id: %d\n", status);
1503		goto fail;
1504	}
1505	status = isp1301_get_u16(isp, ISP1301_PRODUCT_ID);
1506	if (status != I2C_PRODUCT_ID_PHILIPS_1301) {
1507		dev_dbg(&i2c->dev, "not isp1301, %d\n", status);
1508		goto fail;
1509	}
1510	isp->i2c_release = i2c->dev.release;
1511	i2c->dev.release = isp1301_release;
1512
1513	/* initial development used chiprev 2.00 */
1514	status = i2c_smbus_read_word_data(i2c, ISP1301_BCD_DEVICE);
1515	dev_info(&i2c->dev, "chiprev %x.%02x, driver " DRIVER_VERSION "\n",
1516		status >> 8, status & 0xff);
1517
1518	/* make like power-on reset */
1519	isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_1, MC1_MASK);
1520
1521	isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2, MC2_BI_DI);
1522	isp1301_clear_bits(isp, ISP1301_MODE_CONTROL_2, ~MC2_BI_DI);
1523
1524	isp1301_set_bits(isp, ISP1301_OTG_CONTROL_1,
1525				OTG1_DM_PULLDOWN | OTG1_DP_PULLDOWN);
1526	isp1301_clear_bits(isp, ISP1301_OTG_CONTROL_1,
1527				~(OTG1_DM_PULLDOWN | OTG1_DP_PULLDOWN));
1528
1529	isp1301_clear_bits(isp, ISP1301_INTERRUPT_LATCH, ~0);
1530	isp1301_clear_bits(isp, ISP1301_INTERRUPT_FALLING, ~0);
1531	isp1301_clear_bits(isp, ISP1301_INTERRUPT_RISING, ~0);
1532
1533#ifdef	CONFIG_USB_OTG
1534	status = otg_bind(isp);
1535	if (status < 0) {
1536		dev_dbg(&i2c->dev, "can't bind OTG\n");
1537		goto fail;
1538	}
1539#endif
1540
1541	if (machine_is_omap_h2()) {
1542		struct gpio_desc *gpiod;
1543
1544		/* full speed signaling by default */
1545		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_1,
1546			MC1_SPEED);
1547		isp1301_set_bits(isp, ISP1301_MODE_CONTROL_2,
1548			MC2_SPD_SUSP_CTRL);
1549
1550		gpiod = devm_gpiod_get(&i2c->dev, NULL, GPIOD_IN);
1551		if (IS_ERR(gpiod)) {
1552			dev_err(&i2c->dev, "cannot obtain H2 GPIO\n");
1553			goto fail;
1554		}
1555		gpiod_set_consumer_name(gpiod, "isp1301");
1556		irq = gpiod_to_irq(gpiod);
1557		isp->irq_type = IRQF_TRIGGER_FALLING;
1558	} else {
1559		irq = i2c->irq;
1560	}
1561
1562	status = request_irq(irq, isp1301_irq,
1563			isp->irq_type, DRIVER_NAME, isp);
1564	if (status < 0) {
1565		dev_dbg(&i2c->dev, "can't get IRQ %d, err %d\n",
1566				i2c->irq, status);
1567		goto fail;
1568	}
1569
1570	isp->phy.dev = &i2c->dev;
1571	isp->phy.label = DRIVER_NAME;
1572	isp->phy.set_power = isp1301_set_power;
1573
1574	isp->phy.otg->usb_phy = &isp->phy;
1575	isp->phy.otg->set_host = isp1301_set_host;
1576	isp->phy.otg->set_peripheral = isp1301_set_peripheral;
1577	isp->phy.otg->start_srp = isp1301_start_srp;
1578	isp->phy.otg->start_hnp = isp1301_start_hnp;
1579
1580	enable_vbus_draw(isp, 0);
1581	power_down(isp);
1582	the_transceiver = isp;
1583
1584#ifdef	CONFIG_USB_OTG
1585	update_otg1(isp, isp1301_get_u8(isp, ISP1301_INTERRUPT_SOURCE));
1586	update_otg2(isp, isp1301_get_u8(isp, ISP1301_OTG_STATUS));
1587#endif
1588
1589	dump_regs(isp, __func__);
1590
1591#ifdef	VERBOSE
1592	mod_timer(&isp->timer, jiffies + TIMER_JIFFIES);
1593	dev_dbg(&i2c->dev, "scheduled timer, %d min\n", TIMER_MINUTES);
1594#endif
1595
1596	status = usb_add_phy(&isp->phy, USB_PHY_TYPE_USB2);
1597	if (status < 0)
1598		dev_err(&i2c->dev, "can't register transceiver, %d\n",
1599			status);
1600
1601	return 0;
1602
1603fail:
1604	kfree(isp->phy.otg);
1605	kfree(isp);
1606	return -ENODEV;
1607}
1608
1609static const struct i2c_device_id isp1301_id[] = {
1610	{ "isp1301_omap", 0 },
1611	{ }
1612};
1613MODULE_DEVICE_TABLE(i2c, isp1301_id);
1614
1615static struct i2c_driver isp1301_driver = {
1616	.driver = {
1617		.name	= "isp1301_omap",
1618	},
1619	.probe_new	= isp1301_probe,
1620	.remove		= isp1301_remove,
1621	.id_table	= isp1301_id,
1622};
1623
1624/*-------------------------------------------------------------------------*/
1625
1626static int __init isp_init(void)
1627{
1628	return i2c_add_driver(&isp1301_driver);
1629}
1630subsys_initcall(isp_init);
1631
1632static void __exit isp_exit(void)
1633{
1634	if (the_transceiver)
1635		usb_remove_phy(&the_transceiver->phy);
1636	i2c_del_driver(&isp1301_driver);
1637}
1638module_exit(isp_exit);
1639