Merge tag 'char-misc-3.6-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
Pull Char / Misc driver fixes from Greg Kroah-Hartman: "Here are some small misc and w1 driver fixes for 3.6-rc3. Nothing major, just some some bugfixes and a new device id for a w1 driver. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>" * tag 'char-misc-3.6-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: 1-Wire: Add support for the maxim ds1825 temperature sensor ti-st: Fix check for pdata->chip_awake function pointer mei: add mei_quirk_probe function mei: fix device stall after wd is stopped
This commit is contained in:
@@ -3,6 +3,7 @@ Kernel driver w1_therm
|
|||||||
|
|
||||||
Supported chips:
|
Supported chips:
|
||||||
* Maxim ds18*20 based temperature sensors.
|
* Maxim ds18*20 based temperature sensors.
|
||||||
|
* Maxim ds1825 based temperature sensors.
|
||||||
|
|
||||||
Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
|
Author: Evgeniy Polyakov <johnpol@2ka.mipt.ru>
|
||||||
|
|
||||||
@@ -15,6 +16,7 @@ supported family codes:
|
|||||||
W1_THERM_DS18S20 0x10
|
W1_THERM_DS18S20 0x10
|
||||||
W1_THERM_DS1822 0x22
|
W1_THERM_DS1822 0x22
|
||||||
W1_THERM_DS18B20 0x28
|
W1_THERM_DS18B20 0x28
|
||||||
|
W1_THERM_DS1825 0x3B
|
||||||
|
|
||||||
Support is provided through the sysfs w1_slave file. Each open and
|
Support is provided through the sysfs w1_slave file. Each open and
|
||||||
read sequence will initiate a temperature conversion then provide two
|
read sequence will initiate a temperature conversion then provide two
|
||||||
|
@@ -1253,7 +1253,7 @@ static int mei_irq_thread_write_handler(struct mei_io_list *cmpl_list,
|
|||||||
if (dev->wd_timeout)
|
if (dev->wd_timeout)
|
||||||
*slots -= mei_data2slots(MEI_START_WD_DATA_SIZE);
|
*slots -= mei_data2slots(MEI_START_WD_DATA_SIZE);
|
||||||
else
|
else
|
||||||
*slots -= mei_data2slots(MEI_START_WD_DATA_SIZE);
|
*slots -= mei_data2slots(MEI_WD_PARAMS_SIZE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (dev->stop)
|
if (dev->stop)
|
||||||
|
@@ -924,6 +924,27 @@ static struct miscdevice mei_misc_device = {
|
|||||||
.minor = MISC_DYNAMIC_MINOR,
|
.minor = MISC_DYNAMIC_MINOR,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* mei_quirk_probe - probe for devices that doesn't valid ME interface
|
||||||
|
* @pdev: PCI device structure
|
||||||
|
* @ent: entry into pci_device_table
|
||||||
|
*
|
||||||
|
* returns true if ME Interface is valid, false otherwise
|
||||||
|
*/
|
||||||
|
static bool __devinit mei_quirk_probe(struct pci_dev *pdev,
|
||||||
|
const struct pci_device_id *ent)
|
||||||
|
{
|
||||||
|
u32 reg;
|
||||||
|
if (ent->device == MEI_DEV_ID_PBG_1) {
|
||||||
|
pci_read_config_dword(pdev, 0x48, ®);
|
||||||
|
/* make sure that bit 9 is up and bit 10 is down */
|
||||||
|
if ((reg & 0x600) == 0x200) {
|
||||||
|
dev_info(&pdev->dev, "Device doesn't have valid ME Interface\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* mei_probe - Device Initialization Routine
|
* mei_probe - Device Initialization Routine
|
||||||
*
|
*
|
||||||
@@ -939,6 +960,12 @@ static int __devinit mei_probe(struct pci_dev *pdev,
|
|||||||
int err;
|
int err;
|
||||||
|
|
||||||
mutex_lock(&mei_mutex);
|
mutex_lock(&mei_mutex);
|
||||||
|
|
||||||
|
if (!mei_quirk_probe(pdev, ent)) {
|
||||||
|
err = -ENODEV;
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
if (mei_device) {
|
if (mei_device) {
|
||||||
err = -EEXIST;
|
err = -EEXIST;
|
||||||
goto end;
|
goto end;
|
||||||
|
@@ -87,7 +87,7 @@ static void ll_device_want_to_wakeup(struct st_data_s *st_data)
|
|||||||
/* communicate to platform about chip wakeup */
|
/* communicate to platform about chip wakeup */
|
||||||
kim_data = st_data->kim_data;
|
kim_data = st_data->kim_data;
|
||||||
pdata = kim_data->kim_pdev->dev.platform_data;
|
pdata = kim_data->kim_pdev->dev.platform_data;
|
||||||
if (pdata->chip_asleep)
|
if (pdata->chip_awake)
|
||||||
pdata->chip_awake(NULL);
|
pdata->chip_awake(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -91,6 +91,11 @@ static struct w1_family w1_therm_family_DS28EA00 = {
|
|||||||
.fops = &w1_therm_fops,
|
.fops = &w1_therm_fops,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct w1_family w1_therm_family_DS1825 = {
|
||||||
|
.fid = W1_THERM_DS1825,
|
||||||
|
.fops = &w1_therm_fops,
|
||||||
|
};
|
||||||
|
|
||||||
struct w1_therm_family_converter
|
struct w1_therm_family_converter
|
||||||
{
|
{
|
||||||
u8 broken;
|
u8 broken;
|
||||||
@@ -120,6 +125,10 @@ static struct w1_therm_family_converter w1_therm_families[] = {
|
|||||||
.f = &w1_therm_family_DS28EA00,
|
.f = &w1_therm_family_DS28EA00,
|
||||||
.convert = w1_DS18B20_convert_temp
|
.convert = w1_DS18B20_convert_temp
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.f = &w1_therm_family_DS1825,
|
||||||
|
.convert = w1_DS18B20_convert_temp
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline int w1_DS18B20_convert_temp(u8 rom[9])
|
static inline int w1_DS18B20_convert_temp(u8 rom[9])
|
||||||
|
@@ -39,6 +39,7 @@
|
|||||||
#define W1_EEPROM_DS2431 0x2D
|
#define W1_EEPROM_DS2431 0x2D
|
||||||
#define W1_FAMILY_DS2760 0x30
|
#define W1_FAMILY_DS2760 0x30
|
||||||
#define W1_FAMILY_DS2780 0x32
|
#define W1_FAMILY_DS2780 0x32
|
||||||
|
#define W1_THERM_DS1825 0x3B
|
||||||
#define W1_FAMILY_DS2781 0x3D
|
#define W1_FAMILY_DS2781 0x3D
|
||||||
#define W1_THERM_DS28EA00 0x42
|
#define W1_THERM_DS28EA00 0x42
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user