Commit 91a8030f authored by Jeffrey Carlyle's avatar Jeffrey Carlyle
Browse files

greybus: Revert "update UniPro Set Interface Power Mode operation to match spec"



This reverts commit 29fee8c55b59bb6ac59b99a0563c89c514cba42b.

This change and its companion NuttX changes seem to be triggering a
storm of POWERMODEIND switch interrupts on the SVC.

Signed-off-by: default avatarJeffrey Carlyle <jcarlyle@google.com>
Acked-by: default avatarSandeep Patil <sspatil@google.com>
parent 00606367
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -121,23 +121,17 @@ static int gb_camera_set_intf_power_mode(struct gb_camera *gcam, u8 intf_id,
		ret = gb_svc_intf_set_power_mode(svc, intf_id,
						 GB_SVC_UNIPRO_HS_SERIES_A,
						 GB_SVC_UNIPRO_FAST_MODE, 2, 2,
						 GB_SVC_SMALL_AMPLITUDE,
						 GB_SVC_NO_DE_EMPHASIS,
						 GB_SVC_UNIPRO_FAST_MODE, 2, 2,
						 GB_SVC_PWRM_RXTERMINATION |
						 GB_SVC_PWRM_TXTERMINATION, 0,
						 NULL, NULL);
						 GB_SVC_PWRM_TXTERMINATION, 0);
	else
		ret = gb_svc_intf_set_power_mode(svc, intf_id,
						 GB_SVC_UNIPRO_HS_SERIES_A,
						 GB_SVC_UNIPRO_SLOW_AUTO_MODE,
						 2, 1,
						 GB_SVC_SMALL_AMPLITUDE,
						 GB_SVC_NO_DE_EMPHASIS,
						 GB_SVC_UNIPRO_SLOW_AUTO_MODE,
						 2, 1,
						 0, 0,
						 NULL, NULL);
						 0, 0);

	return ret;
}
+0 −28
Original line number Diff line number Diff line
@@ -1136,13 +1136,6 @@ struct gb_svc_timesync_ping_response {
#define GB_SVC_UNIPRO_HIBERNATE_MODE		0x11
#define GB_SVC_UNIPRO_OFF_MODE			0x12

#define GB_SVC_SMALL_AMPLITUDE          0x01
#define GB_SVC_LARGE_AMPLITUDE          0x02

#define GB_SVC_NO_DE_EMPHASIS           0x00
#define GB_SVC_SMALL_DE_EMPHASIS        0x01
#define GB_SVC_LARGE_DE_EMPHASIS        0x02

#define GB_SVC_PWRM_RXTERMINATION		0x01
#define GB_SVC_PWRM_TXTERMINATION		0x02
#define GB_SVC_PWRM_LINE_RESET			0x04
@@ -1153,38 +1146,17 @@ struct gb_svc_timesync_ping_response {
#define GB_SVC_UNIPRO_HS_SERIES_A		0x01
#define GB_SVC_UNIPRO_HS_SERIES_B		0x02

#define GB_SVC_SETPWRM_PWR_OK           0x00
#define GB_SVC_SETPWRM_PWR_LOCAL        0x01
#define GB_SVC_SETPWRM_PWR_REMOTE       0x02
#define GB_SVC_SETPWRM_PWR_BUSY         0x03
#define GB_SVC_SETPWRM_PWR_ERROR_CAP    0x04
#define GB_SVC_SETPWRM_PWR_FATAL_ERROR  0x05

struct gb_svc_l2_timer_cfg {
	__le16 tsb_fc0_protection_timeout;
	__le16 tsb_tc0_replay_timeout;
	__le16 tsb_afc0_req_timeout;
	__le16 tsb_fc1_protection_timeout;
	__le16 tsb_tc1_replay_timeout;
	__le16 tsb_afc1_req_timeout;
	__le16 reserved_for_tc2[3];
	__le16 reserved_for_tc3[3];
} __packed;

struct gb_svc_intf_set_pwrm_request {
	__u8	intf_id;
	__u8	hs_series;
	__u8	tx_mode;
	__u8	tx_gear;
	__u8	tx_nlanes;
	__u8	tx_amplitude;
	__u8	tx_hs_equalizer;
	__u8	rx_mode;
	__u8	rx_gear;
	__u8	rx_nlanes;
	__u8	flags;
	__le32	quirks;
	struct gb_svc_l2_timer_cfg local_l2timerdata, remote_l2timerdata;
} __packed;

struct gb_svc_intf_set_pwrm_response {
+3 −21
Original line number Diff line number Diff line
@@ -578,33 +578,23 @@ void gb_svc_route_destroy(struct gb_svc *svc, u8 intf1_id, u8 intf2_id)

int gb_svc_intf_set_power_mode(struct gb_svc *svc, u8 intf_id, u8 hs_series,
			       u8 tx_mode, u8 tx_gear, u8 tx_nlanes,
			       u8 tx_amplitude, u8 tx_hs_equalizer,
			       u8 rx_mode, u8 rx_gear, u8 rx_nlanes,
			       u8 flags, u32 quirks,
			       struct gb_svc_l2_timer_cfg *local,
			       struct gb_svc_l2_timer_cfg *remote)
			       u8 flags, u32 quirks)
{
	struct gb_svc_intf_set_pwrm_request request;
	struct gb_svc_intf_set_pwrm_response response;
	int ret;
	u16 result_code;

	request.intf_id = intf_id;
	request.hs_series = hs_series;
	request.tx_mode = tx_mode;
	request.tx_gear = tx_gear;
	request.tx_nlanes = tx_nlanes;
	request.tx_amplitude = tx_amplitude;
	request.tx_hs_equalizer = tx_hs_equalizer;
	request.rx_mode = rx_mode;
	request.rx_gear = rx_gear;
	request.rx_nlanes = rx_nlanes;
	request.flags = flags;
	request.quirks = cpu_to_le32(quirks);
	if (local)
		request.local_l2timerdata = *local;
	if (remote)
		request.remote_l2timerdata = *remote;

	ret = gb_operation_sync(svc->connection, GB_SVC_TYPE_INTF_SET_PWRM,
				&request, sizeof(request),
@@ -612,13 +602,7 @@ int gb_svc_intf_set_power_mode(struct gb_svc *svc, u8 intf_id, u8 hs_series,
	if (ret < 0)
		return ret;

	result_code = le16_to_cpu(response.result_code);
	if (result_code != GB_SVC_SETPWRM_PWR_LOCAL) {
		dev_err(&svc->dev, "set power mode = %d\n", result_code);
		return -EIO;
	}

	return 0;
	return le16_to_cpu(response.result_code);
}
EXPORT_SYMBOL_GPL(gb_svc_intf_set_power_mode);

@@ -942,11 +926,9 @@ static void gb_svc_process_hello_deferred(struct gb_operation *operation)
					GB_SVC_UNIPRO_HS_SERIES_A,
					GB_SVC_UNIPRO_SLOW_AUTO_MODE,
					2, 1,
					GB_SVC_SMALL_AMPLITUDE, GB_SVC_NO_DE_EMPHASIS,
					GB_SVC_UNIPRO_SLOW_AUTO_MODE,
					2, 1,
					0, 0,
					NULL, NULL);
					0, 0);

	if (ret)
		dev_warn(&svc->dev,
+1 −4
Original line number Diff line number Diff line
@@ -77,11 +77,8 @@ int gb_svc_dme_peer_set(struct gb_svc *svc, u8 intf_id, u16 attr, u16 selector,
			u32 value);
int gb_svc_intf_set_power_mode(struct gb_svc *svc, u8 intf_id, u8 hs_series,
			       u8 tx_mode, u8 tx_gear, u8 tx_nlanes,
			       u8 tx_amplitude, u8 tx_hs_equalizer,
			       u8 rx_mode, u8 rx_gear, u8 rx_nlanes,
			       u8 flags, u32 quirks,
			       struct gb_svc_l2_timer_cfg *local,
			       struct gb_svc_l2_timer_cfg *remote);
			       u8 flags, u32 quirks);
int gb_svc_ping(struct gb_svc *svc);
int gb_svc_watchdog_create(struct gb_svc *svc);
void gb_svc_watchdog_destroy(struct gb_svc *svc);