2929#include <linux/delay.h>
3030#include <linux/dmi.h>
3131#include <linux/kobject.h>
32+ #include "pddf_multifpgapci_defs.h"
3233#include "pddf_psu_defs.h"
3334#include "pddf_psu_driver.h"
3435
4041#define psu_dbg (...)
4142#endif
4243
44+ extern void * get_device_table (char * name );
4345
4446#define PSU_REG_VOUT_MODE 0x20
4547
@@ -442,6 +444,22 @@ ssize_t psu_store_default(struct device *dev, struct device_attribute *da, const
442444 return count ;
443445}
444446
447+ int psu_multifpgapci_read (PSU_DATA_ATTR * adata , int * output ) {
448+ struct pci_dev * pci_dev = NULL ;
449+
450+ if (ptr_multifpgapci_readpci == NULL ) {
451+ printk (KERN_ERR "PDDF_PSU: pddf_multifpgapci_module is not loaded" );
452+ return -1 ;
453+ }
454+
455+ pci_dev = (struct pci_dev * )get_device_table (adata -> devname );
456+ if (pci_dev == NULL ) {
457+ printk (KERN_ERR "PDDF_PSU: Unable to get pci_dev of %s for %s\n" , adata -> devname , adata -> aname );
458+ return -1 ;
459+ }
460+ return ptr_multifpgapci_readpci (pci_dev , adata -> offset , output );
461+ }
462+
445463int sonic_i2c_get_psu_byte_default (void * client , PSU_DATA_ATTR * adata , void * data )
446464{
447465 int status = 0 ;
@@ -454,8 +472,24 @@ int sonic_i2c_get_psu_byte_default(void *client, PSU_DATA_ATTR *adata, void *dat
454472 val = board_i2c_cpld_read (adata -> devaddr , adata -> offset );
455473 if (val < 0 )
456474 return val ;
457- padata -> val .intval = ((val & adata -> mask ) == adata -> cmpval );
458- psu_dbg (KERN_ERR "%s: byte_value = 0x%x\n" , __FUNCTION__ , padata -> val .intval );
475+ }
476+ else if (strncmp (adata -> devtype , "multifpgapci" , strlen ("multifpgapci" )) == 0 )
477+ {
478+ status = psu_multifpgapci_read (adata , & val );
479+ if (status )
480+ goto ret ;
481+ }
482+ else
483+ {
484+ printk (KERN_ERR "%s: Unexpected devtype = " , __FUNCTION__ , adata -> devtype );
485+ }
486+
487+ padata -> val .intval = ((val & adata -> mask ) == adata -> cmpval );
488+ psu_dbg (KERN_ERR "%s: byte_value = 0x%x\n" , __FUNCTION__ , padata -> val .intval );
489+
490+ ret :
491+ if (status ) {
492+ printk (KERN_ERR "%s: Error status = %d" , __FUNCTION__ , status );
459493 }
460494
461495 return status ;
0 commit comments