Merge branch 'char-misc-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc
* 'char-misc-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: misc: ad525x_dpot: Fix AD8400 spi transfer size. pch_phub: Fix MAC address writing issue for LAPIS ML7831 pch_phub: Improve ADE(Address Decode Enable) control pch_phub: Change company name OKI SEMICONDUCTOR to LAPIS Semiconductor pch_phub: Support new device LAPIS Semiconductor ML7831 IOH pcie-gadget-spear: Add "platform:" prefix for platform modalias MAINTAINERS: add CHAR and MISC driver maintainers
This commit is contained in:
commit
b0d81664a0
5 changed files with 77 additions and 31 deletions
|
@ -1789,6 +1789,14 @@ F: include/net/cfg80211.h
|
|||
F: net/wireless/*
|
||||
X: net/wireless/wext*
|
||||
|
||||
CHAR and MISC DRIVERS
|
||||
M: Arnd Bergmann <arnd@arndb.de>
|
||||
M: Greg Kroah-Hartman <greg@kroah.com>
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
|
||||
S: Maintained
|
||||
F: drivers/char/*
|
||||
F: drivers/misc/*
|
||||
|
||||
CHECKPATCH
|
||||
M: Andy Whitcroft <apw@canonical.com>
|
||||
S: Supported
|
||||
|
|
|
@ -472,7 +472,7 @@ config BMP085
|
|||
module will be called bmp085.
|
||||
|
||||
config PCH_PHUB
|
||||
tristate "Intel EG20T PCH / OKI SEMICONDUCTOR IOH(ML7213/ML7223) PHUB"
|
||||
tristate "Intel EG20T PCH/LAPIS Semicon IOH(ML7213/ML7223/ML7831) PHUB"
|
||||
depends on PCI
|
||||
help
|
||||
This driver is for PCH(Platform controller Hub) PHUB(Packet Hub) of
|
||||
|
@ -480,12 +480,13 @@ config PCH_PHUB
|
|||
processor. The Topcliff has MAC address and Option ROM data in SROM.
|
||||
This driver can access MAC address and Option ROM data in SROM.
|
||||
|
||||
This driver also can be used for OKI SEMICONDUCTOR IOH(Input/
|
||||
Output Hub), ML7213 and ML7223.
|
||||
ML7213 IOH is for IVI(In-Vehicle Infotainment) use and ML7223 IOH is
|
||||
for MP(Media Phone) use.
|
||||
ML7213/ML7223 is companion chip for Intel Atom E6xx series.
|
||||
ML7213/ML7223 is completely compatible for Intel EG20T PCH.
|
||||
This driver also can be used for LAPIS Semiconductor's IOH,
|
||||
ML7213/ML7223/ML7831.
|
||||
ML7213 which is for IVI(In-Vehicle Infotainment) use.
|
||||
ML7223 IOH is for MP(Media Phone) use.
|
||||
ML7831 IOH is for general purpose use.
|
||||
ML7213/ML7223/ML7831 is companion chip for Intel Atom E6xx series.
|
||||
ML7213/ML7223/ML7831 is completely compatible for Intel EG20T PCH.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
be called pch_phub.
|
||||
|
|
|
@ -100,7 +100,7 @@ enum dpot_devid {
|
|||
AD5293_ID = DPOT_CONF(F_RDACS_RW | F_SPI_16BIT, BRDAC0, 10, 27),
|
||||
AD7376_ID = DPOT_CONF(F_RDACS_WONLY | F_AD_APPDATA | F_SPI_8BIT,
|
||||
BRDAC0, 7, 28),
|
||||
AD8400_ID = DPOT_CONF(F_RDACS_WONLY | F_AD_APPDATA | F_SPI_8BIT,
|
||||
AD8400_ID = DPOT_CONF(F_RDACS_WONLY | F_AD_APPDATA | F_SPI_16BIT,
|
||||
BRDAC0, 8, 29),
|
||||
AD8402_ID = DPOT_CONF(F_RDACS_WONLY | F_AD_APPDATA | F_SPI_16BIT,
|
||||
BRDAC0 | BRDAC1, 8, 30),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2010 OKI SEMICONDUCTOR CO., LTD.
|
||||
* Copyright (C) 2011 LAPIS Semiconductor Co., Ltd.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -41,10 +41,10 @@
|
|||
#define PCH_PHUB_ROM_START_ADDR_EG20T 0x80 /* ROM data area start address offset
|
||||
(Intel EG20T PCH)*/
|
||||
#define PCH_PHUB_ROM_START_ADDR_ML7213 0x400 /* ROM data area start address
|
||||
offset(OKI SEMICONDUCTOR ML7213)
|
||||
offset(LAPIS Semicon ML7213)
|
||||
*/
|
||||
#define PCH_PHUB_ROM_START_ADDR_ML7223 0x400 /* ROM data area start address
|
||||
offset(OKI SEMICONDUCTOR ML7223)
|
||||
offset(LAPIS Semicon ML7223)
|
||||
*/
|
||||
|
||||
/* MAX number of INT_REDUCE_CONTROL registers */
|
||||
|
@ -73,6 +73,9 @@
|
|||
#define PCI_DEVICE_ID_ROHM_ML7223_mPHUB 0x8012 /* for Bus-m */
|
||||
#define PCI_DEVICE_ID_ROHM_ML7223_nPHUB 0x8002 /* for Bus-n */
|
||||
|
||||
/* Macros for ML7831 */
|
||||
#define PCI_DEVICE_ID_ROHM_ML7831_PHUB 0x8801
|
||||
|
||||
/* SROM ACCESS Macro */
|
||||
#define PCH_WORD_ADDR_MASK (~((1 << 2) - 1))
|
||||
|
||||
|
@ -115,6 +118,7 @@
|
|||
* @pch_mac_start_address: MAC address area start address
|
||||
* @pch_opt_rom_start_address: Option ROM start address
|
||||
* @ioh_type: Save IOH type
|
||||
* @pdev: pointer to pci device struct
|
||||
*/
|
||||
struct pch_phub_reg {
|
||||
u32 phub_id_reg;
|
||||
|
@ -136,6 +140,7 @@ struct pch_phub_reg {
|
|||
u32 pch_mac_start_address;
|
||||
u32 pch_opt_rom_start_address;
|
||||
int ioh_type;
|
||||
struct pci_dev *pdev;
|
||||
};
|
||||
|
||||
/* SROM SPEC for MAC address assignment offset */
|
||||
|
@ -471,7 +476,7 @@ static int pch_phub_write_gbe_mac_addr(struct pch_phub_reg *chip, u8 *data)
|
|||
int retval;
|
||||
int i;
|
||||
|
||||
if (chip->ioh_type == 1) /* EG20T */
|
||||
if ((chip->ioh_type == 1) || (chip->ioh_type == 5)) /* EG20T or ML7831*/
|
||||
retval = pch_phub_gbe_serial_rom_conf(chip);
|
||||
else /* ML7223 */
|
||||
retval = pch_phub_gbe_serial_rom_conf_mp(chip);
|
||||
|
@ -498,6 +503,7 @@ static ssize_t pch_phub_bin_read(struct file *filp, struct kobject *kobj,
|
|||
unsigned int orom_size;
|
||||
int ret;
|
||||
int err;
|
||||
ssize_t rom_size;
|
||||
|
||||
struct pch_phub_reg *chip =
|
||||
dev_get_drvdata(container_of(kobj, struct device, kobj));
|
||||
|
@ -509,6 +515,10 @@ static ssize_t pch_phub_bin_read(struct file *filp, struct kobject *kobj,
|
|||
}
|
||||
|
||||
/* Get Rom signature */
|
||||
chip->pch_phub_extrom_base_address = pci_map_rom(chip->pdev, &rom_size);
|
||||
if (!chip->pch_phub_extrom_base_address)
|
||||
goto exrom_map_err;
|
||||
|
||||
pch_phub_read_serial_rom(chip, chip->pch_opt_rom_start_address,
|
||||
(unsigned char *)&rom_signature);
|
||||
rom_signature &= 0xff;
|
||||
|
@ -539,10 +549,13 @@ static ssize_t pch_phub_bin_read(struct file *filp, struct kobject *kobj,
|
|||
goto return_err;
|
||||
}
|
||||
return_ok:
|
||||
pci_unmap_rom(chip->pdev, chip->pch_phub_extrom_base_address);
|
||||
mutex_unlock(&pch_phub_mutex);
|
||||
return addr_offset;
|
||||
|
||||
return_err:
|
||||
pci_unmap_rom(chip->pdev, chip->pch_phub_extrom_base_address);
|
||||
exrom_map_err:
|
||||
mutex_unlock(&pch_phub_mutex);
|
||||
return_err_nomutex:
|
||||
return err;
|
||||
|
@ -555,6 +568,7 @@ static ssize_t pch_phub_bin_write(struct file *filp, struct kobject *kobj,
|
|||
int err;
|
||||
unsigned int addr_offset;
|
||||
int ret;
|
||||
ssize_t rom_size;
|
||||
struct pch_phub_reg *chip =
|
||||
dev_get_drvdata(container_of(kobj, struct device, kobj));
|
||||
|
||||
|
@ -571,6 +585,12 @@ static ssize_t pch_phub_bin_write(struct file *filp, struct kobject *kobj,
|
|||
goto return_ok;
|
||||
}
|
||||
|
||||
chip->pch_phub_extrom_base_address = pci_map_rom(chip->pdev, &rom_size);
|
||||
if (!chip->pch_phub_extrom_base_address) {
|
||||
err = -ENOMEM;
|
||||
goto exrom_map_err;
|
||||
}
|
||||
|
||||
for (addr_offset = 0; addr_offset < count; addr_offset++) {
|
||||
if (PCH_PHUB_OROM_SIZE < off + addr_offset)
|
||||
goto return_ok;
|
||||
|
@ -585,10 +605,14 @@ static ssize_t pch_phub_bin_write(struct file *filp, struct kobject *kobj,
|
|||
}
|
||||
|
||||
return_ok:
|
||||
pci_unmap_rom(chip->pdev, chip->pch_phub_extrom_base_address);
|
||||
mutex_unlock(&pch_phub_mutex);
|
||||
return addr_offset;
|
||||
|
||||
return_err:
|
||||
pci_unmap_rom(chip->pdev, chip->pch_phub_extrom_base_address);
|
||||
|
||||
exrom_map_err:
|
||||
mutex_unlock(&pch_phub_mutex);
|
||||
return err;
|
||||
}
|
||||
|
@ -598,8 +622,14 @@ static ssize_t show_pch_mac(struct device *dev, struct device_attribute *attr,
|
|||
{
|
||||
u8 mac[8];
|
||||
struct pch_phub_reg *chip = dev_get_drvdata(dev);
|
||||
ssize_t rom_size;
|
||||
|
||||
chip->pch_phub_extrom_base_address = pci_map_rom(chip->pdev, &rom_size);
|
||||
if (!chip->pch_phub_extrom_base_address)
|
||||
return -ENOMEM;
|
||||
|
||||
pch_phub_read_gbe_mac_addr(chip, mac);
|
||||
pci_unmap_rom(chip->pdev, chip->pch_phub_extrom_base_address);
|
||||
|
||||
return sprintf(buf, "%pM\n", mac);
|
||||
}
|
||||
|
@ -608,6 +638,7 @@ static ssize_t store_pch_mac(struct device *dev, struct device_attribute *attr,
|
|||
const char *buf, size_t count)
|
||||
{
|
||||
u8 mac[6];
|
||||
ssize_t rom_size;
|
||||
struct pch_phub_reg *chip = dev_get_drvdata(dev);
|
||||
|
||||
if (count != 18)
|
||||
|
@ -617,7 +648,12 @@ static ssize_t store_pch_mac(struct device *dev, struct device_attribute *attr,
|
|||
(u32 *)&mac[0], (u32 *)&mac[1], (u32 *)&mac[2], (u32 *)&mac[3],
|
||||
(u32 *)&mac[4], (u32 *)&mac[5]);
|
||||
|
||||
chip->pch_phub_extrom_base_address = pci_map_rom(chip->pdev, &rom_size);
|
||||
if (!chip->pch_phub_extrom_base_address)
|
||||
return -ENOMEM;
|
||||
|
||||
pch_phub_write_gbe_mac_addr(chip, mac);
|
||||
pci_unmap_rom(chip->pdev, chip->pch_phub_extrom_base_address);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
@ -640,7 +676,6 @@ static int __devinit pch_phub_probe(struct pci_dev *pdev,
|
|||
int retval;
|
||||
|
||||
int ret;
|
||||
ssize_t rom_size;
|
||||
struct pch_phub_reg *chip;
|
||||
|
||||
chip = kzalloc(sizeof(struct pch_phub_reg), GFP_KERNEL);
|
||||
|
@ -677,19 +712,7 @@ static int __devinit pch_phub_probe(struct pci_dev *pdev,
|
|||
"in pch_phub_base_address variable is %p\n", __func__,
|
||||
chip->pch_phub_base_address);
|
||||
|
||||
if (id->driver_data != 3) {
|
||||
chip->pch_phub_extrom_base_address =\
|
||||
pci_map_rom(pdev, &rom_size);
|
||||
if (chip->pch_phub_extrom_base_address == 0) {
|
||||
dev_err(&pdev->dev, "%s: pci_map_rom FAILED", __func__);
|
||||
ret = -ENOMEM;
|
||||
goto err_pci_map;
|
||||
}
|
||||
dev_dbg(&pdev->dev, "%s : "
|
||||
"pci_map_rom SUCCESS and value in "
|
||||
"pch_phub_extrom_base_address variable is %p\n",
|
||||
__func__, chip->pch_phub_extrom_base_address);
|
||||
}
|
||||
chip->pdev = pdev; /* Save pci device struct */
|
||||
|
||||
if (id->driver_data == 1) { /* EG20T PCH */
|
||||
const char *board_name;
|
||||
|
@ -763,6 +786,22 @@ static int __devinit pch_phub_probe(struct pci_dev *pdev,
|
|||
chip->pch_opt_rom_start_address =\
|
||||
PCH_PHUB_ROM_START_ADDR_ML7223;
|
||||
chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_ML7223;
|
||||
} else if (id->driver_data == 5) { /* ML7831 */
|
||||
retval = sysfs_create_file(&pdev->dev.kobj,
|
||||
&dev_attr_pch_mac.attr);
|
||||
if (retval)
|
||||
goto err_sysfs_create;
|
||||
|
||||
retval = sysfs_create_bin_file(&pdev->dev.kobj, &pch_bin_attr);
|
||||
if (retval)
|
||||
goto exit_bin_attr;
|
||||
|
||||
/* set the prefech value */
|
||||
iowrite32(0x000affaa, chip->pch_phub_base_address + 0x14);
|
||||
/* set the interrupt delay value */
|
||||
iowrite32(0x25, chip->pch_phub_base_address + 0x44);
|
||||
chip->pch_opt_rom_start_address = PCH_PHUB_ROM_START_ADDR_EG20T;
|
||||
chip->pch_mac_start_address = PCH_PHUB_MAC_START_ADDR_EG20T;
|
||||
}
|
||||
|
||||
chip->ioh_type = id->driver_data;
|
||||
|
@ -773,8 +812,6 @@ static int __devinit pch_phub_probe(struct pci_dev *pdev,
|
|||
sysfs_remove_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr);
|
||||
|
||||
err_sysfs_create:
|
||||
pci_unmap_rom(pdev, chip->pch_phub_extrom_base_address);
|
||||
err_pci_map:
|
||||
pci_iounmap(pdev, chip->pch_phub_base_address);
|
||||
err_pci_iomap:
|
||||
pci_release_regions(pdev);
|
||||
|
@ -792,7 +829,6 @@ static void __devexit pch_phub_remove(struct pci_dev *pdev)
|
|||
|
||||
sysfs_remove_file(&pdev->dev.kobj, &dev_attr_pch_mac.attr);
|
||||
sysfs_remove_bin_file(&pdev->dev.kobj, &pch_bin_attr);
|
||||
pci_unmap_rom(pdev, chip->pch_phub_extrom_base_address);
|
||||
pci_iounmap(pdev, chip->pch_phub_base_address);
|
||||
pci_release_regions(pdev);
|
||||
pci_disable_device(pdev);
|
||||
|
@ -847,6 +883,7 @@ static struct pci_device_id pch_phub_pcidev_id[] = {
|
|||
{ PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7213_PHUB), 2, },
|
||||
{ PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7223_mPHUB), 3, },
|
||||
{ PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7223_nPHUB), 4, },
|
||||
{ PCI_VDEVICE(ROHM, PCI_DEVICE_ID_ROHM_ML7831_PHUB), 5, },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(pci, pch_phub_pcidev_id);
|
||||
|
@ -873,5 +910,5 @@ static void __exit pch_phub_pci_exit(void)
|
|||
module_init(pch_phub_pci_init);
|
||||
module_exit(pch_phub_pci_exit);
|
||||
|
||||
MODULE_DESCRIPTION("Intel EG20T PCH/OKI SEMICONDUCTOR IOH(ML7213/ML7223) PHUB");
|
||||
MODULE_DESCRIPTION("Intel EG20T PCH/LAPIS Semiconductor IOH(ML7213/ML7223) PHUB");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
|
@ -903,6 +903,6 @@ static void __exit spear_pcie_gadget_exit(void)
|
|||
}
|
||||
module_exit(spear_pcie_gadget_exit);
|
||||
|
||||
MODULE_ALIAS("pcie-gadget-spear");
|
||||
MODULE_ALIAS("platform:pcie-gadget-spear");
|
||||
MODULE_AUTHOR("Pratyush Anand");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
Loading…
Reference in a new issue