Index: sys/dev/hid/bcm5974.c =================================================================== --- sys/dev/hid/bcm5974.c +++ sys/dev/hid/bcm5974.c @@ -188,7 +188,10 @@ BCM5974_FLAG_WELLSPRING7, BCM5974_FLAG_WELLSPRING7A, BCM5974_FLAG_WELLSPRING8, - BCM5974_FLAG_WELLSPRING9, + BCM5974_FLAG_WELLSPRING9_MODEL3, + BCM5974_FLAG_WELLSPRING9_MODEL4, + BCM5974_FLAG_WELLSPRING9_MODEL5, + BCM5974_FLAG_WELLSPRING9_MODEL6, BCM5974_FLAG_MAX, }; @@ -331,7 +334,7 @@ * No scientific measurements have been done :) but a really hard press * results in a value around 3500 on model 4. */ - [BCM5974_FLAG_WELLSPRING9] = { + [BCM5974_FLAG_WELLSPRING9_MODEL3] = { .tp = tp + TYPE4, .p = { SN_PRESSURE, 0, 4096, 4096 }, .w = { SN_WIDTH, 0, 2048, 0 }, @@ -340,6 +343,33 @@ .o = { SN_ORIENT, -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION, 0 }, }, + [BCM5974_FLAG_WELLSPRING9_MODEL4] = { + .tp = tp + TYPE4, + .p = { SN_PRESSURE, 0, 4096, 4096 }, + .w = { SN_WIDTH, 0, 2048, 0 }, + .x = { SN_COORD, -5087, 5579, 105 }, + .y = { SN_COORD, -182, 6089, 75 }, + .o = { SN_ORIENT, + -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION, 0 }, + }, + [BCM5974_FLAG_WELLSPRING9_MODEL5] = { + .tp = tp + TYPE4, + .p = { SN_PRESSURE, 0, 4096, 4096 }, + .w = { SN_WIDTH, 0, 2048, 0 }, + .x = { SN_COORD, -6243, 6749, 105 }, + .y = { SN_COORD, -170, 7685, 75 }, + .o = { SN_ORIENT, + -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION, 0 }, + }, + [BCM5974_FLAG_WELLSPRING9_MODEL6] = { + .tp = tp + TYPE4, + .p = { SN_PRESSURE, 0, 4096, 4096 }, + .w = { SN_WIDTH, 0, 2048, 0 }, + .x = { SN_COORD, -7456, 7976, 105 }, + .y = { SN_COORD, -163, 9283, 75 }, + .o = { SN_ORIENT, + -MAX_FINGER_ORIENTATION, MAX_FINGER_ORIENTATION, 0 }, + }, }; #define BCM5974_DEV(v,p,i) { \ @@ -347,6 +377,17 @@ HID_TLC(BCM5974_TLC_PAGE, BCM5974_TLC_USAGE), \ } +#define BCM5974_DEV_SPI_VER(v,p,ver,i) { \ + HID_BVPI(BUS_SPI, USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i), \ + HID_VERSION_LTEQ(ver), \ + HID_TLC(BCM5974_TLC_PAGE, BCM5974_TLC_USAGE), \ +} + +#define BCM5974_DEV_SPI(v,p,i) { \ + HID_BVPI(BUS_SPI, USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i), \ + HID_TLC(BCM5974_TLC_PAGE, BCM5974_TLC_USAGE), \ +} + static const struct hid_device_id bcm5974_devs[] = { /* MacbookAir1.1 */ BCM5974_DEV(APPLE, WELLSPRING_ANSI, BCM5974_FLAG_WELLSPRING1), @@ -410,9 +451,32 @@ BCM5974_DEV(APPLE, WELLSPRING8_JIS, BCM5974_FLAG_WELLSPRING8), /* MacbookPro12,1 MacbookPro11,4 */ - BCM5974_DEV(APPLE, WELLSPRING9_ANSI, BCM5974_FLAG_WELLSPRING9), - BCM5974_DEV(APPLE, WELLSPRING9_ISO, BCM5974_FLAG_WELLSPRING9), - BCM5974_DEV(APPLE, WELLSPRING9_JIS, BCM5974_FLAG_WELLSPRING9), + BCM5974_DEV(APPLE, WELLSPRING9_ANSI, BCM5974_FLAG_WELLSPRING9_MODEL3), + BCM5974_DEV(APPLE, WELLSPRING9_ISO, BCM5974_FLAG_WELLSPRING9_MODEL3), + BCM5974_DEV(APPLE, WELLSPRING9_JIS, BCM5974_FLAG_WELLSPRING9_MODEL3), + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_ANSI, 3, BCM5974_FLAG_WELLSPRING9_MODEL3), + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_ISO, 3, BCM5974_FLAG_WELLSPRING9_MODEL3), + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_JIS, 3, BCM5974_FLAG_WELLSPRING9_MODEL3), + + /* Macbook8,1 Macbook9,1 Macbook10,1 */ + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_ANSI, 4, BCM5974_FLAG_WELLSPRING9_MODEL4), + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_ISO, 4, BCM5974_FLAG_WELLSPRING9_MODEL4), + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_JIS, 4, BCM5974_FLAG_WELLSPRING9_MODEL4), + + /* MacbookPro13,1 MacbookPro13,2 MacbookPro14,1 MacbookPro14,2 */ + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_ANSI, 5, BCM5974_FLAG_WELLSPRING9_MODEL5), + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_ISO, 5, BCM5974_FLAG_WELLSPRING9_MODEL5), + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_JIS, 5, BCM5974_FLAG_WELLSPRING9_MODEL5), + + /* MacbookPro13,3 MacbookPro14,3 */ + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_ANSI, 6, BCM5974_FLAG_WELLSPRING9_MODEL6), + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_ISO, 6, BCM5974_FLAG_WELLSPRING9_MODEL6), + BCM5974_DEV_SPI_VER(APPLE, WELLSPRING9_JIS, 6, BCM5974_FLAG_WELLSPRING9_MODEL6), + + /* Fallback for unknown SPI versions */ + BCM5974_DEV_SPI(APPLE, WELLSPRING9_ANSI, BCM5974_FLAG_WELLSPRING9_MODEL4), + BCM5974_DEV_SPI(APPLE, WELLSPRING9_ISO, BCM5974_FLAG_WELLSPRING9_MODEL4), + BCM5974_DEV_SPI(APPLE, WELLSPRING9_JIS, BCM5974_FLAG_WELLSPRING9_MODEL4), }; struct bcm5974_softc {