@@ -2442,6 +2442,156 @@ static void cros_ec_proto_test_check_features_not_cached(struct kunit *test)
24422442 }
24432443}
24442444
2445+ static void cros_ec_proto_test_get_sensor_count_normal (struct kunit * test )
2446+ {
2447+ struct cros_ec_proto_test_priv * priv = test -> priv ;
2448+ struct cros_ec_device * ec_dev = & priv -> ec_dev ;
2449+ struct ec_xfer_mock * mock ;
2450+ int ret ;
2451+ struct cros_ec_dev ec ;
2452+
2453+ ec_dev -> max_request = 0xff ;
2454+ ec_dev -> max_response = 0xee ;
2455+ ec .ec_dev = ec_dev ;
2456+ ec .dev = ec_dev -> dev ;
2457+ ec .cmd_offset = 0 ;
2458+
2459+ /* For EC_CMD_MOTION_SENSE_CMD. */
2460+ {
2461+ struct ec_response_motion_sense * data ;
2462+
2463+ mock = cros_kunit_ec_xfer_mock_add (test , sizeof (* data ));
2464+ KUNIT_ASSERT_PTR_NE (test , mock , NULL );
2465+
2466+ data = (struct ec_response_motion_sense * )mock -> o_data ;
2467+ data -> dump .sensor_count = 0xbf ;
2468+ }
2469+
2470+ ret = cros_ec_get_sensor_count (& ec );
2471+ KUNIT_EXPECT_EQ (test , ret , 0xbf );
2472+
2473+ /* For EC_CMD_MOTION_SENSE_CMD. */
2474+ {
2475+ struct ec_params_motion_sense * data ;
2476+
2477+ mock = cros_kunit_ec_xfer_mock_next ();
2478+ KUNIT_EXPECT_PTR_NE (test , mock , NULL );
2479+
2480+ KUNIT_EXPECT_EQ (test , mock -> msg .version , 1 );
2481+ KUNIT_EXPECT_EQ (test , mock -> msg .command , EC_CMD_MOTION_SENSE_CMD );
2482+ KUNIT_EXPECT_EQ (test , mock -> msg .insize , sizeof (struct ec_response_motion_sense ));
2483+ KUNIT_EXPECT_EQ (test , mock -> msg .outsize , sizeof (* data ));
2484+
2485+ data = (struct ec_params_motion_sense * )mock -> i_data ;
2486+ KUNIT_EXPECT_EQ (test , data -> cmd , MOTIONSENSE_CMD_DUMP );
2487+ }
2488+ }
2489+
2490+ static void cros_ec_proto_test_get_sensor_count_xfer_error (struct kunit * test )
2491+ {
2492+ struct cros_ec_proto_test_priv * priv = test -> priv ;
2493+ struct cros_ec_device * ec_dev = & priv -> ec_dev ;
2494+ struct ec_xfer_mock * mock ;
2495+ int ret ;
2496+ struct cros_ec_dev ec ;
2497+
2498+ ec_dev -> max_request = 0xff ;
2499+ ec_dev -> max_response = 0xee ;
2500+ ec .ec_dev = ec_dev ;
2501+ ec .dev = ec_dev -> dev ;
2502+ ec .cmd_offset = 0 ;
2503+
2504+ /* For EC_CMD_MOTION_SENSE_CMD. */
2505+ {
2506+ mock = cros_kunit_ec_xfer_mock_addx (test , - EPROTO , EC_RES_SUCCESS , 0 );
2507+ KUNIT_ASSERT_PTR_NE (test , mock , NULL );
2508+ }
2509+
2510+ ret = cros_ec_get_sensor_count (& ec );
2511+ KUNIT_EXPECT_EQ (test , ret , - EPROTO );
2512+
2513+ /* For EC_CMD_MOTION_SENSE_CMD. */
2514+ {
2515+ struct ec_params_motion_sense * data ;
2516+
2517+ mock = cros_kunit_ec_xfer_mock_next ();
2518+ KUNIT_EXPECT_PTR_NE (test , mock , NULL );
2519+
2520+ KUNIT_EXPECT_EQ (test , mock -> msg .version , 1 );
2521+ KUNIT_EXPECT_EQ (test , mock -> msg .command , EC_CMD_MOTION_SENSE_CMD );
2522+ KUNIT_EXPECT_EQ (test , mock -> msg .insize , sizeof (struct ec_response_motion_sense ));
2523+ KUNIT_EXPECT_EQ (test , mock -> msg .outsize , sizeof (* data ));
2524+
2525+ data = (struct ec_params_motion_sense * )mock -> i_data ;
2526+ KUNIT_EXPECT_EQ (test , data -> cmd , MOTIONSENSE_CMD_DUMP );
2527+ }
2528+ }
2529+
2530+ static void cros_ec_proto_test_get_sensor_count_legacy (struct kunit * test )
2531+ {
2532+ struct cros_ec_proto_test_priv * priv = test -> priv ;
2533+ struct cros_ec_device * ec_dev = & priv -> ec_dev ;
2534+ struct ec_xfer_mock * mock ;
2535+ int ret , i ;
2536+ struct cros_ec_dev ec ;
2537+ struct {
2538+ u8 readmem_data ;
2539+ int expected_result ;
2540+ } test_data [] = {
2541+ { 0 , 0 },
2542+ { EC_MEMMAP_ACC_STATUS_PRESENCE_BIT , 2 },
2543+ };
2544+
2545+ ec_dev -> max_request = 0xff ;
2546+ ec_dev -> max_response = 0xee ;
2547+ ec_dev -> cmd_readmem = cros_kunit_readmem_mock ;
2548+ ec .ec_dev = ec_dev ;
2549+ ec .dev = ec_dev -> dev ;
2550+ ec .cmd_offset = 0 ;
2551+
2552+ for (i = 0 ; i < ARRAY_SIZE (test_data ); ++ i ) {
2553+ /* For EC_CMD_MOTION_SENSE_CMD. */
2554+ {
2555+ mock = cros_kunit_ec_xfer_mock_addx (test , - EPROTO , EC_RES_SUCCESS , 0 );
2556+ KUNIT_ASSERT_PTR_NE (test , mock , NULL );
2557+ }
2558+
2559+ /* For readmem. */
2560+ {
2561+ cros_kunit_readmem_mock_data = kunit_kzalloc (test , 1 , GFP_KERNEL );
2562+ KUNIT_ASSERT_PTR_NE (test , cros_kunit_readmem_mock_data , NULL );
2563+ cros_kunit_readmem_mock_data [0 ] = test_data [i ].readmem_data ;
2564+
2565+ cros_kunit_ec_xfer_mock_default_ret = 1 ;
2566+ }
2567+
2568+ ret = cros_ec_get_sensor_count (& ec );
2569+ KUNIT_EXPECT_EQ (test , ret , test_data [i ].expected_result );
2570+
2571+ /* For EC_CMD_MOTION_SENSE_CMD. */
2572+ {
2573+ struct ec_params_motion_sense * data ;
2574+
2575+ mock = cros_kunit_ec_xfer_mock_next ();
2576+ KUNIT_EXPECT_PTR_NE (test , mock , NULL );
2577+
2578+ KUNIT_EXPECT_EQ (test , mock -> msg .version , 1 );
2579+ KUNIT_EXPECT_EQ (test , mock -> msg .command , EC_CMD_MOTION_SENSE_CMD );
2580+ KUNIT_EXPECT_EQ (test , mock -> msg .insize ,
2581+ sizeof (struct ec_response_motion_sense ));
2582+ KUNIT_EXPECT_EQ (test , mock -> msg .outsize , sizeof (* data ));
2583+
2584+ data = (struct ec_params_motion_sense * )mock -> i_data ;
2585+ KUNIT_EXPECT_EQ (test , data -> cmd , MOTIONSENSE_CMD_DUMP );
2586+ }
2587+
2588+ /* For readmem. */
2589+ {
2590+ KUNIT_EXPECT_EQ (test , cros_kunit_readmem_mock_offset , EC_MEMMAP_ACC_STATUS );
2591+ }
2592+ }
2593+ }
2594+
24452595static void cros_ec_proto_test_release (struct device * dev )
24462596{
24472597}
@@ -2537,6 +2687,9 @@ static struct kunit_case cros_ec_proto_test_cases[] = {
25372687 KUNIT_CASE (cros_ec_proto_test_get_host_event_normal ),
25382688 KUNIT_CASE (cros_ec_proto_test_check_features_cached ),
25392689 KUNIT_CASE (cros_ec_proto_test_check_features_not_cached ),
2690+ KUNIT_CASE (cros_ec_proto_test_get_sensor_count_normal ),
2691+ KUNIT_CASE (cros_ec_proto_test_get_sensor_count_xfer_error ),
2692+ KUNIT_CASE (cros_ec_proto_test_get_sensor_count_legacy ),
25402693 {}
25412694};
25422695
0 commit comments