Symbol: cp500
drivers/misc/keba/cp500.c
241
static ssize_t cp500_get_fpga_version(struct cp500 *cp500, char *buf,
drivers/misc/keba/cp500.c
246
if (CP500_IS_CP035(cp500))
drivers/misc/keba/cp500.c
248
else if (CP500_IS_CP505(cp500))
drivers/misc/keba/cp500.c
254
cp500->version.major, cp500->version.minor);
drivers/misc/keba/cp500.c
257
if (cp500->version.build & CP500_BUILD_TEST)
drivers/misc/keba/cp500.c
259
cp500->version.build & ~CP500_BUILD_TEST);
drivers/misc/keba/cp500.c
269
struct cp500 *cp500 = dev_get_drvdata(dev);
drivers/misc/keba/cp500.c
271
return cp500_get_fpga_version(cp500, buf, PAGE_SIZE);
drivers/misc/keba/cp500.c
278
struct cp500 *cp500 = dev_get_drvdata(dev);
drivers/misc/keba/cp500.c
285
if (ioread8(cp500->system_startup_addr + CP500_RECONFIG_REG) &
drivers/misc/keba/cp500.c
295
struct cp500 *cp500 = dev_get_drvdata(dev);
drivers/misc/keba/cp500.c
310
iowrite8(0, cp500->system_startup_addr + CP500_RECONFIG_REG);
drivers/misc/keba/cp500.c
313
cp500->system_startup_addr + CP500_RECONFIG_REG);
drivers/misc/keba/cp500.c
324
ATTRIBUTE_GROUPS(cp500);
drivers/misc/keba/cp500.c
334
static int cp500_register_i2c(struct cp500 *cp500)
drivers/misc/keba/cp500.c
338
cp500->i2c = kzalloc_obj(*cp500->i2c);
drivers/misc/keba/cp500.c
339
if (!cp500->i2c)
drivers/misc/keba/cp500.c
342
cp500->i2c->auxdev.name = "i2c";
drivers/misc/keba/cp500.c
343
cp500->i2c->auxdev.id = 0;
drivers/misc/keba/cp500.c
344
cp500->i2c->auxdev.dev.release = cp500_i2c_release;
drivers/misc/keba/cp500.c
345
cp500->i2c->auxdev.dev.parent = &cp500->pci_dev->dev;
drivers/misc/keba/cp500.c
346
cp500->i2c->io = (struct resource) {
drivers/misc/keba/cp500.c
348
.start = (resource_size_t) cp500->sys_hwbase +
drivers/misc/keba/cp500.c
349
cp500->devs->i2c.offset,
drivers/misc/keba/cp500.c
350
.end = (resource_size_t) cp500->sys_hwbase +
drivers/misc/keba/cp500.c
351
cp500->devs->i2c.offset +
drivers/misc/keba/cp500.c
352
cp500->devs->i2c.size - 1,
drivers/misc/keba/cp500.c
355
cp500->i2c->info_size = ARRAY_SIZE(cp500_i2c_info);
drivers/misc/keba/cp500.c
356
cp500->i2c->info = cp500_i2c_info;
drivers/misc/keba/cp500.c
358
ret = auxiliary_device_init(&cp500->i2c->auxdev);
drivers/misc/keba/cp500.c
360
kfree(cp500->i2c);
drivers/misc/keba/cp500.c
361
cp500->i2c = NULL;
drivers/misc/keba/cp500.c
365
ret = __auxiliary_device_add(&cp500->i2c->auxdev, "keba");
drivers/misc/keba/cp500.c
367
auxiliary_device_uninit(&cp500->i2c->auxdev);
drivers/misc/keba/cp500.c
368
cp500->i2c = NULL;
drivers/misc/keba/cp500.c
384
static int cp500_register_spi(struct cp500 *cp500, u8 esc_type)
drivers/misc/keba/cp500.c
389
cp500->spi = kzalloc_obj(*cp500->spi);
drivers/misc/keba/cp500.c
390
if (!cp500->spi)
drivers/misc/keba/cp500.c
393
if (CP500_IS_CP035(cp500))
drivers/misc/keba/cp500.c
400
cp500->spi->auxdev.name = "spi";
drivers/misc/keba/cp500.c
401
cp500->spi->auxdev.id = 0;
drivers/misc/keba/cp500.c
402
cp500->spi->auxdev.dev.release = cp500_spi_release;
drivers/misc/keba/cp500.c
403
cp500->spi->auxdev.dev.parent = &cp500->pci_dev->dev;
drivers/misc/keba/cp500.c
404
cp500->spi->io = (struct resource) {
drivers/misc/keba/cp500.c
406
.start = (resource_size_t) cp500->sys_hwbase +
drivers/misc/keba/cp500.c
407
cp500->devs->spi.offset,
drivers/misc/keba/cp500.c
408
.end = (resource_size_t) cp500->sys_hwbase +
drivers/misc/keba/cp500.c
409
cp500->devs->spi.offset +
drivers/misc/keba/cp500.c
410
cp500->devs->spi.size - 1,
drivers/misc/keba/cp500.c
413
cp500->spi->info_size = info_size;
drivers/misc/keba/cp500.c
414
cp500->spi->info = cp500_spi_info;
drivers/misc/keba/cp500.c
416
ret = auxiliary_device_init(&cp500->spi->auxdev);
drivers/misc/keba/cp500.c
418
kfree(cp500->spi);
drivers/misc/keba/cp500.c
419
cp500->spi = NULL;
drivers/misc/keba/cp500.c
423
ret = __auxiliary_device_add(&cp500->spi->auxdev, "keba");
drivers/misc/keba/cp500.c
425
auxiliary_device_uninit(&cp500->spi->auxdev);
drivers/misc/keba/cp500.c
426
cp500->spi = NULL;
drivers/misc/keba/cp500.c
442
static int cp500_register_fan(struct cp500 *cp500)
drivers/misc/keba/cp500.c
446
cp500->fan = kzalloc_obj(*cp500->fan);
drivers/misc/keba/cp500.c
447
if (!cp500->fan)
drivers/misc/keba/cp500.c
450
cp500->fan->auxdev.name = "fan";
drivers/misc/keba/cp500.c
451
cp500->fan->auxdev.id = 0;
drivers/misc/keba/cp500.c
452
cp500->fan->auxdev.dev.release = cp500_fan_release;
drivers/misc/keba/cp500.c
453
cp500->fan->auxdev.dev.parent = &cp500->pci_dev->dev;
drivers/misc/keba/cp500.c
454
cp500->fan->io = (struct resource) {
drivers/misc/keba/cp500.c
456
.start = (resource_size_t) cp500->sys_hwbase +
drivers/misc/keba/cp500.c
457
cp500->devs->fan.offset,
drivers/misc/keba/cp500.c
458
.end = (resource_size_t) cp500->sys_hwbase +
drivers/misc/keba/cp500.c
459
cp500->devs->fan.offset +
drivers/misc/keba/cp500.c
460
cp500->devs->fan.size - 1,
drivers/misc/keba/cp500.c
464
ret = auxiliary_device_init(&cp500->fan->auxdev);
drivers/misc/keba/cp500.c
466
kfree(cp500->fan);
drivers/misc/keba/cp500.c
467
cp500->fan = NULL;
drivers/misc/keba/cp500.c
471
ret = __auxiliary_device_add(&cp500->fan->auxdev, "keba");
drivers/misc/keba/cp500.c
473
auxiliary_device_uninit(&cp500->fan->auxdev);
drivers/misc/keba/cp500.c
474
cp500->fan = NULL;
drivers/misc/keba/cp500.c
490
static int cp500_register_batt(struct cp500 *cp500)
drivers/misc/keba/cp500.c
494
cp500->batt = kzalloc_obj(*cp500->batt);
drivers/misc/keba/cp500.c
495
if (!cp500->batt)
drivers/misc/keba/cp500.c
498
cp500->batt->auxdev.name = "batt";
drivers/misc/keba/cp500.c
499
cp500->batt->auxdev.id = 0;
drivers/misc/keba/cp500.c
500
cp500->batt->auxdev.dev.release = cp500_batt_release;
drivers/misc/keba/cp500.c
501
cp500->batt->auxdev.dev.parent = &cp500->pci_dev->dev;
drivers/misc/keba/cp500.c
502
cp500->batt->io = (struct resource) {
drivers/misc/keba/cp500.c
504
.start = (resource_size_t) cp500->sys_hwbase +
drivers/misc/keba/cp500.c
505
cp500->devs->batt.offset,
drivers/misc/keba/cp500.c
506
.end = (resource_size_t) cp500->sys_hwbase +
drivers/misc/keba/cp500.c
507
cp500->devs->batt.offset +
drivers/misc/keba/cp500.c
508
cp500->devs->batt.size - 1,
drivers/misc/keba/cp500.c
512
ret = auxiliary_device_init(&cp500->batt->auxdev);
drivers/misc/keba/cp500.c
514
kfree(cp500->batt);
drivers/misc/keba/cp500.c
515
cp500->batt = NULL;
drivers/misc/keba/cp500.c
519
ret = __auxiliary_device_add(&cp500->batt->auxdev, "keba");
drivers/misc/keba/cp500.c
521
auxiliary_device_uninit(&cp500->batt->auxdev);
drivers/misc/keba/cp500.c
522
cp500->batt = NULL;
drivers/misc/keba/cp500.c
538
static int cp500_register_uart(struct cp500 *cp500,
drivers/misc/keba/cp500.c
551
(*uart)->auxdev.dev.parent = &cp500->pci_dev->dev;
drivers/misc/keba/cp500.c
554
.start = (resource_size_t) cp500->sys_hwbase + info->offset,
drivers/misc/keba/cp500.c
555
.end = (resource_size_t) cp500->sys_hwbase + info->offset +
drivers/misc/keba/cp500.c
607
static int cp500_nvmem_register(struct cp500 *cp500,
drivers/misc/keba/cp500.c
610
struct device *dev = &cp500->pci_dev->dev;
drivers/misc/keba/cp500.c
630
cp500->nvmem_cpu.base_nvmem = base_nvmem;
drivers/misc/keba/cp500.c
631
cp500->nvmem_cpu.offset = CP500_EEPROM_CPU_OFFSET;
drivers/misc/keba/cp500.c
634
nvmem_config.priv = &cp500->nvmem_cpu;
drivers/misc/keba/cp500.c
638
cp500->nvmem_cpu.nvmem = tmp;
drivers/misc/keba/cp500.c
640
cp500->nvmem_user.base_nvmem = base_nvmem;
drivers/misc/keba/cp500.c
641
cp500->nvmem_user.offset = CP500_EEPROM_USER_OFFSET;
drivers/misc/keba/cp500.c
644
nvmem_config.priv = &cp500->nvmem_user;
drivers/misc/keba/cp500.c
647
nvmem_unregister(cp500->nvmem_cpu.nvmem);
drivers/misc/keba/cp500.c
648
cp500->nvmem_cpu.nvmem = NULL;
drivers/misc/keba/cp500.c
652
cp500->nvmem_user.nvmem = tmp;
drivers/misc/keba/cp500.c
657
static void cp500_nvmem_unregister(struct cp500 *cp500)
drivers/misc/keba/cp500.c
661
if (cp500->nvmem_user.nvmem) {
drivers/misc/keba/cp500.c
662
nvmem_unregister(cp500->nvmem_user.nvmem);
drivers/misc/keba/cp500.c
663
cp500->nvmem_user.nvmem = NULL;
drivers/misc/keba/cp500.c
665
if (cp500->nvmem_cpu.nvmem) {
drivers/misc/keba/cp500.c
666
nvmem_unregister(cp500->nvmem_cpu.nvmem);
drivers/misc/keba/cp500.c
667
cp500->nvmem_cpu.nvmem = NULL;
drivers/misc/keba/cp500.c
671
notified = atomic_read(&cp500->nvmem_notified);
drivers/misc/keba/cp500.c
673
nvmem_device_put(cp500->nvmem_cpu.base_nvmem);
drivers/misc/keba/cp500.c
678
const struct cp500 *cp500 = data;
drivers/misc/keba/cp500.c
687
if (dev == &cp500->pci_dev->dev)
drivers/misc/keba/cp500.c
697
struct cp500 *cp500;
drivers/misc/keba/cp500.c
705
cp500 = container_of(nb, struct cp500, nvmem_notifier);
drivers/misc/keba/cp500.c
706
dev = &cp500->pci_dev->dev;
drivers/misc/keba/cp500.c
709
notified = atomic_read(&cp500->nvmem_notified);
drivers/misc/keba/cp500.c
712
nvmem = nvmem_device_find(cp500, cp500_nvmem_match);
drivers/misc/keba/cp500.c
715
if (!atomic_try_cmpxchg_relaxed(&cp500->nvmem_notified, &notified, 1)) {
drivers/misc/keba/cp500.c
721
ret = cp500_nvmem_register(cp500, nvmem);
drivers/misc/keba/cp500.c
734
if (cp500_register_spi(cp500, esc_type))
drivers/misc/keba/cp500.c
740
static void cp500_register_auxiliary_devs(struct cp500 *cp500)
drivers/misc/keba/cp500.c
742
struct device *dev = &cp500->pci_dev->dev;
drivers/misc/keba/cp500.c
743
u8 present = ioread8(cp500->system_startup_addr + CP500_PRESENT_REG);
drivers/misc/keba/cp500.c
745
if (cp500_register_i2c(cp500))
drivers/misc/keba/cp500.c
748
if (cp500_register_fan(cp500))
drivers/misc/keba/cp500.c
750
if (cp500_register_batt(cp500))
drivers/misc/keba/cp500.c
752
if (cp500->devs->uart0_rfb.size &&
drivers/misc/keba/cp500.c
753
cp500->devs->uart0_rfb.msix < cp500->msix_num) {
drivers/misc/keba/cp500.c
754
int irq = pci_irq_vector(cp500->pci_dev,
drivers/misc/keba/cp500.c
755
cp500->devs->uart0_rfb.msix);
drivers/misc/keba/cp500.c
757
if (cp500_register_uart(cp500, &cp500->uart0_rfb, "rs485-uart",
drivers/misc/keba/cp500.c
758
&cp500->devs->uart0_rfb, irq))
drivers/misc/keba/cp500.c
761
if (cp500->devs->uart1_dbg.size &&
drivers/misc/keba/cp500.c
762
cp500->devs->uart1_dbg.msix < cp500->msix_num) {
drivers/misc/keba/cp500.c
763
int irq = pci_irq_vector(cp500->pci_dev,
drivers/misc/keba/cp500.c
764
cp500->devs->uart1_dbg.msix);
drivers/misc/keba/cp500.c
766
if (cp500_register_uart(cp500, &cp500->uart1_dbg, "rs232-uart",
drivers/misc/keba/cp500.c
767
&cp500->devs->uart1_dbg, irq))
drivers/misc/keba/cp500.c
770
if (cp500->devs->uart2_si1.size &&
drivers/misc/keba/cp500.c
771
cp500->devs->uart2_si1.msix < cp500->msix_num) {
drivers/misc/keba/cp500.c
772
int irq = pci_irq_vector(cp500->pci_dev,
drivers/misc/keba/cp500.c
773
cp500->devs->uart2_si1.msix);
drivers/misc/keba/cp500.c
775
if (cp500_register_uart(cp500, &cp500->uart2_si1, "uart",
drivers/misc/keba/cp500.c
776
&cp500->devs->uart2_si1, irq))
drivers/misc/keba/cp500.c
787
static void cp500_unregister_auxiliary_devs(struct cp500 *cp500)
drivers/misc/keba/cp500.c
789
if (cp500->spi) {
drivers/misc/keba/cp500.c
790
cp500_unregister_dev(&cp500->spi->auxdev);
drivers/misc/keba/cp500.c
791
cp500->spi = NULL;
drivers/misc/keba/cp500.c
793
if (cp500->i2c) {
drivers/misc/keba/cp500.c
794
cp500_unregister_dev(&cp500->i2c->auxdev);
drivers/misc/keba/cp500.c
795
cp500->i2c = NULL;
drivers/misc/keba/cp500.c
797
if (cp500->fan) {
drivers/misc/keba/cp500.c
798
cp500_unregister_dev(&cp500->fan->auxdev);
drivers/misc/keba/cp500.c
799
cp500->fan = NULL;
drivers/misc/keba/cp500.c
801
if (cp500->batt) {
drivers/misc/keba/cp500.c
802
cp500_unregister_dev(&cp500->batt->auxdev);
drivers/misc/keba/cp500.c
803
cp500->batt = NULL;
drivers/misc/keba/cp500.c
805
if (cp500->uart0_rfb) {
drivers/misc/keba/cp500.c
806
cp500_unregister_dev(&cp500->uart0_rfb->auxdev);
drivers/misc/keba/cp500.c
807
cp500->uart0_rfb = NULL;
drivers/misc/keba/cp500.c
809
if (cp500->uart1_dbg) {
drivers/misc/keba/cp500.c
810
cp500_unregister_dev(&cp500->uart1_dbg->auxdev);
drivers/misc/keba/cp500.c
811
cp500->uart1_dbg = NULL;
drivers/misc/keba/cp500.c
813
if (cp500->uart2_si1) {
drivers/misc/keba/cp500.c
814
cp500_unregister_dev(&cp500->uart2_si1->auxdev);
drivers/misc/keba/cp500.c
815
cp500->uart2_si1 = NULL;
drivers/misc/keba/cp500.c
821
struct cp500 *cp500 = dev;
drivers/misc/keba/cp500.c
822
u32 axi_address = ioread32(cp500->system_startup_addr + CP500_AXI_REG);
drivers/misc/keba/cp500.c
828
dev_err(&cp500->pci_dev->dev, "AXI response error at 0x%08x\n",
drivers/misc/keba/cp500.c
834
static int cp500_enable(struct cp500 *cp500)
drivers/misc/keba/cp500.c
839
if (cp500->msix_num > CP500_NUM_MSIX_NO_AXI) {
drivers/misc/keba/cp500.c
840
axi_irq = pci_irq_vector(cp500->pci_dev, CP500_AXI_MSIX);
drivers/misc/keba/cp500.c
842
CP500, cp500);
drivers/misc/keba/cp500.c
844
dev_err(&cp500->pci_dev->dev,
drivers/misc/keba/cp500.c
853
static void cp500_disable(struct cp500 *cp500)
drivers/misc/keba/cp500.c
857
if (cp500->msix_num > CP500_NUM_MSIX_NO_AXI) {
drivers/misc/keba/cp500.c
858
axi_irq = pci_irq_vector(cp500->pci_dev, CP500_AXI_MSIX);
drivers/misc/keba/cp500.c
859
free_irq(axi_irq, cp500);
drivers/misc/keba/cp500.c
867
struct cp500 *cp500;
drivers/misc/keba/cp500.c
872
cp500 = devm_kzalloc(dev, sizeof(*cp500), GFP_KERNEL);
drivers/misc/keba/cp500.c
873
if (!cp500)
drivers/misc/keba/cp500.c
875
cp500->pci_dev = pci_dev;
drivers/misc/keba/cp500.c
876
cp500->sys_hwbase = pci_resource_start(pci_dev, CP500_SYS_BAR);
drivers/misc/keba/cp500.c
877
cp500->ecm_hwbase = pci_resource_start(pci_dev, CP500_ECM_BAR);
drivers/misc/keba/cp500.c
878
if (!cp500->sys_hwbase || !cp500->ecm_hwbase)
drivers/misc/keba/cp500.c
881
if (CP500_IS_CP035(cp500))
drivers/misc/keba/cp500.c
882
cp500->devs = &cp035_devices;
drivers/misc/keba/cp500.c
883
else if (CP500_IS_CP505(cp500))
drivers/misc/keba/cp500.c
884
cp500->devs = &cp505_devices;
drivers/misc/keba/cp500.c
885
else if (CP500_IS_CP520(cp500))
drivers/misc/keba/cp500.c
886
cp500->devs = &cp520_devices;
drivers/misc/keba/cp500.c
896
startup.end = startup.start + cp500->devs->startup.size - 1;
drivers/misc/keba/cp500.c
897
cp500->system_startup_addr = devm_ioremap_resource(&pci_dev->dev,
drivers/misc/keba/cp500.c
899
if (IS_ERR(cp500->system_startup_addr)) {
drivers/misc/keba/cp500.c
900
ret = PTR_ERR(cp500->system_startup_addr);
drivers/misc/keba/cp500.c
904
cp500->msix_num = pci_alloc_irq_vectors(pci_dev, CP500_NUM_MSIX_NO_MMI,
drivers/misc/keba/cp500.c
906
if (cp500->msix_num < CP500_NUM_MSIX_NO_MMI) {
drivers/misc/keba/cp500.c
913
cp500_vers = ioread32(cp500->system_startup_addr + CP500_VERSION_REG);
drivers/misc/keba/cp500.c
914
cp500->version.major = (cp500_vers & 0xff);
drivers/misc/keba/cp500.c
915
cp500->version.minor = (cp500_vers >> 8) & 0xff;
drivers/misc/keba/cp500.c
916
cp500->version.build = (cp500_vers >> 16) & 0xffff;
drivers/misc/keba/cp500.c
917
cp500_get_fpga_version(cp500, buf, sizeof(buf));
drivers/misc/keba/cp500.c
921
pci_set_drvdata(pci_dev, cp500);
drivers/misc/keba/cp500.c
923
cp500->nvmem_notifier.notifier_call = cp500_nvmem;
drivers/misc/keba/cp500.c
924
ret = nvmem_register_notifier(&cp500->nvmem_notifier);
drivers/misc/keba/cp500.c
928
ret = cp500_enable(cp500);
drivers/misc/keba/cp500.c
932
cp500_register_auxiliary_devs(cp500);
drivers/misc/keba/cp500.c
937
nvmem_unregister_notifier(&cp500->nvmem_notifier);
drivers/misc/keba/cp500.c
949
struct cp500 *cp500 = pci_get_drvdata(pci_dev);
drivers/misc/keba/cp500.c
955
nvmem_unregister_notifier(&cp500->nvmem_notifier);
drivers/misc/keba/cp500.c
956
cp500_nvmem_unregister(cp500);
drivers/misc/keba/cp500.c
958
cp500_unregister_auxiliary_devs(cp500);
drivers/misc/keba/cp500.c
960
cp500_disable(cp500);