Update to 4.0
svn path=/dists/trunk/linux/; revision=22505
This commit is contained in:
parent
1553282b11
commit
c544d987d9
|
@ -1,6 +1,6 @@
|
|||
linux (3.19.3-1~exp2) UNRELEASED; urgency=medium
|
||||
linux (4.0-1~exp1) UNRELEASED; urgency=medium
|
||||
|
||||
*
|
||||
* New upstream release: http://kernelnewbies.org/Linux_4.0
|
||||
|
||||
-- maximilian attems <maks@debian.org> Sun, 29 Mar 2015 23:31:57 +0200
|
||||
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
From: David Sterba <dsterba@suse.cz>
|
||||
Date: Fri, 2 Jan 2015 19:12:57 +0100
|
||||
Subject: btrfs: simplify insert_orphan_item
|
||||
Origin: https://git.kernel.org/linus/9c4f61f01d269815bb7c37be3ede59c5587747c6
|
||||
Bug-Debian: https://bugs.debian.org/782362
|
||||
|
||||
We can search and add the orphan item in one go,
|
||||
btrfs_insert_orphan_item will find out if the item already exists.
|
||||
|
||||
Signed-off-by: David Sterba <dsterba@suse.cz>
|
||||
---
|
||||
fs/btrfs/tree-log.c | 16 ++++------------
|
||||
1 file changed, 4 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/fs/btrfs/tree-log.c
|
||||
+++ b/fs/btrfs/tree-log.c
|
||||
@@ -1263,21 +1263,13 @@ out:
|
||||
}
|
||||
|
||||
static int insert_orphan_item(struct btrfs_trans_handle *trans,
|
||||
- struct btrfs_root *root, u64 offset)
|
||||
+ struct btrfs_root *root, u64 ino)
|
||||
{
|
||||
int ret;
|
||||
- struct btrfs_path *path;
|
||||
|
||||
- path = btrfs_alloc_path();
|
||||
- if (!path)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
- ret = btrfs_find_item(root, path, BTRFS_ORPHAN_OBJECTID,
|
||||
- offset, BTRFS_ORPHAN_ITEM_KEY, NULL);
|
||||
- if (ret > 0)
|
||||
- ret = btrfs_insert_orphan_item(trans, root, offset);
|
||||
-
|
||||
- btrfs_free_path(path);
|
||||
+ ret = btrfs_insert_orphan_item(trans, root, ino);
|
||||
+ if (ret == -EEXIST)
|
||||
+ ret = 0;
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -81,7 +81,7 @@ upstream submission.
|
|||
rec = (const struct ihex_binrec *)fw->data;
|
||||
--- a/drivers/atm/fore200e.c
|
||||
+++ b/drivers/atm/fore200e.c
|
||||
@@ -2505,10 +2505,9 @@ static int fore200e_load_and_start_fw(st
|
||||
@@ -2506,10 +2506,9 @@ static int fore200e_load_and_start_fw(st
|
||||
return err;
|
||||
|
||||
sprintf(buf, "%s%s", fore200e->bus->proc_name, FW_EXT);
|
||||
|
@ -96,7 +96,7 @@ upstream submission.
|
|||
fw_size = firmware->size / sizeof(u32);
|
||||
--- a/drivers/bluetooth/ath3k.c
|
||||
+++ b/drivers/bluetooth/ath3k.c
|
||||
@@ -377,10 +377,8 @@ static int ath3k_load_patch(struct usb_d
|
||||
@@ -393,10 +393,8 @@ static int ath3k_load_patch(struct usb_d
|
||||
le32_to_cpu(fw_version.rom_version));
|
||||
|
||||
ret = request_firmware(&firmware, filename, &udev->dev);
|
||||
|
@ -108,7 +108,7 @@ upstream submission.
|
|||
|
||||
pt_rom_version = get_unaligned_le32(firmware->data +
|
||||
firmware->size - 8);
|
||||
@@ -440,10 +438,8 @@ static int ath3k_load_syscfg(struct usb_
|
||||
@@ -456,10 +454,8 @@ static int ath3k_load_syscfg(struct usb_
|
||||
le32_to_cpu(fw_version.rom_version), clk_value, ".dfu");
|
||||
|
||||
ret = request_firmware(&firmware, filename, &udev->dev);
|
||||
|
@ -168,7 +168,7 @@ upstream submission.
|
|||
|
||||
--- a/drivers/bluetooth/btmrvl_sdio.c
|
||||
+++ b/drivers/bluetooth/btmrvl_sdio.c
|
||||
@@ -328,8 +328,6 @@ static int btmrvl_sdio_download_helper(s
|
||||
@@ -355,8 +355,6 @@ static int btmrvl_sdio_download_helper(s
|
||||
ret = request_firmware(&fw_helper, card->helper,
|
||||
&card->func->dev);
|
||||
if ((ret < 0) || !fw_helper) {
|
||||
|
@ -177,7 +177,7 @@ upstream submission.
|
|||
ret = -ENOENT;
|
||||
goto done;
|
||||
}
|
||||
@@ -428,8 +426,6 @@ static int btmrvl_sdio_download_fw_w_hel
|
||||
@@ -455,8 +453,6 @@ static int btmrvl_sdio_download_fw_w_hel
|
||||
ret = request_firmware(&fw_firmware, card->firmware,
|
||||
&card->func->dev);
|
||||
if ((ret < 0) || !fw_firmware) {
|
||||
|
@ -203,7 +203,7 @@ upstream submission.
|
|||
fw->size, fw_name);
|
||||
--- a/drivers/dma/imx-sdma.c
|
||||
+++ b/drivers/dma/imx-sdma.c
|
||||
@@ -1287,11 +1287,8 @@ static void sdma_load_firmware(const str
|
||||
@@ -1284,11 +1284,8 @@ static void sdma_load_firmware(const str
|
||||
const struct sdma_script_start_addrs *addr;
|
||||
unsigned short *ram_code;
|
||||
|
||||
|
@ -231,9 +231,9 @@ upstream submission.
|
|||
|
||||
size = 0;
|
||||
where = 0;
|
||||
--- a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
|
||||
+++ b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
|
||||
@@ -1496,10 +1496,8 @@ nvc0_graph_ctor_fw(struct nvc0_graph_pri
|
||||
--- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
|
||||
+++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
|
||||
@@ -1507,10 +1507,8 @@ gf100_gr_ctor_fw(struct gf100_gr_priv *p
|
||||
if (ret) {
|
||||
snprintf(f, sizeof(f), "nouveau/%s", fwname);
|
||||
ret = request_firmware(&fw, f, nv_device_base(device));
|
||||
|
@ -262,7 +262,7 @@ upstream submission.
|
|||
printk(KERN_ERR
|
||||
--- a/drivers/gpu/drm/radeon/ni.c
|
||||
+++ b/drivers/gpu/drm/radeon/ni.c
|
||||
@@ -811,10 +811,6 @@ int ni_init_microcode(struct radeon_devi
|
||||
@@ -812,10 +812,6 @@ int ni_init_microcode(struct radeon_devi
|
||||
|
||||
out:
|
||||
if (err) {
|
||||
|
@ -275,7 +275,7 @@ upstream submission.
|
|||
release_firmware(rdev->me_fw);
|
||||
--- a/drivers/gpu/drm/radeon/r100.c
|
||||
+++ b/drivers/gpu/drm/radeon/r100.c
|
||||
@@ -1029,10 +1029,7 @@ static int r100_cp_init_microcode(struct
|
||||
@@ -1039,10 +1039,7 @@ static int r100_cp_init_microcode(struct
|
||||
}
|
||||
|
||||
err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
|
||||
|
@ -289,7 +289,7 @@ upstream submission.
|
|||
rdev->me_fw->size, fw_name);
|
||||
--- a/drivers/gpu/drm/radeon/r600.c
|
||||
+++ b/drivers/gpu/drm/radeon/r600.c
|
||||
@@ -2518,10 +2518,6 @@ int r600_init_microcode(struct radeon_de
|
||||
@@ -2519,10 +2519,6 @@ int r600_init_microcode(struct radeon_de
|
||||
|
||||
out:
|
||||
if (err) {
|
||||
|
@ -329,7 +329,7 @@ upstream submission.
|
|||
dev_priv->me_fw->size, fw_name);
|
||||
--- a/drivers/infiniband/hw/qib/qib_sd7220.c
|
||||
+++ b/drivers/infiniband/hw/qib/qib_sd7220.c
|
||||
@@ -405,10 +405,8 @@ int qib_sd7220_init(struct qib_devdata *
|
||||
@@ -406,10 +406,8 @@ int qib_sd7220_init(struct qib_devdata *
|
||||
}
|
||||
|
||||
ret = request_firmware(&fw, SD7220_FW_NAME, &dd->pcidev->dev);
|
||||
|
@ -343,7 +343,7 @@ upstream submission.
|
|||
ret = qib_ibsd_ucode_loaded(dd->pport, fw);
|
||||
--- a/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
+++ b/drivers/input/touchscreen/atmel_mxt_ts.c
|
||||
@@ -1942,10 +1942,8 @@ static int mxt_load_fw(struct device *de
|
||||
@@ -1892,10 +1892,8 @@ static int mxt_load_fw(struct device *de
|
||||
int ret;
|
||||
|
||||
ret = request_firmware(&fw, fn, dev);
|
||||
|
@ -742,7 +742,7 @@ upstream submission.
|
|||
GFP_KERNEL | GFP_DMA);
|
||||
--- a/drivers/media/pci/ttpci/av7110.c
|
||||
+++ b/drivers/media/pci/ttpci/av7110.c
|
||||
@@ -1531,16 +1531,9 @@ static int get_firmware(struct av7110* a
|
||||
@@ -1534,16 +1534,9 @@ static int get_firmware(struct av7110* a
|
||||
/* request the av7110 firmware, this will block until someone uploads it */
|
||||
ret = request_firmware(&fw, "dvb-ttpci-01.fw", &av7110->dev->pci->dev);
|
||||
if (ret) {
|
||||
|
@ -836,7 +836,7 @@ upstream submission.
|
|||
fw_data = (void *)fw_entry->data;
|
||||
--- a/drivers/media/pci/bt8xx/bttv-cards.c
|
||||
+++ b/drivers/media/pci/bt8xx/bttv-cards.c
|
||||
@@ -3834,10 +3834,8 @@ static int pvr_boot(struct bttv *btv)
|
||||
@@ -3912,10 +3912,8 @@ static int pvr_boot(struct bttv *btv)
|
||||
int rc;
|
||||
|
||||
rc = request_firmware(&fw_entry, "hcwamc.rbf", &btv->c.pci->dev);
|
||||
|
@ -961,7 +961,7 @@ upstream submission.
|
|||
printk(KERN_ERR "ERROR: Firmware size mismatch "
|
||||
--- a/drivers/media/pci/cx23885/cx23885-cards.c
|
||||
+++ b/drivers/media/pci/cx23885/cx23885-cards.c
|
||||
@@ -1980,11 +1980,7 @@ void cx23885_card_setup(struct cx23885_d
|
||||
@@ -2165,11 +2165,7 @@ void cx23885_card_setup(struct cx23885_d
|
||||
cinfo.rev, filename);
|
||||
|
||||
ret = request_firmware(&fw, filename, &dev->pci->dev);
|
||||
|
@ -1063,7 +1063,7 @@ upstream submission.
|
|||
|
||||
--- a/drivers/media/usb/s2255/s2255drv.c
|
||||
+++ b/drivers/media/usb/s2255/s2255drv.c
|
||||
@@ -2304,10 +2304,8 @@ static int s2255_probe(struct usb_interf
|
||||
@@ -2299,10 +2299,8 @@ static int s2255_probe(struct usb_interf
|
||||
}
|
||||
/* load the first chunk */
|
||||
if (request_firmware(&dev->fw_data->fw,
|
||||
|
@ -1104,23 +1104,9 @@ upstream submission.
|
|||
|
||||
printk(KERN_INFO "%s() firmware read %Zu bytes.\n",
|
||||
__func__, fw->size);
|
||||
--- a/drivers/staging/media/tlg2300/pd-main.c
|
||||
+++ b/drivers/staging/media/tlg2300/pd-main.c
|
||||
@@ -219,10 +219,8 @@ static int firmware_download(struct usb_
|
||||
size_t max_packet_size;
|
||||
|
||||
ret = request_firmware(&fw, firmware_name, &udev->dev);
|
||||
- if (ret) {
|
||||
- log("download err : %d", ret);
|
||||
+ if (ret)
|
||||
return ret;
|
||||
- }
|
||||
|
||||
fwlength = fw->size;
|
||||
|
||||
--- a/drivers/misc/ti-st/st_kim.c
|
||||
+++ b/drivers/misc/ti-st/st_kim.c
|
||||
@@ -302,11 +302,8 @@ static long download_firmware(struct kim
|
||||
@@ -308,11 +308,8 @@ static long download_firmware(struct kim
|
||||
request_firmware(&kim_gdata->fw_entry, bts_scr_name,
|
||||
&kim_gdata->kim_pdev->dev);
|
||||
if (unlikely((err != 0) || (kim_gdata->fw_entry->data == NULL) ||
|
||||
|
@ -1230,7 +1216,7 @@ upstream submission.
|
|||
if (bp->mips_firmware->size < sizeof(*mips_fw) ||
|
||||
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
|
||||
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
|
||||
@@ -12953,11 +12953,8 @@ static int bnx2x_init_firmware(struct bn
|
||||
@@ -12976,11 +12976,8 @@ static int bnx2x_init_firmware(struct bn
|
||||
BNX2X_DEV_INFO("Loading %s\n", fw_file_name);
|
||||
|
||||
rc = request_firmware(&bp->firmware, fw_file_name, &bp->pdev->dev);
|
||||
|
@ -1245,7 +1231,7 @@ upstream submission.
|
|||
if (rc) {
|
||||
--- a/drivers/net/ethernet/broadcom/tg3.c
|
||||
+++ b/drivers/net/ethernet/broadcom/tg3.c
|
||||
@@ -11325,11 +11325,8 @@ static int tg3_request_firmware(struct t
|
||||
@@ -11337,11 +11337,8 @@ static int tg3_request_firmware(struct t
|
||||
{
|
||||
const struct tg3_firmware_hdr *fw_hdr;
|
||||
|
||||
|
@ -1464,7 +1450,7 @@ upstream submission.
|
|||
|
||||
--- a/drivers/net/wireless/atmel.c
|
||||
+++ b/drivers/net/wireless/atmel.c
|
||||
@@ -3927,12 +3927,8 @@ static int reset_atmel_card(struct net_d
|
||||
@@ -3917,12 +3917,8 @@ static int reset_atmel_card(struct net_d
|
||||
strcpy(priv->firmware_id, "atmel_at76c502.bin");
|
||||
}
|
||||
err = request_firmware(&fw_entry, priv->firmware_id, priv->sys_dev);
|
||||
|
@ -1480,7 +1466,7 @@ upstream submission.
|
|||
int success = 0;
|
||||
--- a/drivers/net/wireless/b43/main.c
|
||||
+++ b/drivers/net/wireless/b43/main.c
|
||||
@@ -2215,19 +2215,8 @@ int b43_do_request_fw(struct b43_request
|
||||
@@ -2253,19 +2253,8 @@ int b43_do_request_fw(struct b43_request
|
||||
}
|
||||
err = request_firmware(&ctx->blob, ctx->fwname,
|
||||
ctx->dev->dev->dev);
|
||||
|
@ -1582,7 +1568,7 @@ upstream submission.
|
|||
else
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-drv.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-drv.c
|
||||
@@ -1096,13 +1096,8 @@ static void iwl_req_fw_callback(const st
|
||||
@@ -1078,13 +1078,8 @@ static void iwl_req_fw_callback(const st
|
||||
if (!pieces)
|
||||
return;
|
||||
|
||||
|
@ -1610,7 +1596,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/net/wireless/mwifiex/main.c
|
||||
+++ b/drivers/net/wireless/mwifiex/main.c
|
||||
@@ -394,11 +394,8 @@ static void mwifiex_fw_dpc(const struct
|
||||
@@ -401,11 +401,8 @@ static void mwifiex_fw_dpc(const struct
|
||||
bool init_failed = false;
|
||||
struct wireless_dev *wdev;
|
||||
|
||||
|
@ -1625,7 +1611,7 @@ upstream submission.
|
|||
adapter->firmware = firmware;
|
||||
--- a/drivers/net/wireless/mwl8k.c
|
||||
+++ b/drivers/net/wireless/mwl8k.c
|
||||
@@ -5708,16 +5708,12 @@ static int mwl8k_firmware_load_success(s
|
||||
@@ -5711,16 +5711,12 @@ static int mwl8k_firmware_load_success(s
|
||||
static void mwl8k_fw_state_machine(const struct firmware *fw, void *context)
|
||||
{
|
||||
struct mwl8k_priv *priv = context;
|
||||
|
@ -1643,7 +1629,7 @@ upstream submission.
|
|||
priv->fw_helper = fw;
|
||||
rc = mwl8k_request_fw(priv, priv->fw_pref, &priv->fw_ucode,
|
||||
true);
|
||||
@@ -5752,11 +5748,8 @@ static void mwl8k_fw_state_machine(const
|
||||
@@ -5755,11 +5751,8 @@ static void mwl8k_fw_state_machine(const
|
||||
break;
|
||||
|
||||
case FW_STATE_LOADING_ALT:
|
||||
|
@ -1656,7 +1642,7 @@ upstream submission.
|
|||
priv->fw_ucode = fw;
|
||||
rc = mwl8k_firmware_load_success(priv);
|
||||
if (rc)
|
||||
@@ -5794,10 +5787,8 @@ retry:
|
||||
@@ -5797,10 +5790,8 @@ retry:
|
||||
|
||||
/* Ask userland hotplug daemon for the device firmware */
|
||||
rc = mwl8k_request_firmware(priv, fw_image, nowait);
|
||||
|
@ -1704,7 +1690,7 @@ upstream submission.
|
|||
|
||||
--- a/drivers/net/wireless/orinoco/orinoco_usb.c
|
||||
+++ b/drivers/net/wireless/orinoco/orinoco_usb.c
|
||||
@@ -1669,7 +1669,6 @@ static int ezusb_probe(struct usb_interf
|
||||
@@ -1667,7 +1667,6 @@ static int ezusb_probe(struct usb_interf
|
||||
if (ezusb_firmware_download(upriv, &firmware) < 0)
|
||||
goto error;
|
||||
} else {
|
||||
|
@ -1714,7 +1700,7 @@ upstream submission.
|
|||
|
||||
--- a/drivers/net/wireless/p54/p54pci.c
|
||||
+++ b/drivers/net/wireless/p54/p54pci.c
|
||||
@@ -496,7 +496,6 @@ static void p54p_firmware_step2(const st
|
||||
@@ -499,7 +499,6 @@ static void p54p_firmware_step2(const st
|
||||
int err;
|
||||
|
||||
if (!fw) {
|
||||
|
@ -1779,7 +1765,7 @@ upstream submission.
|
|||
rt2x00_err(rt2x00dev, "Failed to read Firmware\n");
|
||||
--- a/drivers/net/wireless/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/rtlwifi/core.c
|
||||
@@ -114,7 +114,6 @@ void rtl_fw_cb(const struct firmware *fi
|
||||
@@ -115,7 +115,6 @@ static void rtl_fw_do_work(const struct
|
||||
if (!err)
|
||||
goto found_alt;
|
||||
}
|
||||
|
@ -1825,7 +1811,7 @@ upstream submission.
|
|||
wl1251_error("nvs size is not multiple of 32 bits: %zu",
|
||||
--- a/drivers/net/wireless/ti/wlcore/main.c
|
||||
+++ b/drivers/net/wireless/ti/wlcore/main.c
|
||||
@@ -749,10 +749,8 @@ static int wl12xx_fetch_firmware(struct
|
||||
@@ -762,10 +762,8 @@ static int wl12xx_fetch_firmware(struct
|
||||
|
||||
ret = request_firmware(&fw, fw_name, wl->dev);
|
||||
|
||||
|
@ -1870,7 +1856,7 @@ upstream submission.
|
|||
static inline u16 get_bcdDevice(const struct usb_device *udev)
|
||||
--- a/drivers/scsi/advansys.c
|
||||
+++ b/drivers/scsi/advansys.c
|
||||
@@ -4298,8 +4298,6 @@ static ushort AscInitAsc1000Driver(ASC_D
|
||||
@@ -4280,8 +4280,6 @@ static ushort AscInitAsc1000Driver(ASC_D
|
||||
|
||||
err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
|
||||
if (err) {
|
||||
|
@ -1879,7 +1865,7 @@ upstream submission.
|
|||
asc_dvc->err_code |= ASC_IERR_MCODE_CHKSUM;
|
||||
return err;
|
||||
}
|
||||
@@ -4631,8 +4629,6 @@ static int AdvInitAsc3550Driver(ADV_DVC_
|
||||
@@ -4613,8 +4611,6 @@ static int AdvInitAsc3550Driver(ADV_DVC_
|
||||
|
||||
err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
|
||||
if (err) {
|
||||
|
@ -1888,7 +1874,7 @@ upstream submission.
|
|||
asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM;
|
||||
return err;
|
||||
}
|
||||
@@ -5147,8 +5143,6 @@ static int AdvInitAsc38C0800Driver(ADV_D
|
||||
@@ -5129,8 +5125,6 @@ static int AdvInitAsc38C0800Driver(ADV_D
|
||||
|
||||
err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
|
||||
if (err) {
|
||||
|
@ -1897,7 +1883,7 @@ upstream submission.
|
|||
asc_dvc->err_code = ASC_IERR_MCODE_CHKSUM;
|
||||
return err;
|
||||
}
|
||||
@@ -5649,8 +5643,6 @@ static int AdvInitAsc38C1600Driver(ADV_D
|
||||
@@ -5631,8 +5625,6 @@ static int AdvInitAsc38C1600Driver(ADV_D
|
||||
|
||||
err = request_firmware(&fw, fwname, asc_dvc->drv_ptr->dev);
|
||||
if (err) {
|
||||
|
@ -1908,7 +1894,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/scsi/aic94xx/aic94xx_init.c
|
||||
+++ b/drivers/scsi/aic94xx/aic94xx_init.c
|
||||
@@ -397,8 +397,6 @@ static ssize_t asd_store_update_bios(str
|
||||
@@ -390,8 +390,6 @@ static ssize_t asd_store_update_bios(str
|
||||
filename_ptr,
|
||||
&asd_ha->pcidev->dev);
|
||||
if (err) {
|
||||
|
@ -1944,7 +1930,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/scsi/ipr.c
|
||||
+++ b/drivers/scsi/ipr.c
|
||||
@@ -3993,10 +3993,8 @@ static ssize_t ipr_store_update_fw(struc
|
||||
@@ -3995,10 +3995,8 @@ static ssize_t ipr_store_update_fw(struc
|
||||
len = snprintf(fname, 99, "%s", buf);
|
||||
fname[len-1] = '\0';
|
||||
|
||||
|
@ -1971,7 +1957,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/scsi/qla1280.c
|
||||
+++ b/drivers/scsi/qla1280.c
|
||||
@@ -1553,8 +1553,6 @@ qla1280_request_firmware(struct scsi_qla
|
||||
@@ -1552,8 +1552,6 @@ qla1280_request_firmware(struct scsi_qla
|
||||
err = request_firmware(&fw, fwname, &ha->pdev->dev);
|
||||
|
||||
if (err) {
|
||||
|
@ -1982,7 +1968,7 @@ upstream submission.
|
|||
}
|
||||
--- a/drivers/scsi/qla2xxx/qla_init.c
|
||||
+++ b/drivers/scsi/qla2xxx/qla_init.c
|
||||
@@ -5365,8 +5365,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
|
||||
@@ -5363,8 +5363,6 @@ qla2x00_load_risc(scsi_qla_host_t *vha,
|
||||
/* Load firmware blob. */
|
||||
blob = qla2x00_request_firmware(vha);
|
||||
if (!blob) {
|
||||
|
@ -1991,7 +1977,7 @@ upstream submission.
|
|||
ql_log(ql_log_info, vha, 0x0084,
|
||||
"Firmware images can be retrieved from: "QLA_FW_URL ".\n");
|
||||
return QLA_FUNCTION_FAILED;
|
||||
@@ -5468,8 +5466,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
|
||||
@@ -5466,8 +5464,6 @@ qla24xx_load_risc_blob(scsi_qla_host_t *
|
||||
/* Load firmware blob. */
|
||||
blob = qla2x00_request_firmware(vha);
|
||||
if (!blob) {
|
||||
|
@ -2017,7 +2003,7 @@ upstream submission.
|
|||
if (qla82xx_validate_firmware_blob(vha,
|
||||
--- a/drivers/scsi/qla2xxx/qla_os.c
|
||||
+++ b/drivers/scsi/qla2xxx/qla_os.c
|
||||
@@ -5428,8 +5428,6 @@ qla2x00_request_firmware(scsi_qla_host_t
|
||||
@@ -5356,8 +5356,6 @@ qla2x00_request_firmware(scsi_qla_host_t
|
||||
goto out;
|
||||
|
||||
if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
|
||||
|
@ -2043,7 +2029,7 @@ upstream submission.
|
|||
fw->size, fwname);
|
||||
--- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
|
||||
+++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c
|
||||
@@ -2152,16 +2152,12 @@ struct net_device *init_ft1000_card(stru
|
||||
@@ -2131,16 +2131,12 @@ struct net_device *init_ft1000_card(stru
|
||||
info->AsicID = ft1000_read_reg(dev, FT1000_REG_ASIC_ID);
|
||||
if (info->AsicID == ELECTRABUZZ_ID) {
|
||||
pr_debug("ELECTRABUZZ ASIC\n");
|
||||
|
@ -2136,18 +2122,19 @@ upstream submission.
|
|||
if (0 != ret) {
|
||||
--- a/drivers/staging/media/lirc/lirc_zilog.c
|
||||
+++ b/drivers/staging/media/lirc/lirc_zilog.c
|
||||
@@ -759,8 +759,6 @@ static int fw_load(struct IR_tx *tx)
|
||||
@@ -762,9 +762,6 @@ static int fw_load(struct IR_tx *tx)
|
||||
/* Request codeset data file */
|
||||
ret = request_firmware(&fw_entry, "haup-ir-blaster.bin", tx->ir->l.dev);
|
||||
if (ret != 0) {
|
||||
- dev_err(tx->ir->l.dev, "firmware haup-ir-blaster.bin not available (%d)\n",
|
||||
- ret);
|
||||
- dev_err(tx->ir->l.dev,
|
||||
- "firmware haup-ir-blaster.bin not available (%d)\n",
|
||||
- ret);
|
||||
ret = ret < 0 ? ret : -EFAULT;
|
||||
goto out;
|
||||
}
|
||||
--- a/drivers/staging/rtl8192u/r819xU_firmware.c
|
||||
+++ b/drivers/staging/rtl8192u/r819xU_firmware.c
|
||||
@@ -241,10 +241,8 @@ bool init_firmware(struct net_device *de
|
||||
@@ -243,10 +243,8 @@ bool init_firmware(struct net_device *de
|
||||
*/
|
||||
if (rst_opt == OPT_SYSTEM_RESET) {
|
||||
rc = request_firmware(&fw_entry, fw_name[init_step],&priv->udev->dev);
|
||||
|
@ -2476,7 +2463,7 @@ upstream submission.
|
|||
release_firmware(fw_p);
|
||||
--- a/drivers/video/fbdev/broadsheetfb.c
|
||||
+++ b/drivers/video/fbdev/broadsheetfb.c
|
||||
@@ -741,10 +741,8 @@ static ssize_t broadsheet_loadstore_wave
|
||||
@@ -743,10 +743,8 @@ static ssize_t broadsheet_loadstore_wave
|
||||
return -EINVAL;
|
||||
|
||||
err = request_firmware(&fw_entry, "broadsheet.wbf", dev);
|
||||
|
@ -2538,7 +2525,7 @@ upstream submission.
|
|||
if (snd_msnd_upload_host(chip, init_fw->data, init_fw->size) < 0) {
|
||||
--- a/sound/isa/sscape.c
|
||||
+++ b/sound/isa/sscape.c
|
||||
@@ -543,10 +543,8 @@ static int sscape_upload_bootblock(struc
|
||||
@@ -544,10 +544,8 @@ static int sscape_upload_bootblock(struc
|
||||
int ret;
|
||||
|
||||
ret = request_firmware(&init_fw, "scope.cod", card->dev);
|
||||
|
@ -2550,7 +2537,7 @@ upstream submission.
|
|||
ret = upload_dma_data(sscape, init_fw->data, init_fw->size);
|
||||
|
||||
release_firmware(init_fw);
|
||||
@@ -583,11 +581,8 @@ static int sscape_upload_microcode(struc
|
||||
@@ -584,11 +582,8 @@ static int sscape_upload_microcode(struc
|
||||
snprintf(name, sizeof(name), "sndscape.co%d", version);
|
||||
|
||||
err = request_firmware(&init_fw, name, card->dev);
|
||||
|
@ -2579,7 +2566,7 @@ upstream submission.
|
|||
buf = firmware->data;
|
||||
--- a/sound/pci/asihpi/hpidspcd.c
|
||||
+++ b/sound/pci/asihpi/hpidspcd.c
|
||||
@@ -49,8 +49,6 @@ short hpi_dsp_code_open(u32 adapter, voi
|
||||
@@ -46,8 +46,6 @@ short hpi_dsp_code_open(u32 adapter, voi
|
||||
err = request_firmware(&firmware, fw_name, &dev->dev);
|
||||
|
||||
if (err || !firmware) {
|
||||
|
@ -2621,7 +2608,7 @@ upstream submission.
|
|||
filename, emu->firmware->size);
|
||||
--- a/sound/pci/hda/hda_intel.c
|
||||
+++ b/sound/pci/hda/hda_intel.c
|
||||
@@ -1662,10 +1662,8 @@ static void azx_firmware_cb(const struct
|
||||
@@ -1636,10 +1636,8 @@ static void azx_firmware_cb(const struct
|
||||
struct azx *chip = card->private_data;
|
||||
struct pci_dev *pci = chip->pci;
|
||||
|
||||
|
@ -2635,7 +2622,7 @@ upstream submission.
|
|||
if (!chip->disabled) {
|
||||
--- a/sound/pci/korg1212/korg1212.c
|
||||
+++ b/sound/pci/korg1212/korg1212.c
|
||||
@@ -2346,7 +2346,6 @@ static int snd_korg1212_create(struct sn
|
||||
@@ -2330,7 +2330,6 @@ static int snd_korg1212_create(struct sn
|
||||
err = request_firmware(&dsp_code, "korg/k1212.dsp", &pci->dev);
|
||||
if (err < 0) {
|
||||
release_firmware(dsp_code);
|
||||
|
@ -2645,7 +2632,7 @@ upstream submission.
|
|||
}
|
||||
--- a/sound/pci/mixart/mixart_hwdep.c
|
||||
+++ b/sound/pci/mixart/mixart_hwdep.c
|
||||
@@ -570,11 +570,8 @@ int snd_mixart_setup_firmware(struct mix
|
||||
@@ -571,11 +571,8 @@ int snd_mixart_setup_firmware(struct mix
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
sprintf(path, "mixart/%s", fw_files[i]);
|
||||
|
@ -2676,7 +2663,7 @@ upstream submission.
|
|||
release_firmware(fw_entry);
|
||||
--- a/sound/pci/riptide/riptide.c
|
||||
+++ b/sound/pci/riptide/riptide.c
|
||||
@@ -1245,11 +1245,8 @@ static int try_to_load_firmware(struct c
|
||||
@@ -1231,11 +1231,8 @@ static int try_to_load_firmware(struct c
|
||||
if (!chip->fw_entry) {
|
||||
err = request_firmware(&chip->fw_entry, "riptide.hex",
|
||||
&chip->pci->dev);
|
||||
|
@ -2691,7 +2678,7 @@ upstream submission.
|
|||
if (err) {
|
||||
--- a/sound/pci/rme9652/hdsp.c
|
||||
+++ b/sound/pci/rme9652/hdsp.c
|
||||
@@ -5167,11 +5167,8 @@ static int hdsp_request_fw_loader(struct
|
||||
@@ -5102,11 +5102,8 @@ static int hdsp_request_fw_loader(struct
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -2740,7 +2727,7 @@ upstream submission.
|
|||
}
|
||||
--- a/sound/pci/cs46xx/cs46xx_lib.c
|
||||
+++ b/sound/pci/cs46xx/cs46xx_lib.c
|
||||
@@ -3284,11 +3284,8 @@ int snd_cs46xx_start_dsp(struct snd_cs46
|
||||
@@ -3253,11 +3253,8 @@ int snd_cs46xx_start_dsp(struct snd_cs46
|
||||
#ifdef CONFIG_SND_CS46XX_NEW_DSP
|
||||
for (i = 0; i < CS46XX_DSP_MODULES; i++) {
|
||||
err = load_firmware(chip, &chip->modules[i], module_names[i]);
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
From: Shachar Raindel <raindel@mellanox.com>
|
||||
Date: Sun, 04 Jan 2015 18:30:32 +0200
|
||||
Subject: IB/core: Prevent integer overflow in ib_umem_get address arithmetic
|
||||
Origin: https://marc.info/?l=oss-security&m=142672196502144&w=2
|
||||
|
||||
Properly verify that the resulting page aligned end address is larger
|
||||
than both the start address and the length of the memory area
|
||||
requested.
|
||||
|
||||
Both the start and length arguments for ib_umem_get are controlled by
|
||||
the user. A misbehaving user can provide values which will cause an
|
||||
integer overflow when calculating the page aligned end address.
|
||||
|
||||
This overflow can cause also miscalculation of the number of pages
|
||||
mapped, and additional logic issues.
|
||||
|
||||
Signed-off-by: Shachar Raindel <raindel@mellanox.com>
|
||||
Signed-off-by: Jack Morgenstein <jackm@mellanox.com>
|
||||
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
|
||||
---
|
||||
|
||||
--- a/drivers/infiniband/core/umem.c
|
||||
+++ b/drivers/infiniband/core/umem.c
|
||||
@@ -94,6 +94,14 @@ struct ib_umem *ib_umem_get(struct ib_uc
|
||||
if (dmasync)
|
||||
dma_set_attr(DMA_ATTR_WRITE_BARRIER, &attrs);
|
||||
|
||||
+ /*
|
||||
+ * If the combination of the addr and size requested for this memory
|
||||
+ * region causes an integer overflow, return error.
|
||||
+ */
|
||||
+ if ((PAGE_ALIGN(addr + size) <= size) ||
|
||||
+ (PAGE_ALIGN(addr + size) <= addr))
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
if (!can_do_mlock())
|
||||
return ERR_PTR(-EPERM);
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
From: "D.S. Ljungmark" <ljungmark@modio.se>
|
||||
Date: Wed, 25 Mar 2015 09:28:15 +0100
|
||||
Subject: ipv6: Don't reduce hop limit for an interface
|
||||
Origin: https://git.kernel.org/linus/6fd99094de2b83d1d4c8457f2c83483b2828e75a
|
||||
|
||||
A local route may have a lower hop_limit set than global routes do.
|
||||
|
||||
RFC 3756, Section 4.2.7, "Parameter Spoofing"
|
||||
|
||||
> 1. The attacker includes a Current Hop Limit of one or another small
|
||||
> number which the attacker knows will cause legitimate packets to
|
||||
> be dropped before they reach their destination.
|
||||
|
||||
> As an example, one possible approach to mitigate this threat is to
|
||||
> ignore very small hop limits. The nodes could implement a
|
||||
> configurable minimum hop limit, and ignore attempts to set it below
|
||||
> said limit.
|
||||
|
||||
Signed-off-by: D.S. Ljungmark <ljungmark@modio.se>
|
||||
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
net/ipv6/ndisc.c | 9 ++++++++-
|
||||
1 file changed, 8 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/net/ipv6/ndisc.c
|
||||
+++ b/net/ipv6/ndisc.c
|
||||
@@ -1190,7 +1190,14 @@ static void ndisc_router_discovery(struc
|
||||
if (rt)
|
||||
rt6_set_expires(rt, jiffies + (HZ * lifetime));
|
||||
if (ra_msg->icmph.icmp6_hop_limit) {
|
||||
- in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit;
|
||||
+ /* Only set hop_limit on the interface if it is higher than
|
||||
+ * the current hop_limit.
|
||||
+ */
|
||||
+ if (in6_dev->cnf.hop_limit < ra_msg->icmph.icmp6_hop_limit) {
|
||||
+ in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit;
|
||||
+ } else {
|
||||
+ ND_PRINTK(2, warn, "RA: Got route advertisement with lower hop_limit than current\n");
|
||||
+ }
|
||||
if (rt)
|
||||
dst_metric_set(&rt->dst, RTAX_HOPLIMIT,
|
||||
ra_msg->icmph.icmp6_hop_limit);
|
|
@ -30,7 +30,7 @@ the kernel.
|
|||
|
||||
# cc-option-align
|
||||
# Prefix align with either -falign or -malign
|
||||
@@ -126,16 +126,17 @@ cc-option-align = $(subst -functions=0,,
|
||||
@@ -126,14 +126,15 @@ cc-option-align = $(subst -functions=0,,
|
||||
# cc-disable-warning
|
||||
# Usage: cflags-y += $(call cc-disable-warning,unused-but-set-variable)
|
||||
cc-disable-warning = $(call try-run,\
|
||||
|
@ -38,20 +38,18 @@ the kernel.
|
|||
+ $(CC) $(NOSTDINC_FLAGS) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
|
||||
|
||||
# cc-version
|
||||
# Usage gcc-ver := $(call cc-version)
|
||||
-cc-version = $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-version.sh $(CC))
|
||||
+cc-version = $(shell $(CONFIG_SHELL) \
|
||||
+ $(srctree)/scripts/gcc-version.sh $(CC) $(NOSTDINC_FLAGS))
|
||||
|
||||
# cc-fullversion
|
||||
# Usage gcc-ver := $(call cc-fullversion)
|
||||
cc-fullversion = $(shell $(CONFIG_SHELL) \
|
||||
- $(srctree)/scripts/gcc-version.sh -p $(CC))
|
||||
+ $(srctree)/scripts/gcc-version.sh -p $(CC) $(NOSTDINC_FLAGS))
|
||||
|
||||
# cc-ifversion
|
||||
# Usage: EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
|
||||
@@ -149,7 +150,7 @@ cc-ldoption = $(call try-run,\
|
||||
@@ -147,7 +148,7 @@ cc-ldoption = $(call try-run,\
|
||||
# ld-option
|
||||
# Usage: LDFLAGS += $(call ld-option, -X)
|
||||
ld-option = $(call try-run,\
|
||||
|
@ -62,7 +60,7 @@ the kernel.
|
|||
# Usage: KBUILD_ARFLAGS := $(call ar-option,D)
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -624,6 +624,8 @@ else
|
||||
@@ -621,6 +621,8 @@ else
|
||||
KBUILD_CFLAGS += -O2
|
||||
endif
|
||||
|
||||
|
@ -71,7 +69,7 @@ the kernel.
|
|||
# Tell gcc to never replace conditional load with a non-conditional one
|
||||
KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
|
||||
|
||||
@@ -750,7 +752,7 @@ KBUILD_CFLAGS += $(call cc-option, -fno-
|
||||
@@ -751,7 +753,7 @@ KBUILD_CFLAGS += $(call cc-option, -fno-
|
||||
endif
|
||||
|
||||
# arch Makefile may override CC so keep this after arch Makefile is included
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
Author: Michael Schmitz <schmitzmic@gmail.com>
|
||||
Description: Make SMC91X driver selectable for ATARI_ETHERNAT boards
|
||||
Origin: https://git.kernel.org/cgit/linux/kernel/git/geert/linux-m68k.git/commit/?id=edee09224891c259071238d5a8d2be5e3ca7f09c
|
||||
|
||||
[bwh: Forward-ported to 3.19]
|
||||
--- a/drivers/net/ethernet/smsc/Kconfig
|
||||
+++ b/drivers/net/ethernet/smsc/Kconfig
|
||||
@@ -6,7 +6,8 @@ config NET_VENDOR_SMSC
|
||||
bool "SMC (SMSC)/Western Digital devices"
|
||||
default y
|
||||
depends on ARM || ISA || MAC || ARM64 || MIPS || M32R || SUPERH || \
|
||||
- BLACKFIN || MN10300 || COLDFIRE || XTENSA || NIOS2 || PCI || PCMCIA
|
||||
+ BLACKFIN || MN10300 || COLDFIRE || XTENSA || NIOS2 || PCI || \
|
||||
+ PCMCIA || ATARI_ETHERNAT
|
||||
---help---
|
||||
If you have a network (Ethernet) card belonging to this class, say Y
|
||||
and read the Ethernet-HOWTO, available from
|
||||
@@ -39,7 +40,8 @@ config SMC91X
|
||||
select CRC32
|
||||
select MII
|
||||
depends on (ARM || M32R || SUPERH || MIPS || BLACKFIN || \
|
||||
- MN10300 || COLDFIRE || ARM64 || XTENSA || NIOS2) && (!OF || GPIOLIB)
|
||||
+ MN10300 || COLDFIRE || ARM64 || XTENSA || NIOS2 || \
|
||||
+ ATARI_ETHERNAT) && (!OF || GPIOLIB)
|
||||
---help---
|
||||
This is a driver for SMC's 91x series of Ethernet chipsets,
|
||||
including the SMC91C94 and the SMC91C111. Say Y if you want it
|
|
@ -1,35 +0,0 @@
|
|||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sat, 7 Feb 2015 09:53:53 +0100
|
||||
Subject: ACPI / video: Add disable_native_backlight quirk for Samsung 510R
|
||||
Origin: https://git.kernel.org/linus/e77a16355a29230b99bafe55834a8252e55308ec
|
||||
|
||||
Backlight control through the native intel interface does not work properly
|
||||
on the Samsung 510R, where as using the acpi_video interface does work, add
|
||||
a quirk for this.
|
||||
|
||||
Link: https://bugzilla.redhat.com/show_bug.cgi?id=1186097
|
||||
Cc: All applicable <stable@vger.kernel.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/video.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
--- a/drivers/acpi/video.c
|
||||
+++ b/drivers/acpi/video.c
|
||||
@@ -712,6 +712,15 @@ static struct dmi_system_id video_dmi_ta
|
||||
},
|
||||
},
|
||||
{
|
||||
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=1186097 */
|
||||
+ .callback = video_disable_native_backlight,
|
||||
+ .ident = "SAMSUNG 3570R/370R/470R/450R/510R/4450RV",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "3570R/370R/470R/450R/510R/4450RV"),
|
||||
+ },
|
||||
+ },
|
||||
+ {
|
||||
/* https://bugzilla.redhat.com/show_bug.cgi?id=1094948 */
|
||||
.callback = video_disable_native_backlight,
|
||||
.ident = "SAMSUNG 730U3E/740U3E",
|
|
@ -1,34 +0,0 @@
|
|||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Fri, 9 Jan 2015 16:22:57 +0100
|
||||
Subject: ACPI / video: Add disable_native_backlight quirk for Samsung
|
||||
730U3E/740U3E
|
||||
Origin: https://git.kernel.org/linus/3295d73002f4be341069a000aec4b8d7e5ea8d2c
|
||||
|
||||
The Samsung 730U3E/740U3E has integrated ATI Radeon graphics, and backlight
|
||||
control does not work properly when using the native interfaces.
|
||||
|
||||
Link: https://bugzilla.redhat.com/show_bug.cgi?id=1094948
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/video.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
--- a/drivers/acpi/video.c
|
||||
+++ b/drivers/acpi/video.c
|
||||
@@ -711,6 +711,15 @@ static struct dmi_system_id video_dmi_ta
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "370R4E/370R4V/370R5E/3570RE/370R5V"),
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=1094948 */
|
||||
+ .callback = video_disable_native_backlight,
|
||||
+ .ident = "SAMSUNG 730U3E/740U3E",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "730U3E/740U3E"),
|
||||
+ },
|
||||
+ },
|
||||
|
||||
{
|
||||
/* https://bugzilla.redhat.com/show_bug.cgi?id=1163574 */
|
|
@ -1,46 +0,0 @@
|
|||
From: Jens Reyer <jens.reyer@gmail.com>
|
||||
Date: Tue, 17 Feb 2015 19:07:29 +0100
|
||||
Subject: ACPI / video: Disable native backlight on Samsung Series 9 laptops
|
||||
Origin: https://git.kernel.org/linus/3120d03cf64d7f9fd71231827af2c1550aa4caa7
|
||||
|
||||
Add video_disable_native_backlight quirk for SAMSUNG 900X3C/900X3D/
|
||||
900X3E/900X4C/900X4D laptops.
|
||||
|
||||
The native intel backlight controls do not work correctly on SAMSUNG
|
||||
Series 9 (900X3C/900X3D/900X3E/900X4C/900X4D) laptops:
|
||||
One machine has an completely dimmed (= black) display after boot at the
|
||||
GDM login screen and brightness controls work only between 0 and 5%
|
||||
(= no effect).
|
||||
Another machine has the same brightness control issues if an external
|
||||
HDMI monitor is or gets connected, although the initial brightness is
|
||||
ok.
|
||||
After login to Gnome both machines always work fine.
|
||||
|
||||
Tested on both machines.
|
||||
|
||||
Link: https://bugs.freedesktop.org/show_bug.cgi?id=87286
|
||||
Link: https://bugs.debian.org/772440
|
||||
Signed-off-by: Jens Reyer <jens.reyer@gmail.com>
|
||||
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
|
||||
---
|
||||
drivers/acpi/video.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
--- a/drivers/acpi/video.c
|
||||
+++ b/drivers/acpi/video.c
|
||||
@@ -729,6 +729,15 @@ static struct dmi_system_id video_dmi_ta
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "730U3E/740U3E"),
|
||||
},
|
||||
},
|
||||
+ {
|
||||
+ /* https://bugs.freedesktop.org/show_bug.cgi?id=87286 */
|
||||
+ .callback = video_disable_native_backlight,
|
||||
+ .ident = "SAMSUNG 900X3C/900X3D/900X3E/900X4C/900X4D",
|
||||
+ .matches = {
|
||||
+ DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "900X3C/900X3D/900X3E/900X4C/900X4D"),
|
||||
+ },
|
||||
+ },
|
||||
|
||||
{
|
||||
/* https://bugzilla.redhat.com/show_bug.cgi?id=1163574 */
|
|
@ -1,52 +0,0 @@
|
|||
Subject: drm/i915: Quietly reject attempts to create non-pagealigned stolen
|
||||
objects
|
||||
From: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Date: Wed, 10 Dec 2014 08:17:11 +0000
|
||||
Origin: http://patchwork.freedesktop.org/patch/38659/
|
||||
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=86883
|
||||
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=763155
|
||||
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=764528
|
||||
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=768027
|
||||
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=771227
|
||||
|
||||
This added as a BUG_ON as it considered that no one would ever request
|
||||
an unaligned object. However, it turns out that some BIOSes will
|
||||
allocate a scanout that is offset from 0 and not aligned to a page
|
||||
boundary, and we were passing this through and hitting the BUG_ON during
|
||||
boot.
|
||||
|
||||
Quietly reject such a request to reserve the unaligned stolen object and
|
||||
let the boot continue, restoring previous behaviour (i.e. no BIOS
|
||||
framebuffer preservation).
|
||||
|
||||
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=86883
|
||||
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
|
||||
Cc: stable@vger.kernel.org
|
||||
Tested-By: PRC QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
|
||||
Tested-by: Johannes W <jargon <at> molb.org>
|
||||
---
|
||||
drivers/gpu/drm/i915/i915_gem_stolen.c | 10 ++++++----
|
||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
|
||||
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
|
||||
@@ -431,13 +431,15 @@ i915_gem_object_create_stolen_for_preall
|
||||
DRM_DEBUG_KMS("creating preallocated stolen object: stolen_offset=%x, gtt_offset=%x, size=%x\n",
|
||||
stolen_offset, gtt_offset, size);
|
||||
|
||||
- /* KISS and expect everything to be page-aligned */
|
||||
- BUG_ON(stolen_offset & 4095);
|
||||
- BUG_ON(size & 4095);
|
||||
-
|
||||
if (WARN_ON(size == 0))
|
||||
return NULL;
|
||||
|
||||
+ /* KISS and expect everything to be GTT page-aligned */
|
||||
+ if ((stolen_offset | size) & 4095) {
|
||||
+ DRM_DEBUG_KMS("request for unaligned stolen object, denied\n");
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
stolen = kzalloc(sizeof(*stolen), GFP_KERNEL);
|
||||
if (!stolen)
|
||||
return NULL;
|
|
@ -1,32 +0,0 @@
|
|||
From: Quentin Casasnovas <quentin.casasnovas@oracle.com>
|
||||
Date: Tue, 3 Feb 2015 13:00:22 +0100
|
||||
Subject: x86/microcode/intel: Guard against stack overflow in the loader
|
||||
Origin: https://git.kernel.org/linus/f84598bd7c851f8b0bf8cd0d7c3be0d73c432ff4
|
||||
|
||||
mc_saved_tmp is a static array allocated on the stack, we need to make
|
||||
sure mc_saved_count stays within its bounds, otherwise we're overflowing
|
||||
the stack in _save_mc(). A specially crafted microcode header could lead
|
||||
to a kernel crash or potentially kernel execution.
|
||||
|
||||
Signed-off-by: Quentin Casasnovas <quentin.casasnovas@oracle.com>
|
||||
Cc: "H. Peter Anvin" <hpa@zytor.com>
|
||||
Cc: Fenghua Yu <fenghua.yu@intel.com>
|
||||
Link: http://lkml.kernel.org/r/1422964824-22056-1-git-send-email-quentin.casasnovas@oracle.com
|
||||
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||||
---
|
||||
arch/x86/kernel/cpu/microcode/intel_early.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/cpu/microcode/intel_early.c b/arch/x86/kernel/cpu/microcode/intel_early.c
|
||||
index ec9df6f..5e109a3 100644
|
||||
--- a/arch/x86/kernel/cpu/microcode/intel_early.c
|
||||
+++ b/arch/x86/kernel/cpu/microcode/intel_early.c
|
||||
@@ -321,7 +321,7 @@ get_matching_model_microcode(int cpu, unsigned long start,
|
||||
unsigned int mc_saved_count = mc_saved_data->mc_saved_count;
|
||||
int i;
|
||||
|
||||
- while (leftover) {
|
||||
+ while (leftover && mc_saved_count < ARRAY_SIZE(mc_saved_tmp)) {
|
||||
mc_header = (struct microcode_header_intel *)ucode_ptr;
|
||||
|
||||
mc_size = get_totalsize(mc_header);
|
|
@ -16,19 +16,14 @@ maintenance. Therefore disable auto-loading.
|
|||
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
net/ieee802154/af_ieee802154.c | 2 +-
|
||||
net/ieee802154/socket.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/net/ieee802154/af_ieee802154.c b/net/ieee802154/af_ieee802154.c
|
||||
index cd949d5..8f49dd5 100644
|
||||
--- a/net/ieee802154/af_ieee802154.c
|
||||
+++ b/net/ieee802154/af_ieee802154.c
|
||||
@@ -363,4 +363,4 @@ module_init(af_ieee802154_init);
|
||||
--- a/net/ieee802154/socket.c
|
||||
+++ b/net/ieee802154/socket.c
|
||||
@@ -1122,4 +1122,4 @@ module_init(af_ieee802154_init);
|
||||
module_exit(af_ieee802154_remove);
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
-MODULE_ALIAS_NETPROTO(PF_IEEE802154);
|
||||
+/* MODULE_ALIAS_NETPROTO(PF_IEEE802154); */
|
||||
--
|
||||
1.7.2.3
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ Forwarded: not-needed
|
|||
|
||||
--- a/.gitignore
|
||||
+++ b/.gitignore
|
||||
@@ -47,17 +47,6 @@
|
||||
@@ -49,22 +49,11 @@ Module.symvers
|
||||
/Module.markers
|
||||
|
||||
#
|
||||
|
@ -14,6 +14,11 @@ Forwarded: not-needed
|
|||
-/debian/
|
||||
-
|
||||
-#
|
||||
# tar directory (make tar*-pkg)
|
||||
#
|
||||
/tar-install/
|
||||
|
||||
#
|
||||
-# git files that we don't want to ignore even it they are dot-files
|
||||
-#
|
||||
-!.gitignore
|
||||
|
|
|
@ -15,9 +15,9 @@ In file included from /tmp/buildd/linux-3.16.2/drivers/message/i2o/config-osm.c:
|
|||
((void __user *)sg[j].addr_bus, sg_list[j].virt,
|
||||
^
|
||||
|
||||
--- a/drivers/message/i2o/Kconfig
|
||||
+++ b/drivers/message/i2o/Kconfig
|
||||
@@ -37,6 +37,7 @@ config I2O_LCT_NOTIFY_ON_CHANGES
|
||||
--- a/drivers/staging/i2o/Kconfig
|
||||
+++ b/drivers/staging/i2o/Kconfig
|
||||
@@ -36,6 +36,7 @@ config I2O_LCT_NOTIFY_ON_CHANGES
|
||||
|
||||
config I2O_EXT_ADAPTEC
|
||||
bool "Enable Adaptec extensions"
|
||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
a single hierarchy
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -983,6 +983,14 @@ config MEMCG
|
||||
@@ -990,6 +990,14 @@ config MEMCG
|
||||
Provides a memory resource controller that manages both anonymous
|
||||
memory and page cache. (See Documentation/cgroups/memory.txt)
|
||||
|
||||
|
@ -49,7 +49,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
depends on MEMCG && SWAP
|
||||
--- a/kernel/cgroup.c
|
||||
+++ b/kernel/cgroup.c
|
||||
@@ -5366,7 +5366,7 @@ out_free:
|
||||
@@ -5370,7 +5370,7 @@ out_free:
|
||||
kfree(pathbuf);
|
||||
}
|
||||
|
||||
|
@ -58,7 +58,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
{
|
||||
struct cgroup_subsys *ss;
|
||||
char *token;
|
||||
@@ -5378,17 +5378,29 @@ static int __init cgroup_disable(char *s
|
||||
@@ -5382,17 +5382,29 @@ static int __init cgroup_disable(char *s
|
||||
|
||||
for_each_subsys(ss, i) {
|
||||
if (!strcmp(token, ss->name)) {
|
||||
|
@ -93,8 +93,8 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
printk("cgroup: using legacy files on the default hierarchy\n");
|
||||
--- a/mm/memcontrol.c
|
||||
+++ b/mm/memcontrol.c
|
||||
@@ -5387,6 +5387,9 @@ static void mem_cgroup_bind(struct cgrou
|
||||
}
|
||||
@@ -5379,6 +5379,9 @@ static struct cftype memory_files[] = {
|
||||
};
|
||||
|
||||
struct cgroup_subsys memory_cgrp_subsys = {
|
||||
+#ifdef CONFIG_MEMCG_DISABLED
|
||||
|
|
|
@ -1,49 +0,0 @@
|
|||
From: Steve McIntyre <steve@einval.com>
|
||||
Date: Fri, 9 Jan 2015 15:29:53 +0000
|
||||
Subject: efi: Expose underlying UEFI firmware platform size to userland
|
||||
Origin: https://git.kernel.org/cgit/linux/kernel/git/mfleming/efi.git//commit?id=2859dff97e54db4795b8b7d9606cb8efcec722ff
|
||||
|
||||
In some cases (e.g. Intel Bay Trail machines), the kernel will happily
|
||||
run in 64-bit even if the underlying UEFI firmware platform is
|
||||
32-bit. That's great, but it's difficult for userland utilities like
|
||||
grub-install to do the right thing in such a situation.
|
||||
|
||||
The kernel already knows about the size of the firmware via
|
||||
efi_enabled(EFI_64BIT). Add an extra sysfs interface
|
||||
/sys/firmware/efi/fw_platform_size to expose that information to
|
||||
userland for low-level utilities to use.
|
||||
|
||||
Signed-off-by: Steve McIntyre <steve@einval.com>
|
||||
Cc: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
|
||||
---
|
||||
drivers/firmware/efi/efi.c | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
--- a/drivers/firmware/efi/efi.c
|
||||
+++ b/drivers/firmware/efi/efi.c
|
||||
@@ -90,15 +90,24 @@ EFI_ATTR_SHOW(fw_vendor);
|
||||
EFI_ATTR_SHOW(runtime);
|
||||
EFI_ATTR_SHOW(config_table);
|
||||
|
||||
+static ssize_t fw_platform_size_show(struct kobject *kobj,
|
||||
+ struct kobj_attribute *attr, char *buf)
|
||||
+{
|
||||
+ return sprintf(buf, "%d\n", efi_enabled(EFI_64BIT) ? 64 : 32);
|
||||
+}
|
||||
+
|
||||
static struct kobj_attribute efi_attr_fw_vendor = __ATTR_RO(fw_vendor);
|
||||
static struct kobj_attribute efi_attr_runtime = __ATTR_RO(runtime);
|
||||
static struct kobj_attribute efi_attr_config_table = __ATTR_RO(config_table);
|
||||
+static struct kobj_attribute efi_attr_fw_platform_size =
|
||||
+ __ATTR_RO(fw_platform_size);
|
||||
|
||||
static struct attribute *efi_subsys_attrs[] = {
|
||||
&efi_attr_systab.attr,
|
||||
&efi_attr_fw_vendor.attr,
|
||||
&efi_attr_runtime.attr,
|
||||
&efi_attr_config_table.attr,
|
||||
+ &efi_attr_fw_platform_size.attr,
|
||||
NULL,
|
||||
};
|
||||
|
|
@ -1,119 +0,0 @@
|
|||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 13:32:10 -0800
|
||||
Subject: [5/6] Input: psmouse - disable changing resolution/rate/scale for
|
||||
FocalTech
|
||||
Origin: https://git.kernel.org/linus/4ec212f003d2430b0b2748b8a3008255f39cfe13
|
||||
|
||||
These PS/2 commands make some touchpads stop responding, so this commit
|
||||
adds some dummy functions to replace the generic implementation. Because
|
||||
scale changes were not encapsulated in a method of struct psmouse yet, this
|
||||
commit adds a method set_scale to psmouse.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/focaltech.c | 25 +++++++++++++++++++++++++
|
||||
drivers/input/mouse/psmouse-base.c | 14 +++++++++++++-
|
||||
drivers/input/mouse/psmouse.h | 6 ++++++
|
||||
3 files changed, 44 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -386,6 +386,23 @@ static int focaltech_read_size(struct ps
|
||||
|
||||
return 0;
|
||||
}
|
||||
+
|
||||
+void focaltech_set_resolution(struct psmouse *psmouse, unsigned int resolution)
|
||||
+{
|
||||
+ /* not supported yet */
|
||||
+}
|
||||
+
|
||||
+static void focaltech_set_rate(struct psmouse *psmouse, unsigned int rate)
|
||||
+{
|
||||
+ /* not supported yet */
|
||||
+}
|
||||
+
|
||||
+static void focaltech_set_scale(struct psmouse *psmouse,
|
||||
+ enum psmouse_scale scale)
|
||||
+{
|
||||
+ /* not supported yet */
|
||||
+}
|
||||
+
|
||||
int focaltech_init(struct psmouse *psmouse)
|
||||
{
|
||||
struct focaltech_data *priv;
|
||||
@@ -420,6 +437,14 @@ int focaltech_init(struct psmouse *psmou
|
||||
psmouse->cleanup = focaltech_reset;
|
||||
/* resync is not supported yet */
|
||||
psmouse->resync_time = 0;
|
||||
+ /*
|
||||
+ * rate/resolution/scale changes are not supported yet, and
|
||||
+ * the generic implementations of these functions seem to
|
||||
+ * confuse some touchpads
|
||||
+ */
|
||||
+ psmouse->set_resolution = focaltech_set_resolution;
|
||||
+ psmouse->set_rate = focaltech_set_rate;
|
||||
+ psmouse->set_scale = focaltech_set_scale;
|
||||
|
||||
return 0;
|
||||
|
||||
--- a/drivers/input/mouse/psmouse-base.c
|
||||
+++ b/drivers/input/mouse/psmouse-base.c
|
||||
@@ -454,6 +454,17 @@ static void psmouse_set_rate(struct psmo
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Here we set the mouse scaling.
|
||||
+ */
|
||||
+
|
||||
+static void psmouse_set_scale(struct psmouse *psmouse, enum psmouse_scale scale)
|
||||
+{
|
||||
+ ps2_command(&psmouse->ps2dev, NULL,
|
||||
+ scale == PSMOUSE_SCALE21 ? PSMOUSE_CMD_SETSCALE21 :
|
||||
+ PSMOUSE_CMD_SETSCALE11);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* psmouse_poll() - default poll handler. Everyone except for ALPS uses it.
|
||||
*/
|
||||
|
||||
@@ -687,6 +698,7 @@ static void psmouse_apply_defaults(struc
|
||||
|
||||
psmouse->set_rate = psmouse_set_rate;
|
||||
psmouse->set_resolution = psmouse_set_resolution;
|
||||
+ psmouse->set_scale = psmouse_set_scale;
|
||||
psmouse->poll = psmouse_poll;
|
||||
psmouse->protocol_handler = psmouse_process_byte;
|
||||
psmouse->pktsize = 3;
|
||||
@@ -1158,7 +1170,7 @@ static void psmouse_initialize(struct ps
|
||||
if (psmouse_max_proto != PSMOUSE_PS2) {
|
||||
psmouse->set_rate(psmouse, psmouse->rate);
|
||||
psmouse->set_resolution(psmouse, psmouse->resolution);
|
||||
- ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11);
|
||||
+ psmouse->set_scale(psmouse, PSMOUSE_SCALE11);
|
||||
}
|
||||
}
|
||||
|
||||
--- a/drivers/input/mouse/psmouse.h
|
||||
+++ b/drivers/input/mouse/psmouse.h
|
||||
@@ -36,6 +36,11 @@ typedef enum {
|
||||
PSMOUSE_FULL_PACKET
|
||||
} psmouse_ret_t;
|
||||
|
||||
+enum psmouse_scale {
|
||||
+ PSMOUSE_SCALE11,
|
||||
+ PSMOUSE_SCALE21
|
||||
+};
|
||||
+
|
||||
struct psmouse {
|
||||
void *private;
|
||||
struct input_dev *dev;
|
||||
@@ -67,6 +72,7 @@ struct psmouse {
|
||||
psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse);
|
||||
void (*set_rate)(struct psmouse *psmouse, unsigned int rate);
|
||||
void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution);
|
||||
+ void (*set_scale)(struct psmouse *psmouse, enum psmouse_scale scale);
|
||||
|
||||
int (*reconnect)(struct psmouse *psmouse);
|
||||
void (*disconnect)(struct psmouse *psmouse);
|
|
@ -1,38 +0,0 @@
|
|||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 13:38:52 -0800
|
||||
Subject: [6/6] Input: psmouse - disable "palm detection" in the focaltech
|
||||
driver
|
||||
Origin: https://git.kernel.org/linus/4eb8d6e7e5aa14572bc389e554aad9869188cdcd
|
||||
|
||||
Apparently, the threshold for large contact area seems to be rather low on
|
||||
some devices, causing the touchpad to frequently freeze during normal
|
||||
usage. Because we do now know how we are supposed to use the value in
|
||||
question, this commit just drops the related code completely.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/focaltech.c | 10 ----------
|
||||
1 file changed, 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
|
||||
index 891a271..23d2594 100644
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -185,16 +185,6 @@ static void focaltech_process_abs_packet(struct psmouse *psmouse,
|
||||
|
||||
state->pressed = (packet[0] >> 4) & 1;
|
||||
|
||||
- /*
|
||||
- * packet[5] contains some kind of tool size in the most
|
||||
- * significant nibble. 0xff is a special value (latching) that
|
||||
- * signals a large contact area.
|
||||
- */
|
||||
- if (packet[5] == 0xff) {
|
||||
- state->fingers[finger].valid = false;
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
state->fingers[finger].x = ((packet[1] & 0xf) << 8) | packet[2];
|
||||
state->fingers[finger].y = (packet[3] << 8) | packet[4];
|
||||
state->fingers[finger].valid = true;
|
|
@ -1,41 +0,0 @@
|
|||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 13:27:08 -0800
|
||||
Subject: [4/6] Input: psmouse - ensure that focaltech reports consistent
|
||||
coordinates
|
||||
Origin: https://git.kernel.org/linus/679d83ea9390636ded518f533af0cefbade317c7
|
||||
|
||||
We don't know whether x_max or y_max really hold the maximum possible
|
||||
coordinates, and we don't know for sure whether we correctly interpret the
|
||||
coordinates sent by the touchpad, so we clamp the reported values to
|
||||
prevent confusion in userspace code.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/focaltech.c | 12 ++++++++++--
|
||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
|
||||
index e8fafe8..c66e0e0 100644
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -126,9 +126,17 @@ static void focaltech_report_state(struct psmouse *psmouse)
|
||||
input_mt_slot(dev, i);
|
||||
input_mt_report_slot_state(dev, MT_TOOL_FINGER, active);
|
||||
if (active) {
|
||||
- input_report_abs(dev, ABS_MT_POSITION_X, finger->x);
|
||||
+ unsigned int clamped_x, clamped_y;
|
||||
+ /*
|
||||
+ * The touchpad might report invalid data, so we clamp
|
||||
+ * the resulting values so that we do not confuse
|
||||
+ * userspace.
|
||||
+ */
|
||||
+ clamped_x = clamp(finger->x, 0U, priv->x_max);
|
||||
+ clamped_y = clamp(finger->y, 0U, priv->y_max);
|
||||
+ input_report_abs(dev, ABS_MT_POSITION_X, clamped_x);
|
||||
input_report_abs(dev, ABS_MT_POSITION_Y,
|
||||
- priv->y_max - finger->y);
|
||||
+ priv->y_max - clamped_y);
|
||||
}
|
||||
}
|
||||
input_mt_report_pointer_emulation(dev, true);
|
|
@ -1,38 +0,0 @@
|
|||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 13:26:31 -0800
|
||||
Subject: [3/6] Input: psmouse - remove hardcoded touchpad size from the
|
||||
focaltech driver
|
||||
Origin: https://git.kernel.org/linus/3e9845251926723319fb60c9e546fe42d3d11687
|
||||
|
||||
The size has in most cases already been fetched from the touchpad, the
|
||||
hardcoded values should have been removed.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/focaltech.c | 5 +----
|
||||
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
|
||||
index 757f78a..e8fafe8 100644
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -67,9 +67,6 @@ static void focaltech_reset(struct psmouse *psmouse)
|
||||
|
||||
#define FOC_MAX_FINGERS 5
|
||||
|
||||
-#define FOC_MAX_X 2431
|
||||
-#define FOC_MAX_Y 1663
|
||||
-
|
||||
/*
|
||||
* Current state of a single finger on the touchpad.
|
||||
*/
|
||||
@@ -131,7 +128,7 @@ static void focaltech_report_state(struct psmouse *psmouse)
|
||||
if (active) {
|
||||
input_report_abs(dev, ABS_MT_POSITION_X, finger->x);
|
||||
input_report_abs(dev, ABS_MT_POSITION_Y,
|
||||
- FOC_MAX_Y - finger->y);
|
||||
+ priv->y_max - finger->y);
|
||||
}
|
||||
}
|
||||
input_mt_report_pointer_emulation(dev, true);
|
|
@ -1,572 +0,0 @@
|
|||
From: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Date: Mon, 29 Dec 2014 09:26:35 -0800
|
||||
Subject: [2/6] Input: psmouse - support for the FocalTech PS/2 protocol
|
||||
extensions
|
||||
Origin: https://git.kernel.org/linus/05be1d079ec0b3691783e4384b1ada82149ff7d2
|
||||
|
||||
Most of the protocol for these touchpads has been reverse engineered. This
|
||||
commit adds a basic multitouch-capable driver.
|
||||
|
||||
A lot of the protocol is still unknown. Especially, we don't know how to
|
||||
identify the device yet apart from the PNP ID.
|
||||
|
||||
The previous workaround for these devices has been left in place in case
|
||||
the driver is not compiled into the kernel or in case some other device
|
||||
with the same PNP ID is not recognized by the driver yet still has the same
|
||||
problems with the device probing code.
|
||||
|
||||
Signed-off-by: Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
---
|
||||
drivers/input/mouse/Kconfig | 10 +
|
||||
drivers/input/mouse/focaltech.c | 408 ++++++++++++++++++++++++++++++++++++-
|
||||
drivers/input/mouse/focaltech.h | 2 +
|
||||
drivers/input/mouse/psmouse-base.c | 32 ++-
|
||||
drivers/input/mouse/psmouse.h | 1 +
|
||||
5 files changed, 436 insertions(+), 17 deletions(-)
|
||||
|
||||
--- a/drivers/input/mouse/Kconfig
|
||||
+++ b/drivers/input/mouse/Kconfig
|
||||
@@ -146,6 +146,16 @@ config MOUSE_PS2_OLPC
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
+config MOUSE_PS2_FOCALTECH
|
||||
+ bool "FocalTech PS/2 mouse protocol extension" if EXPERT
|
||||
+ default y
|
||||
+ depends on MOUSE_PS2
|
||||
+ help
|
||||
+ Say Y here if you have a FocalTech PS/2 TouchPad connected to
|
||||
+ your system.
|
||||
+
|
||||
+ If unsure, say Y.
|
||||
+
|
||||
config MOUSE_SERIAL
|
||||
tristate "Serial mouse"
|
||||
select SERIO
|
||||
--- a/drivers/input/mouse/focaltech.c
|
||||
+++ b/drivers/input/mouse/focaltech.c
|
||||
@@ -2,6 +2,7 @@
|
||||
* Focaltech TouchPad PS/2 mouse driver
|
||||
*
|
||||
* Copyright (c) 2014 Red Hat Inc.
|
||||
+ * Copyright (c) 2014 Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
*
|
||||
* 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
|
||||
@@ -13,15 +14,14 @@
|
||||
* Hans de Goede <hdegoede@redhat.com>
|
||||
*/
|
||||
|
||||
-/*
|
||||
- * The Focaltech PS/2 touchpad protocol is unknown. This drivers deals with
|
||||
- * detection only, to avoid further detection attempts confusing the touchpad
|
||||
- * this way it at least works in PS/2 mouse compatibility mode.
|
||||
- */
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/libps2.h>
|
||||
+#include <linux/input/mt.h>
|
||||
+#include <linux/serio.h>
|
||||
+#include <linux/slab.h>
|
||||
#include "psmouse.h"
|
||||
+#include "focaltech.h"
|
||||
|
||||
static const char * const focaltech_pnp_ids[] = {
|
||||
"FLT0101",
|
||||
@@ -30,6 +30,12 @@ static const char * const focaltech_pnp_
|
||||
NULL
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * Even if the kernel is built without support for Focaltech PS/2 touchpads (or
|
||||
+ * when the real driver fails to recognize the device), we still have to detect
|
||||
+ * them in order to avoid further detection attempts confusing the touchpad.
|
||||
+ * This way it at least works in PS/2 mouse compatibility mode.
|
||||
+ */
|
||||
int focaltech_detect(struct psmouse *psmouse, bool set_properties)
|
||||
{
|
||||
if (!psmouse_matches_pnp_id(psmouse, focaltech_pnp_ids))
|
||||
@@ -37,16 +43,404 @@ int focaltech_detect(struct psmouse *psm
|
||||
|
||||
if (set_properties) {
|
||||
psmouse->vendor = "FocalTech";
|
||||
- psmouse->name = "FocalTech Touchpad in mouse emulation mode";
|
||||
+ psmouse->name = "FocalTech Touchpad";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
-int focaltech_init(struct psmouse *psmouse)
|
||||
+static void focaltech_reset(struct psmouse *psmouse)
|
||||
{
|
||||
ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_RESET_DIS);
|
||||
psmouse_reset(psmouse);
|
||||
+}
|
||||
+
|
||||
+#ifdef CONFIG_MOUSE_PS2_FOCALTECH
|
||||
+
|
||||
+/*
|
||||
+ * Packet types - the numbers are not consecutive, so we might be missing
|
||||
+ * something here.
|
||||
+ */
|
||||
+#define FOC_TOUCH 0x3 /* bitmap of active fingers */
|
||||
+#define FOC_ABS 0x6 /* absolute position of one finger */
|
||||
+#define FOC_REL 0x9 /* relative position of 1-2 fingers */
|
||||
+
|
||||
+#define FOC_MAX_FINGERS 5
|
||||
+
|
||||
+#define FOC_MAX_X 2431
|
||||
+#define FOC_MAX_Y 1663
|
||||
+
|
||||
+/*
|
||||
+ * Current state of a single finger on the touchpad.
|
||||
+ */
|
||||
+struct focaltech_finger_state {
|
||||
+ /* The touchpad has generated a touch event for the finger */
|
||||
+ bool active;
|
||||
+
|
||||
+ /*
|
||||
+ * The touchpad has sent position data for the finger. The
|
||||
+ * flag is 0 when the finger is not active, and there is a
|
||||
+ * time between the first touch event for the finger and the
|
||||
+ * following absolute position packet for the finger where the
|
||||
+ * touchpad has declared the finger to be valid, but we do not
|
||||
+ * have any valid position yet.
|
||||
+ */
|
||||
+ bool valid;
|
||||
+
|
||||
+ /*
|
||||
+ * Absolute position (from the bottom left corner) of the
|
||||
+ * finger.
|
||||
+ */
|
||||
+ unsigned int x;
|
||||
+ unsigned int y;
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Description of the current state of the touchpad hardware.
|
||||
+ */
|
||||
+struct focaltech_hw_state {
|
||||
+ /*
|
||||
+ * The touchpad tracks the positions of the fingers for us,
|
||||
+ * the array indices correspond to the finger indices returned
|
||||
+ * in the report packages.
|
||||
+ */
|
||||
+ struct focaltech_finger_state fingers[FOC_MAX_FINGERS];
|
||||
+
|
||||
+ /* True if the clickpad has been pressed. */
|
||||
+ bool pressed;
|
||||
+};
|
||||
+
|
||||
+struct focaltech_data {
|
||||
+ unsigned int x_max, y_max;
|
||||
+ struct focaltech_hw_state state;
|
||||
+};
|
||||
+
|
||||
+static void focaltech_report_state(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ struct focaltech_hw_state *state = &priv->state;
|
||||
+ struct input_dev *dev = psmouse->dev;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < FOC_MAX_FINGERS; i++) {
|
||||
+ struct focaltech_finger_state *finger = &state->fingers[i];
|
||||
+ bool active = finger->active && finger->valid;
|
||||
+
|
||||
+ input_mt_slot(dev, i);
|
||||
+ input_mt_report_slot_state(dev, MT_TOOL_FINGER, active);
|
||||
+ if (active) {
|
||||
+ input_report_abs(dev, ABS_MT_POSITION_X, finger->x);
|
||||
+ input_report_abs(dev, ABS_MT_POSITION_Y,
|
||||
+ FOC_MAX_Y - finger->y);
|
||||
+ }
|
||||
+ }
|
||||
+ input_mt_report_pointer_emulation(dev, true);
|
||||
+
|
||||
+ input_report_key(psmouse->dev, BTN_LEFT, state->pressed);
|
||||
+ input_sync(psmouse->dev);
|
||||
+}
|
||||
+
|
||||
+static void focaltech_process_touch_packet(struct psmouse *psmouse,
|
||||
+ unsigned char *packet)
|
||||
+{
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ struct focaltech_hw_state *state = &priv->state;
|
||||
+ unsigned char fingers = packet[1];
|
||||
+ int i;
|
||||
+
|
||||
+ state->pressed = (packet[0] >> 4) & 1;
|
||||
+
|
||||
+ /* the second byte contains a bitmap of all fingers touching the pad */
|
||||
+ for (i = 0; i < FOC_MAX_FINGERS; i++) {
|
||||
+ state->fingers[i].active = fingers & 0x1;
|
||||
+ if (!state->fingers[i].active) {
|
||||
+ /*
|
||||
+ * Even when the finger becomes active again, we still
|
||||
+ * will have to wait for the first valid position.
|
||||
+ */
|
||||
+ state->fingers[i].valid = false;
|
||||
+ }
|
||||
+ fingers >>= 1;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void focaltech_process_abs_packet(struct psmouse *psmouse,
|
||||
+ unsigned char *packet)
|
||||
+{
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ struct focaltech_hw_state *state = &priv->state;
|
||||
+ unsigned int finger;
|
||||
+
|
||||
+ finger = (packet[1] >> 4) - 1;
|
||||
+ if (finger >= FOC_MAX_FINGERS) {
|
||||
+ psmouse_err(psmouse, "Invalid finger in abs packet: %d\n",
|
||||
+ finger);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ state->pressed = (packet[0] >> 4) & 1;
|
||||
+
|
||||
+ /*
|
||||
+ * packet[5] contains some kind of tool size in the most
|
||||
+ * significant nibble. 0xff is a special value (latching) that
|
||||
+ * signals a large contact area.
|
||||
+ */
|
||||
+ if (packet[5] == 0xff) {
|
||||
+ state->fingers[finger].valid = false;
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ state->fingers[finger].x = ((packet[1] & 0xf) << 8) | packet[2];
|
||||
+ state->fingers[finger].y = (packet[3] << 8) | packet[4];
|
||||
+ state->fingers[finger].valid = true;
|
||||
+}
|
||||
+
|
||||
+static void focaltech_process_rel_packet(struct psmouse *psmouse,
|
||||
+ unsigned char *packet)
|
||||
+{
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ struct focaltech_hw_state *state = &priv->state;
|
||||
+ int finger1, finger2;
|
||||
+
|
||||
+ state->pressed = packet[0] >> 7;
|
||||
+ finger1 = ((packet[0] >> 4) & 0x7) - 1;
|
||||
+ if (finger1 < FOC_MAX_FINGERS) {
|
||||
+ state->fingers[finger1].x += (char)packet[1];
|
||||
+ state->fingers[finger1].y += (char)packet[2];
|
||||
+ } else {
|
||||
+ psmouse_err(psmouse, "First finger in rel packet invalid: %d\n",
|
||||
+ finger1);
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * If there is an odd number of fingers, the last relative
|
||||
+ * packet only contains one finger. In this case, the second
|
||||
+ * finger index in the packet is 0 (we subtract 1 in the lines
|
||||
+ * above to create array indices, so the finger will overflow
|
||||
+ * and be above FOC_MAX_FINGERS).
|
||||
+ */
|
||||
+ finger2 = ((packet[3] >> 4) & 0x7) - 1;
|
||||
+ if (finger2 < FOC_MAX_FINGERS) {
|
||||
+ state->fingers[finger2].x += (char)packet[4];
|
||||
+ state->fingers[finger2].y += (char)packet[5];
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void focaltech_process_packet(struct psmouse *psmouse)
|
||||
+{
|
||||
+ unsigned char *packet = psmouse->packet;
|
||||
+
|
||||
+ switch (packet[0] & 0xf) {
|
||||
+ case FOC_TOUCH:
|
||||
+ focaltech_process_touch_packet(psmouse, packet);
|
||||
+ break;
|
||||
+
|
||||
+ case FOC_ABS:
|
||||
+ focaltech_process_abs_packet(psmouse, packet);
|
||||
+ break;
|
||||
+
|
||||
+ case FOC_REL:
|
||||
+ focaltech_process_rel_packet(psmouse, packet);
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ psmouse_err(psmouse, "Unknown packet type: %02x\n", packet[0]);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ focaltech_report_state(psmouse);
|
||||
+}
|
||||
+
|
||||
+static psmouse_ret_t focaltech_process_byte(struct psmouse *psmouse)
|
||||
+{
|
||||
+ if (psmouse->pktcnt >= 6) { /* Full packet received */
|
||||
+ focaltech_process_packet(psmouse);
|
||||
+ return PSMOUSE_FULL_PACKET;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * We might want to do some validation of the data here, but
|
||||
+ * we do not know the protocol well enough
|
||||
+ */
|
||||
+ return PSMOUSE_GOOD_DATA;
|
||||
+}
|
||||
+
|
||||
+static int focaltech_switch_protocol(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct ps2dev *ps2dev = &psmouse->ps2dev;
|
||||
+ unsigned char param[3];
|
||||
+
|
||||
+ param[0] = 0;
|
||||
+ if (ps2_command(ps2dev, param, 0x10f8))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, 0x10f8))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, 0x10f8))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ param[0] = 1;
|
||||
+ if (ps2_command(ps2dev, param, 0x10f8))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETSCALE11))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_ENABLE))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void focaltech_disconnect(struct psmouse *psmouse)
|
||||
+{
|
||||
+ focaltech_reset(psmouse);
|
||||
+ kfree(psmouse->private);
|
||||
+ psmouse->private = NULL;
|
||||
+}
|
||||
+
|
||||
+static int focaltech_reconnect(struct psmouse *psmouse)
|
||||
+{
|
||||
+ int error;
|
||||
+
|
||||
+ focaltech_reset(psmouse);
|
||||
+
|
||||
+ error = focaltech_switch_protocol(psmouse);
|
||||
+ if (error) {
|
||||
+ psmouse_err(psmouse, "Unable to initialize the device\n");
|
||||
+ return error;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void focaltech_set_input_params(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct input_dev *dev = psmouse->dev;
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+
|
||||
+ /*
|
||||
+ * Undo part of setup done for us by psmouse core since touchpad
|
||||
+ * is not a relative device.
|
||||
+ */
|
||||
+ __clear_bit(EV_REL, dev->evbit);
|
||||
+ __clear_bit(REL_X, dev->relbit);
|
||||
+ __clear_bit(REL_Y, dev->relbit);
|
||||
+ __clear_bit(BTN_RIGHT, dev->keybit);
|
||||
+ __clear_bit(BTN_MIDDLE, dev->keybit);
|
||||
+
|
||||
+ /*
|
||||
+ * Now set up our capabilities.
|
||||
+ */
|
||||
+ __set_bit(EV_ABS, dev->evbit);
|
||||
+ input_set_abs_params(dev, ABS_MT_POSITION_X, 0, priv->x_max, 0, 0);
|
||||
+ input_set_abs_params(dev, ABS_MT_POSITION_Y, 0, priv->y_max, 0, 0);
|
||||
+ input_mt_init_slots(dev, 5, INPUT_MT_POINTER);
|
||||
+ __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit);
|
||||
+}
|
||||
+
|
||||
+static int focaltech_read_register(struct ps2dev *ps2dev, int reg,
|
||||
+ unsigned char *param)
|
||||
+{
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETSCALE11))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ param[0] = 0;
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ param[0] = reg;
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_SETRES))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int focaltech_read_size(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct ps2dev *ps2dev = &psmouse->ps2dev;
|
||||
+ struct focaltech_data *priv = psmouse->private;
|
||||
+ char param[3];
|
||||
+
|
||||
+ if (focaltech_read_register(ps2dev, 2, param))
|
||||
+ return -EIO;
|
||||
+
|
||||
+ /* not sure whether this is 100% correct */
|
||||
+ priv->x_max = (unsigned char)param[1] * 128;
|
||||
+ priv->y_max = (unsigned char)param[2] * 128;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+int focaltech_init(struct psmouse *psmouse)
|
||||
+{
|
||||
+ struct focaltech_data *priv;
|
||||
+ int error;
|
||||
+
|
||||
+ psmouse->private = priv = kzalloc(sizeof(struct focaltech_data),
|
||||
+ GFP_KERNEL);
|
||||
+ if (!priv)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ focaltech_reset(psmouse);
|
||||
+
|
||||
+ error = focaltech_read_size(psmouse);
|
||||
+ if (error) {
|
||||
+ psmouse_err(psmouse,
|
||||
+ "Unable to read the size of the touchpad\n");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ error = focaltech_switch_protocol(psmouse);
|
||||
+ if (error) {
|
||||
+ psmouse_err(psmouse, "Unable to initialize the device\n");
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ focaltech_set_input_params(psmouse);
|
||||
+
|
||||
+ psmouse->protocol_handler = focaltech_process_byte;
|
||||
+ psmouse->pktsize = 6;
|
||||
+ psmouse->disconnect = focaltech_disconnect;
|
||||
+ psmouse->reconnect = focaltech_reconnect;
|
||||
+ psmouse->cleanup = focaltech_reset;
|
||||
+ /* resync is not supported yet */
|
||||
+ psmouse->resync_time = 0;
|
||||
|
||||
return 0;
|
||||
+
|
||||
+fail:
|
||||
+ focaltech_reset(psmouse);
|
||||
+ kfree(priv);
|
||||
+ return error;
|
||||
}
|
||||
+
|
||||
+bool focaltech_supported(void)
|
||||
+{
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
+#else /* CONFIG_MOUSE_PS2_FOCALTECH */
|
||||
+
|
||||
+int focaltech_init(struct psmouse *psmouse)
|
||||
+{
|
||||
+ focaltech_reset(psmouse);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+bool focaltech_supported(void)
|
||||
+{
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+#endif /* CONFIG_MOUSE_PS2_FOCALTECH */
|
||||
--- a/drivers/input/mouse/focaltech.h
|
||||
+++ b/drivers/input/mouse/focaltech.h
|
||||
@@ -2,6 +2,7 @@
|
||||
* Focaltech TouchPad PS/2 mouse driver
|
||||
*
|
||||
* Copyright (c) 2014 Red Hat Inc.
|
||||
+ * Copyright (c) 2014 Mathias Gottschlag <mgottschlag@gmail.com>
|
||||
*
|
||||
* 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
|
||||
@@ -18,5 +19,6 @@
|
||||
|
||||
int focaltech_detect(struct psmouse *psmouse, bool set_properties);
|
||||
int focaltech_init(struct psmouse *psmouse);
|
||||
+bool focaltech_supported(void);
|
||||
|
||||
#endif
|
||||
--- a/drivers/input/mouse/psmouse-base.c
|
||||
+++ b/drivers/input/mouse/psmouse-base.c
|
||||
@@ -723,16 +723,19 @@ static int psmouse_extensions(struct psm
|
||||
|
||||
/* Always check for focaltech, this is safe as it uses pnp-id matching */
|
||||
if (psmouse_do_detect(focaltech_detect, psmouse, set_properties) == 0) {
|
||||
- if (!set_properties || focaltech_init(psmouse) == 0) {
|
||||
- /*
|
||||
- * Not supported yet, use bare protocol.
|
||||
- * Note that we need to also restrict
|
||||
- * psmouse_max_proto so that psmouse_initialize()
|
||||
- * does not try to reset rate and resolution,
|
||||
- * because even that upsets the device.
|
||||
- */
|
||||
- psmouse_max_proto = PSMOUSE_PS2;
|
||||
- return PSMOUSE_PS2;
|
||||
+ if (max_proto > PSMOUSE_IMEX) {
|
||||
+ if (!set_properties || focaltech_init(psmouse) == 0) {
|
||||
+ if (focaltech_supported())
|
||||
+ return PSMOUSE_FOCALTECH;
|
||||
+ /*
|
||||
+ * Note that we need to also restrict
|
||||
+ * psmouse_max_proto so that psmouse_initialize()
|
||||
+ * does not try to reset rate and resolution,
|
||||
+ * because even that upsets the device.
|
||||
+ */
|
||||
+ psmouse_max_proto = PSMOUSE_PS2;
|
||||
+ return PSMOUSE_PS2;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1061,6 +1064,15 @@ static const struct psmouse_protocol psm
|
||||
.alias = "cortps",
|
||||
.detect = cortron_detect,
|
||||
},
|
||||
+#ifdef CONFIG_MOUSE_PS2_FOCALTECH
|
||||
+ {
|
||||
+ .type = PSMOUSE_FOCALTECH,
|
||||
+ .name = "FocalTechPS/2",
|
||||
+ .alias = "focaltech",
|
||||
+ .detect = focaltech_detect,
|
||||
+ .init = focaltech_init,
|
||||
+ },
|
||||
+#endif
|
||||
{
|
||||
.type = PSMOUSE_AUTO,
|
||||
.name = "auto",
|
||||
--- a/drivers/input/mouse/psmouse.h
|
||||
+++ b/drivers/input/mouse/psmouse.h
|
||||
@@ -96,6 +96,7 @@ enum psmouse_type {
|
||||
PSMOUSE_FSP,
|
||||
PSMOUSE_SYNAPTICS_RELATIVE,
|
||||
PSMOUSE_CYPRESS,
|
||||
+ PSMOUSE_FOCALTECH,
|
||||
PSMOUSE_AUTO /* This one should always be last */
|
||||
};
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
From 84d678e330f80376456c764fe1f9c27d9b79610c Mon Sep 17 00:00:00 2001
|
||||
From: Chen-Yu Tsai <wens@csie.org>
|
||||
Date: Mon, 12 Jan 2015 12:34:09 +0800
|
||||
Subject: [PATCH 6/7] ARM: dts: sun4i: cubieboard: add axp209 regulator nodes
|
||||
Origin: https://git.kernel.org/linus/ce124f7a18c5ebc9dc93aaec15aaef779c8708ae
|
||||
|
||||
This patch adds the regulator nodes for the axp209 by including
|
||||
the axp209 dtsi. As the inputs of these regulators are from the
|
||||
axp209's PS output, which is basically just a mux over the 2
|
||||
inputs, it is considered to be unregulated. Thus we do not provide
|
||||
input supply properties for them.
|
||||
|
||||
The regulator names and constraints are based on the board
|
||||
schematics and the SoC datasheet.
|
||||
|
||||
DCDC2 is used as the cpu power supply. This patch also references
|
||||
it from the cpu node.
|
||||
|
||||
Also get rid of axp209 properties already set in axp209.dtsi.
|
||||
|
||||
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
|
||||
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
---
|
||||
arch/arm/boot/dts/sun4i-a10-cubieboard.dts | 35 ++++++++++++++++++++++++++----
|
||||
1 file changed, 31 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
|
||||
index 539b693..5543b76 100644
|
||||
--- a/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
|
||||
+++ b/arch/arm/boot/dts/sun4i-a10-cubieboard.dts
|
||||
@@ -92,12 +92,8 @@
|
||||
status = "okay";
|
||||
|
||||
axp209: pmic@34 {
|
||||
- compatible = "x-powers,axp209";
|
||||
reg = <0x34>;
|
||||
interrupts = <0>;
|
||||
-
|
||||
- interrupt-controller;
|
||||
- #interrupt-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -137,3 +133,34 @@
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
+
|
||||
+#include "axp209.dtsi"
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <®_dcdc2>;
|
||||
+};
|
||||
+
|
||||
+®_dcdc2 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1000000>;
|
||||
+ regulator-max-microvolt = <1450000>;
|
||||
+ regulator-name = "vdd-cpu";
|
||||
+};
|
||||
+
|
||||
+®_dcdc3 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1000000>;
|
||||
+ regulator-max-microvolt = <1400000>;
|
||||
+ regulator-name = "vdd-int-dll";
|
||||
+};
|
||||
+
|
||||
+®_ldo1 {
|
||||
+ regulator-name = "vdd-rtc";
|
||||
+};
|
||||
+
|
||||
+®_ldo2 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <3000000>;
|
||||
+ regulator-max-microvolt = <3000000>;
|
||||
+ regulator-name = "avcc";
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
From 3e4ab009b2f03bf5153320a52c0c18e0f631a7fa Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sun, 25 Jan 2015 15:36:08 +0100
|
||||
Subject: [PATCH 7/7] ARM: dts: sun5i: Enable axp209 support on A13-OLinuxIno
|
||||
Origin: https://git.kernel.org/linus/c121f45e6291e00c71b919ce4a439e0b6e829668
|
||||
|
||||
The (non micro) A13-OLinuxIno has an axp203 pmic, enable support for this.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
---
|
||||
arch/arm/boot/dts/sun5i-a13-olinuxino.dts | 9 +++++++++
|
||||
1 file changed, 9 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
|
||||
index 429994e..59261aa 100644
|
||||
--- a/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
|
||||
+++ b/arch/arm/boot/dts/sun5i-a13-olinuxino.dts
|
||||
@@ -76,6 +76,15 @@
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2c0_pins_a>;
|
||||
status = "okay";
|
||||
+
|
||||
+ axp209: pmic@34 {
|
||||
+ compatible = "x-powers,axp209";
|
||||
+ reg = <0x34>;
|
||||
+ interrupts = <0>;
|
||||
+
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <1>;
|
||||
+ };
|
||||
};
|
||||
|
||||
i2c1: i2c@01c2b000 {
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
From 078a04de9f3a4ad1021ec647040b87381c9e5776 Mon Sep 17 00:00:00 2001
|
||||
From: Chen-Yu Tsai <wens@csie.org>
|
||||
Date: Mon, 12 Jan 2015 12:34:04 +0800
|
||||
Subject: [PATCH 4/7] ARM: dts: sun7i: cubieboard2: add axp209 regulator nodes
|
||||
Origin: https://git.kernel.org/linus/ae265c801ffdbd58e4c7a83efc8dc08932de1f74
|
||||
|
||||
This patch adds the regulator nodes for the axp209 by including
|
||||
the axp209 dtsi. As the inputs of these regulators are from the
|
||||
axp209's PS output, which is basically just a mux over the 2
|
||||
inputs, it is considered to be unregulated. Thus we do not provide
|
||||
input supply properties for them.
|
||||
|
||||
The regulator names and constraints are based on the board
|
||||
schematics and the SoC datasheet.
|
||||
|
||||
DCDC2 is used as the cpu power supply. This patch also references
|
||||
it from the cpu node.
|
||||
|
||||
Also get rid of axp209 properties already set in axp209.dtsi.
|
||||
|
||||
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
|
||||
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
|
||||
Conflicts:
|
||||
arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
|
||||
---
|
||||
arch/arm/boot/dts/sun7i-a20-cubieboard2.dts | 35 +++++++++++++++++++++++++----
|
||||
1 file changed, 31 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
|
||||
index d4648cf..7ce74a1 100644
|
||||
--- a/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
|
||||
+++ b/arch/arm/boot/dts/sun7i-a20-cubieboard2.dts
|
||||
@@ -78,13 +78,9 @@
|
||||
status = "okay";
|
||||
|
||||
axp209: pmic@34 {
|
||||
- compatible = "x-powers,axp209";
|
||||
reg = <0x34>;
|
||||
interrupt-parent = <&nmi_intc>;
|
||||
interrupts = <0 8>;
|
||||
-
|
||||
- interrupt-controller;
|
||||
- #interrupt-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -135,3 +131,34 @@
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
+
|
||||
+#include "axp209.dtsi"
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <®_dcdc2>;
|
||||
+};
|
||||
+
|
||||
+®_dcdc2 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1000000>;
|
||||
+ regulator-max-microvolt = <1450000>;
|
||||
+ regulator-name = "vdd-cpu";
|
||||
+};
|
||||
+
|
||||
+®_dcdc3 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1000000>;
|
||||
+ regulator-max-microvolt = <1400000>;
|
||||
+ regulator-name = "vdd-int-dll";
|
||||
+};
|
||||
+
|
||||
+®_ldo1 {
|
||||
+ regulator-name = "vdd-rtc";
|
||||
+};
|
||||
+
|
||||
+®_ldo2 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <3000000>;
|
||||
+ regulator-max-microvolt = <3000000>;
|
||||
+ regulator-name = "avcc";
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
From 319a5005396069f7c1829cafccbbe918166ec51a Mon Sep 17 00:00:00 2001
|
||||
From: Chen-Yu Tsai <wens@csie.org>
|
||||
Date: Mon, 12 Jan 2015 12:34:05 +0800
|
||||
Subject: [PATCH 5/7] ARM: dts: sun7i: cubietruck: add axp209 regulator nodes
|
||||
Origin: https://git.kernel.org/linus/0d4e29343ce6317cf5cf073346c3e66ad82d61a1
|
||||
|
||||
This patch adds the regulator nodes for the axp209 by including
|
||||
the axp209 dtsi. As the inputs of these regulators are from the
|
||||
axp209's PS output, which is basically just a mux over the 2
|
||||
inputs, it is considered to be unregulated. Thus we do not provide
|
||||
input supply properties for them.
|
||||
|
||||
The regulator names and constraints are based on the board
|
||||
schematics and the SoC datasheet.
|
||||
|
||||
DCDC2 is used as the cpu power supply. This patch also references
|
||||
it from the cpu node.
|
||||
|
||||
Also get rid of axp209 properties already set in axp209.dtsi.
|
||||
|
||||
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
|
||||
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
|
||||
Conflicts:
|
||||
arch/arm/boot/dts/sun7i-a20-cubietruck.dts
|
||||
---
|
||||
arch/arm/boot/dts/sun7i-a20-cubietruck.dts | 35 ++++++++++++++++++++++++++----
|
||||
1 file changed, 31 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
|
||||
index 96aee60..eb93cdd 100644
|
||||
--- a/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
|
||||
+++ b/arch/arm/boot/dts/sun7i-a20-cubietruck.dts
|
||||
@@ -112,13 +112,9 @@
|
||||
status = "okay";
|
||||
|
||||
axp209: pmic@34 {
|
||||
- compatible = "x-powers,axp209";
|
||||
reg = <0x34>;
|
||||
interrupt-parent = <&nmi_intc>;
|
||||
interrupts = <0 8>;
|
||||
-
|
||||
- interrupt-controller;
|
||||
- #interrupt-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -198,3 +194,34 @@
|
||||
gpio = <&pio 7 9 0>;
|
||||
};
|
||||
};
|
||||
+
|
||||
+#include "axp209.dtsi"
|
||||
+
|
||||
+&cpu0 {
|
||||
+ cpu-supply = <®_dcdc2>;
|
||||
+};
|
||||
+
|
||||
+®_dcdc2 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1000000>;
|
||||
+ regulator-max-microvolt = <1450000>;
|
||||
+ regulator-name = "vdd-cpu";
|
||||
+};
|
||||
+
|
||||
+®_dcdc3 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1000000>;
|
||||
+ regulator-max-microvolt = <1400000>;
|
||||
+ regulator-name = "vdd-int-dll";
|
||||
+};
|
||||
+
|
||||
+®_ldo1 {
|
||||
+ regulator-name = "vdd-rtc";
|
||||
+};
|
||||
+
|
||||
+®_ldo2 {
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <3000000>;
|
||||
+ regulator-max-microvolt = <3000000>;
|
||||
+ regulator-name = "avcc";
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -1,123 +0,0 @@
|
|||
From f3fb8c8611d470e40cb3460ede6f339e810d6f19 Mon Sep 17 00:00:00 2001
|
||||
From: Chen-Yu Tsai <wens@csie.org>
|
||||
Date: Mon, 12 Jan 2015 12:34:02 +0800
|
||||
Subject: [PATCH 3/7] ARM: dts: sunxi: Add dtsi for AXP209 PMIC
|
||||
Origin: https://git.kernel.org/linus/ddfd0232ede34e673fe338d1e5a7ec7aa022aa99
|
||||
|
||||
The AXP209 PMIC is used with some Allwinner SoCs. This patch adds
|
||||
a dtsi file listing all the regulator nodes. The regulators are
|
||||
initialized based on their device node names.
|
||||
|
||||
Signed-off-by: Chen-Yu Tsai <wens@csie.org>
|
||||
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
---
|
||||
arch/arm/boot/dts/axp209.dtsi | 97 +++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 97 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/axp209.dtsi
|
||||
|
||||
diff --git a/arch/arm/boot/dts/axp209.dtsi b/arch/arm/boot/dts/axp209.dtsi
|
||||
new file mode 100644
|
||||
index 0000000..c20cf53
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/axp209.dtsi
|
||||
@@ -0,0 +1,97 @@
|
||||
+/*
|
||||
+ * Copyright 2015 Chen-Yu Tsai
|
||||
+ *
|
||||
+ * Chen-Yu Tsai <wens@csie.org>
|
||||
+ *
|
||||
+ * This file is dual-licensed: you can use it either under the terms
|
||||
+ * of the GPL or the X11 license, at your option. Note that this dual
|
||||
+ * licensing only applies to this file, and not this project as a
|
||||
+ * whole.
|
||||
+ *
|
||||
+ * a) This file is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License as
|
||||
+ * published by the Free Software Foundation; either version 2 of the
|
||||
+ * License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This file is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public
|
||||
+ * License along with this file; if not, write to the Free
|
||||
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
+ * MA 02110-1301 USA
|
||||
+ *
|
||||
+ * Or, alternatively,
|
||||
+ *
|
||||
+ * b) Permission is hereby granted, free of charge, to any person
|
||||
+ * obtaining a copy of this software and associated documentation
|
||||
+ * files (the "Software"), to deal in the Software without
|
||||
+ * restriction, including without limitation the rights to use,
|
||||
+ * copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
+ * sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following
|
||||
+ * conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+/*
|
||||
+ * AXP202/209 Integrated Power Management Chip
|
||||
+ * http://www.x-powers.com/product/AXP20X.php
|
||||
+ * http://dl.linux-sunxi.org/AXP/AXP209%20Datasheet%20v1.0_cn.pdf
|
||||
+ */
|
||||
+
|
||||
+&axp209 {
|
||||
+ compatible = "x-powers,axp209";
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <1>;
|
||||
+
|
||||
+ regulators {
|
||||
+ /* Default work frequency for buck regulators */
|
||||
+ x-powers,dcdc-freq = <1500>;
|
||||
+
|
||||
+ reg_dcdc2: dcdc2 {
|
||||
+ regulator-name = "dcdc2";
|
||||
+ };
|
||||
+
|
||||
+ reg_dcdc3: dcdc3 {
|
||||
+ regulator-name = "dcdc3";
|
||||
+ };
|
||||
+
|
||||
+ reg_ldo1: ldo1 {
|
||||
+ /* LDO1 is a fixed output regulator */
|
||||
+ regulator-always-on;
|
||||
+ regulator-min-microvolt = <1300000>;
|
||||
+ regulator-max-microvolt = <1300000>;
|
||||
+ regulator-name = "ldo1";
|
||||
+ };
|
||||
+
|
||||
+ reg_ldo2: ldo2 {
|
||||
+ regulator-name = "ldo2";
|
||||
+ };
|
||||
+
|
||||
+ reg_ldo3: ldo3 {
|
||||
+ regulator-name = "ldo3";
|
||||
+ };
|
||||
+
|
||||
+ reg_ldo4: ldo4 {
|
||||
+ regulator-name = "ldo4";
|
||||
+ };
|
||||
+
|
||||
+ reg_ldo5: ldo5 {
|
||||
+ regulator-name = "ldo5";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -1,154 +0,0 @@
|
|||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Mon, 19 Jan 2015 14:05:12 +0100
|
||||
Subject: ARM: dts: sunxi: Add simplefb nodes for de_be0-lcd0, de_be0-lcd0-tve0
|
||||
pipelines
|
||||
Origin: https://git.kernel.org/linus/fd18c7eac03540654abdbfedd52e6dfb3718b489
|
||||
|
||||
Add simplefb nodes for "[de_fe0-]de_be0-lcd0" and "[de_fe0-]de_be0-lcd0-tve0"
|
||||
display pipelines for when u-boot has set up a pipeline to drive a LCD panel /
|
||||
VGA output rather then the HDMI output.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
---
|
||||
arch/arm/boot/dts/sun4i-a10.dtsi | 18 ++++++++++++++++++
|
||||
arch/arm/boot/dts/sun5i-a10s.dtsi | 8 ++++++++
|
||||
arch/arm/boot/dts/sun5i-a13.dtsi | 14 ++++++++++++++
|
||||
arch/arm/boot/dts/sun6i-a31.dtsi | 8 ++++++++
|
||||
arch/arm/boot/dts/sun7i-a20.dtsi | 17 +++++++++++++++++
|
||||
arch/arm/boot/dts/sun8i-a23.dtsi | 14 ++++++++++++++
|
||||
6 files changed, 79 insertions(+)
|
||||
|
||||
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
|
||||
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
|
||||
@@ -39,6 +39,24 @@
|
||||
<&ahb_gates 44>, <&ahb_gates 46>;
|
||||
status = "disabled";
|
||||
};
|
||||
+
|
||||
+ framebuffer@2 {
|
||||
+ compatible = "allwinner,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ allwinner,pipeline = "de_fe0-de_be0-lcd0";
|
||||
+ clocks = <&pll5 1>, <&ahb_gates 36>, <&ahb_gates 44>,
|
||||
+ <&ahb_gates 46>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ framebuffer@3 {
|
||||
+ compatible = "allwinner,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ allwinner,pipeline = "de_fe0-de_be0-lcd0-tve0";
|
||||
+ clocks = <&pll5 1>, <&ahb_gates 34>, <&ahb_gates 36>,
|
||||
+ <&ahb_gates 44>, <&ahb_gates 46>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
};
|
||||
|
||||
cpus {
|
||||
--- a/arch/arm/boot/dts/sun5i-a10s.dtsi
|
||||
+++ b/arch/arm/boot/dts/sun5i-a10s.dtsi
|
||||
@@ -32,6 +32,14 @@
|
||||
<&ahb_gates 44>;
|
||||
status = "disabled";
|
||||
};
|
||||
+
|
||||
+ framebuffer@1 {
|
||||
+ compatible = "allwinner,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ allwinner,pipeline = "de_be0-lcd0";
|
||||
+ clocks = <&pll5 1>, <&ahb_gates 36>, <&ahb_gates 44>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
};
|
||||
|
||||
cpus {
|
||||
--- a/arch/arm/boot/dts/sun5i-a13.dtsi
|
||||
+++ b/arch/arm/boot/dts/sun5i-a13.dtsi
|
||||
@@ -16,6 +16,20 @@
|
||||
/ {
|
||||
interrupt-parent = <&intc>;
|
||||
|
||||
+ chosen {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ ranges;
|
||||
+
|
||||
+ framebuffer@0 {
|
||||
+ compatible = "allwinner,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ allwinner,pipeline = "de_be0-lcd0";
|
||||
+ clocks = <&pll5 1>, <&ahb_gates 36>, <&ahb_gates 44>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
--- a/arch/arm/boot/dts/sun6i-a31.dtsi
|
||||
+++ b/arch/arm/boot/dts/sun6i-a31.dtsi
|
||||
@@ -67,6 +67,14 @@
|
||||
clocks = <&pll6 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
+
|
||||
+ framebuffer@1 {
|
||||
+ compatible = "allwinner,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ allwinner,pipeline = "de_be0-lcd0";
|
||||
+ clocks = <&pll6 0>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
};
|
||||
|
||||
cpus {
|
||||
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
|
||||
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
|
||||
@@ -68,6 +68,23 @@
|
||||
<&ahb_gates 44>;
|
||||
status = "disabled";
|
||||
};
|
||||
+
|
||||
+ framebuffer@1 {
|
||||
+ compatible = "allwinner,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ allwinner,pipeline = "de_be0-lcd0";
|
||||
+ clocks = <&pll5 1>, <&ahb_gates 36>, <&ahb_gates 44>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+
|
||||
+ framebuffer@2 {
|
||||
+ compatible = "allwinner,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ allwinner,pipeline = "de_be0-lcd0-tve0";
|
||||
+ clocks = <&pll5 1>, <&ahb_gates 34>, <&ahb_gates 36>,
|
||||
+ <&ahb_gates 44>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
};
|
||||
|
||||
cpus {
|
||||
--- a/arch/arm/boot/dts/sun8i-a23.dtsi
|
||||
+++ b/arch/arm/boot/dts/sun8i-a23.dtsi
|
||||
@@ -52,6 +52,20 @@
|
||||
/ {
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
+ chosen {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <1>;
|
||||
+ ranges;
|
||||
+
|
||||
+ framebuffer@0 {
|
||||
+ compatible = "allwinner,simple-framebuffer",
|
||||
+ "simple-framebuffer";
|
||||
+ allwinner,pipeline = "de_be0-lcd0";
|
||||
+ clocks = <&pll6 0>;
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
|
@ -1,61 +0,0 @@
|
|||
From 0737d5a36d9bbb22d9a156055116e710940be98b Mon Sep 17 00:00:00 2001
|
||||
From: Ian Campbell <ijc@debian.org>
|
||||
Date: Fri, 3 Apr 2015 10:26:04 +0100
|
||||
Subject: [PATCH] ARM: dts: sunxi: Fixup after backport of axp209 support
|
||||
Forwarded: not-needed
|
||||
|
||||
By adding cpu0 label to cpu@0.
|
||||
|
||||
Upstream this was added by "ARM: dts: sun4i: Add cpu clock reference and
|
||||
operating points to dtsi" (and similar for sun5i, sun7i) which we have not
|
||||
backported.
|
||||
|
||||
Signed-off-by: Ian Campbell <ijc@debian.org>
|
||||
---
|
||||
arch/arm/boot/dts/sun4i-a10.dtsi | 2 +-
|
||||
arch/arm/boot/dts/sun5i-a13.dtsi | 2 +-
|
||||
arch/arm/boot/dts/sun7i-a20.dtsi | 2 +-
|
||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
|
||||
index eae8bfd..ad2ef45 100644
|
||||
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
|
||||
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
|
||||
@@ -70,7 +70,7 @@
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
- cpu@0 {
|
||||
+ cpu0: cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a8";
|
||||
reg = <0x0>;
|
||||
diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi
|
||||
index a194c1e..23bfb8f 100644
|
||||
--- a/arch/arm/boot/dts/sun5i-a13.dtsi
|
||||
+++ b/arch/arm/boot/dts/sun5i-a13.dtsi
|
||||
@@ -38,7 +38,7 @@
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
- cpu@0 {
|
||||
+ cpu0: cpu@0 {
|
||||
device_type = "cpu";
|
||||
compatible = "arm,cortex-a8";
|
||||
reg = <0x0>;
|
||||
diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
|
||||
index 7d47914..648051c 100644
|
||||
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
|
||||
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
|
||||
@@ -63,7 +63,7 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
- cpu@0 {
|
||||
+ cpu0: cpu@0 {
|
||||
compatible = "arm,cortex-a7";
|
||||
device_type = "cpu";
|
||||
reg = <0>;
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -1,292 +0,0 @@
|
|||
From 10662a33dcd97f27004779df7e9188c124bc7076 Mon Sep 17 00:00:00 2001
|
||||
From: Hans de Goede <hdegoede@redhat.com>
|
||||
Date: Sun, 18 Jan 2015 13:08:19 +0100
|
||||
Subject: ARM: dts: sun7i: Add dts file for Bananapro board
|
||||
Origin: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/patch/?id=10662a33dcd97f27004779df7e9188c124bc7076
|
||||
|
||||
Add support for the new Bananapro A20 development board from lemaker.org.
|
||||
This board features 1G RAM, 2 USB A receptacles, 1 micro USB receptacle for
|
||||
OTG, 1 micro USB receptacle for power, HDMI, sata, Gbit ethernet, ir receiver,
|
||||
3.5 mm jack for a/v out, on board microphone, 40 gpio pins and sdio wifi.
|
||||
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
|
||||
[Karsten Merker: replace SUN4I_PINCTRL_10_MA, SUN4I_PINCTRL_NO_PULL and
|
||||
SUN4I_PINCTRL_PULL_UP with their corresponding values as these symbols are not
|
||||
yet defined in 3.16.]
|
||||
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -464,6 +464,7 @@ dtb-$(CONFIG_MACH_SUN6I) += \
|
||||
sun6i-a31-m9.dtb
|
||||
dtb-$(CONFIG_MACH_SUN7I) += \
|
||||
sun7i-a20-bananapi.dtb \
|
||||
+ sun7i-a20-bananapro.dtb \
|
||||
sun7i-a20-cubieboard2.dtb \
|
||||
sun7i-a20-cubietruck.dtb \
|
||||
sun7i-a20-hummingbird.dtb \
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/sun7i-a20-bananapro.dts
|
||||
@@ -0,0 +1,262 @@
|
||||
+/*
|
||||
+ * Copyright 2015 Hans de Goede <hdegoede@redhat.com>
|
||||
+ *
|
||||
+ * This file is dual-licensed: you can use it either under the terms
|
||||
+ * of the GPL or the X11 license, at your option. Note that this dual
|
||||
+ * licensing only applies to this file, and not this project as a
|
||||
+ * whole.
|
||||
+ *
|
||||
+ * a) This file is free software; you can redistribute it and/or
|
||||
+ * modify it under the terms of the GNU General Public License as
|
||||
+ * published by the Free Software Foundation; either version 2 of the
|
||||
+ * License, or (at your option) any later version.
|
||||
+ *
|
||||
+ * This file is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public
|
||||
+ * License along with this file; if not, write to the Free
|
||||
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
|
||||
+ * MA 02110-1301 USA
|
||||
+ *
|
||||
+ * Or, alternatively,
|
||||
+ *
|
||||
+ * b) Permission is hereby granted, free of charge, to any person
|
||||
+ * obtaining a copy of this software and associated documentation
|
||||
+ * files (the "Software"), to deal in the Software without
|
||||
+ * restriction, including without limitation the rights to use,
|
||||
+ * copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
+ * sell copies of the Software, and to permit persons to whom the
|
||||
+ * Software is furnished to do so, subject to the following
|
||||
+ * conditions:
|
||||
+ *
|
||||
+ * The above copyright notice and this permission notice shall be
|
||||
+ * included in all copies or substantial portions of the Software.
|
||||
+ *
|
||||
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
+ * OTHER DEALINGS IN THE SOFTWARE.
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+#include "sun7i-a20.dtsi"
|
||||
+#include "sunxi-common-regulators.dtsi"
|
||||
+#include <dt-bindings/gpio/gpio.h>
|
||||
+#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
+
|
||||
+/ {
|
||||
+ model = "LeMaker Banana Pro";
|
||||
+ compatible = "lemaker,bananapro", "allwinner,sun7i-a20";
|
||||
+
|
||||
+ leds {
|
||||
+ compatible = "gpio-leds";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&led_pins_bananapro>;
|
||||
+
|
||||
+ blue {
|
||||
+ label = "bananapro:blue:usr";
|
||||
+ gpios = <&pio 6 2 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ green {
|
||||
+ label = "bananapro:green:usr";
|
||||
+ gpios = <&pio 7 24 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ reg_gmac_3v3: gmac-3v3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gmac_power_pin_bananapro>;
|
||||
+ regulator-name = "gmac-3v3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ startup-delay-us = <100000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 7 23 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+
|
||||
+ reg_vmmc3: vmmc3 {
|
||||
+ compatible = "regulator-fixed";
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&vmmc3_pin_bananapro>;
|
||||
+ regulator-name = "vmmc3";
|
||||
+ regulator-min-microvolt = <3300000>;
|
||||
+ regulator-max-microvolt = <3300000>;
|
||||
+ enable-active-high;
|
||||
+ gpio = <&pio 7 22 GPIO_ACTIVE_HIGH>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&ahci {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ehci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&gmac {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&gmac_pins_rgmii_a>;
|
||||
+ phy = <&phy1>;
|
||||
+ phy-mode = "rgmii";
|
||||
+ phy-supply = <®_gmac_3v3>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ phy1: ethernet-phy@1 {
|
||||
+ reg = <1>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c0_pins_a>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ axp209: pmic@34 {
|
||||
+ compatible = "x-powers,axp209";
|
||||
+ reg = <0x34>;
|
||||
+ interrupt-parent = <&nmi_intc>;
|
||||
+ interrupts = <0 IRQ_TYPE_LEVEL_LOW>;
|
||||
+
|
||||
+ interrupt-controller;
|
||||
+ #interrupt-cells = <1>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c2_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ir0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&ir0_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mmc0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bananapro>;
|
||||
+ vmmc-supply = <®_vcc3v3>;
|
||||
+ bus-width = <4>;
|
||||
+ cd-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */
|
||||
+ cd-inverted;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mmc3 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&mmc3_pins_a>;
|
||||
+ vmmc-supply = <®_vmmc3>;
|
||||
+ bus-width = <4>;
|
||||
+ non-removable;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&ohci1 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&pio {
|
||||
+ gmac_power_pin_bananapro: gmac_power_pin@0 {
|
||||
+ allwinner,pins = "PH23";
|
||||
+ allwinner,function = "gpio_out";
|
||||
+ allwinner,drive = <0>;
|
||||
+ allwinner,pull = <0>;
|
||||
+ };
|
||||
+
|
||||
+ led_pins_bananapro: led_pins@0 {
|
||||
+ allwinner,pins = "PH24", "PG2";
|
||||
+ allwinner,function = "gpio_out";
|
||||
+ allwinner,drive = <0>;
|
||||
+ allwinner,pull = <0>;
|
||||
+ };
|
||||
+
|
||||
+ mmc0_cd_pin_bananapro: mmc0_cd_pin@0 {
|
||||
+ allwinner,pins = "PH10";
|
||||
+ allwinner,function = "gpio_in";
|
||||
+ allwinner,drive = <0>;
|
||||
+ allwinner,pull = <1>;
|
||||
+ };
|
||||
+
|
||||
+ usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
|
||||
+ allwinner,pins = "PH0";
|
||||
+ allwinner,function = "gpio_out";
|
||||
+ allwinner,drive = <0>;
|
||||
+ allwinner,pull = <0>;
|
||||
+ };
|
||||
+
|
||||
+ usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
|
||||
+ allwinner,pins = "PH1";
|
||||
+ allwinner,function = "gpio_out";
|
||||
+ allwinner,drive = <0>;
|
||||
+ allwinner,pull = <0>;
|
||||
+ };
|
||||
+
|
||||
+ vmmc3_pin_bananapro: vmmc3_pin@0 {
|
||||
+ allwinner,pins = "PH22";
|
||||
+ allwinner,function = "gpio_out";
|
||||
+ allwinner,drive = <0>;
|
||||
+ allwinner,pull = <0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+®_usb1_vbus {
|
||||
+ pinctrl-0 = <&usb1_vbus_pin_bananapro>;
|
||||
+ gpio = <&pio 7 0 GPIO_ACTIVE_HIGH>; /* PH0 */
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+®_usb2_vbus {
|
||||
+ pinctrl-0 = <&usb2_vbus_pin_bananapro>;
|
||||
+ gpio = <&pio 7 1 GPIO_ACTIVE_HIGH>; /* PH1 */
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&spi0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&spi0_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart0_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart2 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart2_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart7 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart7_pins_a>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&usbphy {
|
||||
+ usb1_vbus-supply = <®_usb1_vbus>;
|
||||
+ usb2_vbus-supply = <®_usb2_vbus>;
|
||||
+ status = "okay";
|
||||
+};
|
|
@ -50,19 +50,3 @@ Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
|
|||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DSR1000N)
|
||||
ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX)
|
||||
}
|
||||
--- a/arch/mips/include/asm/octeon/octeon-model.h
|
||||
+++ b/arch/mips/include/asm/octeon/octeon-model.h
|
||||
@@ -105,10 +105,13 @@
|
||||
#define OCTEON_CN63XX_PASS2_X (OCTEON_CN63XX_PASS2_0 | OM_IGNORE_MINOR_REVISION)
|
||||
|
||||
#define OCTEON_CN61XX_PASS1_0 0x000d9300
|
||||
+#define OCTEON_CN61XX_PASS1_1 0x000d9301
|
||||
|
||||
#define OCTEON_CN61XX (OCTEON_CN61XX_PASS1_0 | OM_IGNORE_REVISION)
|
||||
#define OCTEON_CN61XX_PASS1_X (OCTEON_CN61XX_PASS1_0 | OM_IGNORE_MINOR_REVISION)
|
||||
|
||||
+#define OCTEON_UBNT_E200 (OCTEON_CN61XX_PASS1_1 | OM_IGNORE_REVISION)
|
||||
+
|
||||
/*
|
||||
* CN5XXX models with new revision encoding
|
||||
*/
|
||||
|
|
|
@ -39,14 +39,8 @@ debian/qxl-disable-modeset-by-default.patch
|
|||
|
||||
# Arch bug fixes
|
||||
bugfix/mips/disable-advansys.patch
|
||||
bugfix/m68k/ethernat-kconfig.patch
|
||||
bugfix/arm64/arm64-add-missing-dts-entry-for-X-Gene-platform.patch
|
||||
bugfix/arm64/arm64-removed-using-of-the-mask-attribute-in-the-dts.patch
|
||||
bugfix/x86/acpi-video-add-disable_native_backlight-quirk-for-samsung-730u3e-740u3e.patch
|
||||
bugfix/x86/acpi-video-add-disable_native_backlight-quirk-for-samsung-510r.patch
|
||||
bugfix/x86/acpi-video-disable-native-backlight-on-samsung-series-9.patch
|
||||
bugfix/x86/drm-i915-quietly-reject-attempts-to-create-non-pagealigned-stolen-objects.patch
|
||||
bugfix/x86/x86-microcode-intel-guard-against-stack-overflow-in-.patch
|
||||
|
||||
# Arch features
|
||||
features/mips/MIPS-increase-MAX-PHYSMEM-BITS-on-Loongson-3-only.patch
|
||||
|
@ -55,14 +49,6 @@ features/mips/MIPS-octeon-Add-support-for-the-UBNT-E200-board.patch
|
|||
features/x86/x86-memtest-WARN-if-bad-RAM-found.patch
|
||||
features/x86/x86-make-x32-syscall-support-conditional.patch
|
||||
features/arm/deb-pkg-add-automatic-support-for-armhf-architecture.patch
|
||||
features/arm/dts-sun7i-Add-dts-file-for-Bananapro-board.patch
|
||||
features/arm/ARM-dts-sunxi-Add-simplefb-nodes-for-de_be0-lcd0-de_.patch
|
||||
features/arm/ARM-dts-sunxi-Add-dtsi-for-AXP209-PMIC.patch
|
||||
features/arm/ARM-dts-sun7i-cubieboard2-add-axp209-regulator-nodes.patch
|
||||
features/arm/ARM-dts-sun7i-cubietruck-add-axp209-regulator-nodes.patch
|
||||
features/arm/ARM-dts-sun4i-cubieboard-add-axp209-regulator-nodes.patch
|
||||
features/arm/ARM-dts-sun5i-Enable-axp209-support-on-A13-OLinuxIno.patch
|
||||
features/arm/ARM-dts-sunxi-Fixup-after-backport-of-axp209-support.patch
|
||||
|
||||
# Miscellaneous bug fixes
|
||||
bugfix/all/misc-bmp085-Enable-building-as-a-module.patch
|
||||
|
@ -73,20 +59,8 @@ bugfix/all/aic94xx-remove-broken-fallback-for-missing-ctrl-a.patch
|
|||
bugfix/all/rtsx_usb_ms-use-msleep_interruptible-in-polling-loop.patch
|
||||
bugfix/all/net-mv643xx-disable-tso-by-default.patch
|
||||
bugfix/all/vfs-read-file_handle-only-once-in-handle_to_path.patch
|
||||
bugfix/all/ib-core-prevent-integer-overflow-in-ib_umem_get.patch
|
||||
bugfix/all/ext4-allocate-entire-range-in-zero-range.patch
|
||||
bugfix/all/ipv6-don-t-reduce-hop-limit-for-an-interface.patch
|
||||
debian/emmc-don-t-initialize-partitions-on-rpmb-flagged-areas.patch
|
||||
|
||||
# Miscellaneous features
|
||||
features/all/efi-autoload-efi-pstore.patch
|
||||
features/all/efi-expose-underlying-uefi-firmware-platform-size-to.patch
|
||||
|
||||
# Add FocalTech support to psmouse
|
||||
features/all/psmouse/input-psmouse-support-for-the-focaltech-ps-2-protoco.patch
|
||||
features/all/psmouse/input-psmouse-remove-hardcoded-touchpad-size-from-th.patch
|
||||
features/all/psmouse/input-psmouse-ensure-that-focaltech-reports-consiste.patch
|
||||
features/all/psmouse/input-psmouse-disable-changing-resolution-rate-scale.patch
|
||||
features/all/psmouse/input-psmouse-disable-palm-detection-in-the-focaltec.patch
|
||||
|
||||
bugfix/all/btrfs-simplify-insert_orphan_item.patch
|
||||
|
|
Loading…
Reference in New Issue