Lines Matching +full:add +full:- +full:ctrl
1 // SPDX-License-Identifier: GPL-2.0-only
3 * i2c-ali1563.c - i2c driver for the ALi 1563 Southbridge
69 int status = -EIO; in ali1563_transaction()
71 dev_dbg(&a->dev, "Transaction (pre): STS=%02x, CNTL1=%02x, " in ali1563_transaction()
72 "CNTL2=%02x, CMD=%02x, ADD=%02x, DAT0=%02x, DAT1=%02x\n", in ali1563_transaction()
79 dev_err(&a->dev, "ali1563: Trying to reset busy device\n"); in ali1563_transaction()
83 return -EBUSY; in ali1563_transaction()
90 } while (((data = inb_p(SMB_HST_STS)) & HST_STS_BUSY) && --timeout); in ali1563_transaction()
92 dev_dbg(&a->dev, "Transaction (post): STS=%02x, CNTL1=%02x, " in ali1563_transaction()
93 "CNTL2=%02x, CMD=%02x, ADD=%02x, DAT0=%02x, DAT1=%02x\n", in ali1563_transaction()
105 status = -ETIMEDOUT; in ali1563_transaction()
108 /* device error - no response, ignore the autodetection case */ in ali1563_transaction()
111 dev_err(&a->dev, "Device error!\n"); in ali1563_transaction()
112 status = -ENXIO; in ali1563_transaction()
116 dev_err(&a->dev, "Bus collision!\n"); in ali1563_transaction()
122 dev_err(&a->dev, "Cleaning fail after KILL!\n"); in ali1563_transaction()
133 int status = -EIO; in ali1563_block_start()
135 dev_dbg(&a->dev, "Block (pre): STS=%02x, CNTL1=%02x, " in ali1563_block_start()
136 "CNTL2=%02x, CMD=%02x, ADD=%02x, DAT0=%02x, DAT1=%02x\n", in ali1563_block_start()
143 dev_warn(&a->dev, "ali1563: Trying to reset busy device\n"); in ali1563_block_start()
147 return -EBUSY; in ali1563_block_start()
150 /* Clear byte-ready bit */ in ali1563_block_start()
153 /* Start transaction and wait for byte-ready bit to be set */ in ali1563_block_start()
159 } while (!((data = inb_p(SMB_HST_STS)) & HST_STS_DONE) && --timeout); in ali1563_block_start()
161 dev_dbg(&a->dev, "Block (post): STS=%02x, CNTL1=%02x, " in ali1563_block_start()
162 "CNTL2=%02x, CMD=%02x, ADD=%02x, DAT0=%02x, DAT1=%02x\n", in ali1563_block_start()
171 status = -ETIMEDOUT; in ali1563_block_start()
174 status = -ENXIO; in ali1563_block_start()
176 dev_err(&a->dev, "SMBus Error: %s%s%s%s%s\n", in ali1563_block_start()
195 len = data->block[0]; in ali1563_block()
201 outb_p(data->block[1], SMB_BLK_DAT); in ali1563_block()
209 outb_p(data->block[i + 1], SMB_BLK_DAT); in ali1563_block()
224 data->block[i+1] = inb_p(SMB_BLK_DAT); in ali1563_block()
240 for (timeout = ALI1563_MAX_TIMEOUT; timeout; timeout--) { in ali1563_access()
246 dev_warn(&a->dev, "SMBus not idle. HST_STS = %02x\n", reg); in ali1563_access()
267 dev_warn(&a->dev, "Unsupported transaction %d\n", size); in ali1563_access()
268 error = -EOPNOTSUPP; in ali1563_access()
287 outb_p(data->byte, SMB_HST_DAT0); in ali1563_access()
292 outb_p(data->word & 0xff, SMB_HST_DAT0); in ali1563_access()
293 outb_p((data->word & 0xff00) >> 8, SMB_HST_DAT1); in ali1563_access()
311 data->byte = inb_p(SMB_HST_DAT0); in ali1563_access()
314 data->byte = inb_p(SMB_HST_DAT0); in ali1563_access()
317 data->word = inb_p(SMB_HST_DAT0) + (inb_p(SMB_HST_DAT1) << 8); in ali1563_access()
334 u16 ctrl; in ali1563_setup() local
336 pci_read_config_word(dev, ALI1563_SMBBA, &ctrl); in ali1563_setup()
340 ali1563_smba = ctrl & ~(ALI1563_SMB_IOSIZE - 1); in ali1563_setup()
342 dev_warn(&dev->dev, "ali1563_smba Uninitialized\n"); in ali1563_setup()
347 if (!(ctrl & ALI1563_SMB_HOSTEN)) { in ali1563_setup()
348 dev_warn(&dev->dev, "Host Controller not enabled\n"); in ali1563_setup()
351 if (!(ctrl & ALI1563_SMB_IOEN)) { in ali1563_setup()
352 dev_warn(&dev->dev, "I/O space not enabled, trying manually\n"); in ali1563_setup()
354 ctrl | ALI1563_SMB_IOEN); in ali1563_setup()
355 pci_read_config_word(dev, ALI1563_SMBBA, &ctrl); in ali1563_setup()
356 if (!(ctrl & ALI1563_SMB_IOEN)) { in ali1563_setup()
357 dev_err(&dev->dev, in ali1563_setup()
369 dev_err(&dev->dev, "Could not allocate I/O space at 0x%04x\n", in ali1563_setup()
373 dev_info(&dev->dev, "Found ALi1563 SMBus at 0x%04x\n", ali1563_smba); in ali1563_setup()
377 return -ENODEV; in ali1563_setup()
404 ali1563_adapter.dev.parent = &dev->dev; in ali1563_probe()
415 dev_warn(&dev->dev, "ALi1563 SMBus probe failed (%d)\n", error); in ali1563_probe()