We will port w83792d.c to linux-2.6

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jean, Patrick, Rudolf

I still have NOT solved the problem that 792 driver for linux-2.6 can NOT work
On Ali M1563 chipset(ABit SU-2S motherboard). Do you have any other suggestion
on it? I want to solve this problem very much, and need your help.

I checked our 792 Windows driver, find that there are several functions used
to get SMBus base address:
GetSMBusBaseAddr()
GetSMBusBaseAddrAli()
GetSMBusBaseAddrALiM1563()
GetSMBusBaseAddrNew()

It seems that the function GetSMBusBaseAddrALiM1563() is for ALi M1563 only,
The only difference between GetSMBusBaseAddrALiM1563() and
GetSMBusBaseAddrAli() is that: the first one need "bit &" a mask "0xfffc",
while the latter need NOT.
Does it have something to do with our problem?

Since I can not contact the person who wrote the Windows driver now, I paste
three functions in this mail, would you like check it for me?

If I want to try to add a mask "0xfffc" in Linux driver too, how should I
modify the codes?

******************  for your reference   ************************
ULONG       GetSMBusBaseAddrALiM1563(
				OUT  ULONG  *Address,
				IN   ULONG  VendorID,
				IN   ULONG  DeviceID,
				IN   ULONG  RegNo)
{
	//ULONG  Address;
	ULONG  Portin   = 0xcfc;  //config data reg
	ULONG  Portout  = 0xcf8;  // config address reg
	ULONG  Portdata ;
	ULONG  DeviceVendor;
	BOOLEAN Found = FALSE;
	ULONG  RegIndex;
	ULONG  FunNo;
	ULONG  DevNo;
	ULONG  BusNo;
	ULONG  ConfigAddr;
	ULONG  ConfigData;

	DeviceVendor = (DeviceID << 16) | VendorID ;

	KdPrint(  ("DeviceVendor=%8x	 \n",DeviceVendor));

	///////////////////////auto detect  vendor id and device id////
	RegIndex = 0;  //  vendor and device id
	for (BusNo =0 ; BusNo < 256; BusNo ++)
	{
		for (FunNo =0 ; FunNo < 8; FunNo ++)
		{
			for (DevNo =0 ; DevNo < 32; DevNo ++)
			{
				ConfigAddr = 0x80000000 | RegIndex | (FunNo << 8) | (DevNo << 11) | (BusNo << 16);

				WRITE_PORT_ULONG( (PULONG)(Portout)  , ConfigAddr );
				ConfigData = READ_PORT_ULONG( (PULONG)(Portin) );
				if ( ConfigData == DeviceVendor )
				{
					Found = TRUE;
					break;
				}
			}
			if ( Found )
				break;
		}
		if ( Found )
			break;
	}
	if ( Found )
	{
		KdPrint(  ("FunNo=%4x ,DevNo=%4x, BusNo=%4x \n",FunNo,DevNo,BusNo));
		RegIndex = RegNo;
		ConfigAddr = 0x80000000 | RegIndex | (FunNo << 8) | (DevNo << 11) | (BusNo << 16);
		WRITE_PORT_ULONG( (PULONG)(Portout)  , ConfigAddr );
		ConfigData = READ_PORT_ULONG( (PULONG)(Portin) );
		*Address = ConfigData & 0xfffc ;  /* here !!! */
		KdPrint(  ("get smbus	address	Address	=%8x \n",*Address));
		return 0;
	}
	else
		return -1;
}

While in GetSMBusBaseAddr() and GetSMBusBaseAddrAli() the mask is:
*Address = ConfigData & 0xfffe ;
*Address = ConfigData & 0xffff ;


Thanks
Best Regards
Chunhao


> -----Original Message-----
> From: Jean Delvare [mailto:khali at linux-fr.org]
> Sent: 2005??3??11?? 03:41
> To: Patrick Mochel
> Cc: PI14 HUANG0; PI10 LHHsu; PI14 DZSHEN; sensors at Stimpy.netroedge.com; PI13
> CFLi
> Subject: Re: We will port w83792d.c to linux-2.6
> 
> Hi Patrick,
> 
> > Note that while not *identical*, the controller shares a lot of
> > similarities with the i810 driver.
> 
> I assume i801.
> 
> > In SMB_HST_STS (offset 0), bit 6 is "ISUSE_STS", which reads a 0 the
> > first time after the device is reset, then a 1 after that. Seems like
> > it can be used to check if the deivce is ready to be used after a
> > reset..
> 
> Thanks for the info. Incidentally it might help me with a problem I have
> with the i2c-viapro driver. You would be surprised how many common
> points there are between the various SMBus masters found on x86
> motherboards.
> 
> I guess that this bit is read-only?
> 
> According to the source, bit 7 is "DONE". I guess it is read-only as
> well, and set after a successful transaction?
> 
> If bit 5 used for anything?
> 
> > It says that it only happens at address 0x58. Is there a device there?
> > If there is, perhaps you could try increasing the timeout?
> 
> I would guess that 0x58 is the value of the register, which is 7 bits of
> address and 1 bit of R/W. So the device address would rather be 0x44
> (0x58 >> 1). It happens that 0x44 is a special address for SMBus 2.0, if
> I am not mistaken.
> 
> I don't know much more, unfortunately.
> 
> Anyway thanks Patrick for the info.
> 
> --
> Jean Delvare

===========================================================================================The privileged confidential information contained in this email is intended for use only by the addressees as indicated by the original author of this email. If you are not the addressee indicated in this email or are not responsible for delivery of the email to such person, please kindly reply the sender indicating accordingly and delete all copies of it from your computer and network server immediately. We thank you for your cooperation. It is advisable that any unauthorized use of confidential information of Winbond is strictly prohibited; and any information in this email that does not relate to the official business of Winbond shall be deemed as neither given nor endorsed by Winbond.===========================================================================================If your computer is unable to decode Chinese font, please ignore the following message. They essentially repea!
 t the&nbsp; English statement above.???H???????t?????q?l???]???????K?????T, ?????v???o?H?H???w?????H?H???\????. ?????z???D?Q???w?????H?H???]???????]?b???g???v?????????U???????H??, ???z?i?????o?H?H?????Y?N?H???q?q???P???????A???????H????. ?????z???X?@, ?????????P??. ?S??????, ???????g???v?????????????q?l?????K???T???????O?Q?Y???T????. ?H???P?????q?l???~?L???????e,???o?????????q?l?????????N??.



[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux