Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-elphel
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
linux-elphel
Commits
65f63268
Commit
65f63268
authored
Dec 14, 2013
by
Andrey Filippov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bug fixes/cleanup, tested actual operation including SS
parent
2466226c
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
250 additions
and
136 deletions
+250
-136
si5338.c
drivers/misc/si5338.c
+250
-136
No files found.
drivers/misc/si5338.c
View file @
65f63268
...
@@ -417,6 +417,7 @@ static const struct si5338_drv_t drv_configs []={
...
@@ -417,6 +417,7 @@ static const struct si5338_drv_t drv_configs []={
static
const
char
*
out_dis_states
[]
=
{
"dis_hi-z"
,
"dis_low"
,
"dis_high"
,
"dis_always_on"
,
NULL
};
static
const
char
*
out_dis_states
[]
=
{
"dis_hi-z"
,
"dis_low"
,
"dis_high"
,
"dis_always_on"
,
NULL
};
static
const
char
*
out_en_states
[]
=
{
"output_en"
,
"output_dis"
,
NULL
};
static
const
char
*
out_en_states
[]
=
{
"output_en"
,
"output_dis"
,
NULL
};
static
const
char
*
out_pwr_states
[]
=
{
"output_power_up"
,
"output_power_down"
,
NULL
};
static
const
char
*
out_pwr_states
[]
=
{
"output_power_up"
,
"output_power_down"
,
NULL
};
static
const
char
*
ms_pwr_states
[]
=
{
"ms_power_up"
,
"ms_power_down"
,
NULL
};
...
@@ -530,8 +531,10 @@ static ssize_t ms_p123_store(struct device *dev, struct device_attribute *attr,
...
@@ -530,8 +531,10 @@ static ssize_t ms_p123_store(struct device *dev, struct device_attribute *attr,
static
ssize_t
ms_abc_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
ms_abc_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
ms_abc_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
ssize_t
ms_abc_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
ssize_t
ms_powerdown_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
ms_pwr_states_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
ms_powerdown_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
ssize_t
ms_pwr_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
int
set_ms_pwr_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
);
static
int
get_ms_powerup_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
);
static
ssize_t
ms_reset_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
ssize_t
ms_reset_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
...
@@ -559,12 +562,15 @@ static ssize_t out_div_by_freq_store(struct device *dev, struct device_attribute
...
@@ -559,12 +562,15 @@ static ssize_t out_div_by_freq_store(struct device *dev, struct device_attribute
static
ssize_t
out_freq_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
out_freq_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
out_freq_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
ssize_t
out_freq_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
ssize_t
out_pwr_states_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
out_pwr_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
ssize_t
out_pwr_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
int
set_out_pwr_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
);
static
int
set_out_pwr_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
);
static
int
get_powerup_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
);
static
int
get_powerup_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
);
static
ssize_t
out_en_states_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
out_en_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
ssize_t
out_en_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
int
set_out_en_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
);
static
int
set_out_en_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
);
static
int
get_enabled_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
);
static
int
get_enabled_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
);
static
ssize_t
out_dis_states_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
out_dis_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
ssize_t
out_dis_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
);
static
int
set_out_dis_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
);
static
int
set_out_dis_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
);
static
int
get_disabled_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
);
static
int
get_disabled_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
);
...
@@ -594,6 +600,7 @@ static char * get_drv_txt(struct i2c_client *client, int chn);
...
@@ -594,6 +600,7 @@ static char * get_drv_txt(struct i2c_client *client, int chn);
#endif
#endif
static
int
make_config_out
(
struct
device
*
dev
);
static
int
make_config_out
(
struct
device
*
dev
);
static
ssize_t
status_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
output_description_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
output_description_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
output_route_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
static
ssize_t
output_route_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
);
...
@@ -642,6 +649,7 @@ static int get_out_frequency(struct i2c_client *client, u64* out_freq, int chn);
...
@@ -642,6 +649,7 @@ static int get_out_frequency(struct i2c_client *client, u64* out_freq, int chn);
static
int
get_out_source
(
struct
i2c_client
*
client
,
int
chn
);
static
int
get_out_source
(
struct
i2c_client
*
client
,
int
chn
);
static
int
set_out_source
(
struct
i2c_client
*
client
,
int
chn
,
int
src
);
static
int
set_out_source
(
struct
i2c_client
*
client
,
int
chn
,
int
src
);
static
int
get_out_ms
(
struct
i2c_client
*
client
,
int
chn
);
static
int
get_out_route
(
struct
i2c_client
*
client
,
char
*
buf
,
int
chn
);
static
int
get_out_route
(
struct
i2c_client
*
client
,
char
*
buf
,
int
chn
);
static
int
set_out_route
(
struct
i2c_client
*
client
,
const
char
*
route
,
int
chn
);
static
int
set_out_route
(
struct
i2c_client
*
client
,
const
char
*
route
,
int
chn
);
static
int
set_out_frequency_and_route
(
struct
i2c_client
*
client
,
u64
*
out_freq
,
int
chn
,
int
int_div
);
static
int
set_out_frequency_and_route
(
struct
i2c_client
*
client
,
u64
*
out_freq
,
int
chn
,
int
int_div
);
...
@@ -789,10 +797,9 @@ static DEVICE_ATTR(ms3_p123, SYSFS_PERMISSIONS, ms_p123_show, ms_p123_store);
...
@@ -789,10 +797,9 @@ static DEVICE_ATTR(ms3_p123, SYSFS_PERMISSIONS, ms_p123_show, ms_p123_store);
static
DEVICE_ATTR
(
ms3_abc
,
SYSFS_PERMISSIONS
,
ms_abc_show
,
ms_abc_store
);
static
DEVICE_ATTR
(
ms3_abc
,
SYSFS_PERMISSIONS
,
ms_abc_show
,
ms_abc_store
);
static
DEVICE_ATTR
(
msn_p123
,
SYSFS_PERMISSIONS
,
ms_p123_show
,
ms_p123_store
);
static
DEVICE_ATTR
(
msn_p123
,
SYSFS_PERMISSIONS
,
ms_p123_show
,
ms_p123_store
);
static
DEVICE_ATTR
(
msn_abc
,
SYSFS_PERMISSIONS
,
ms_abc_show
,
ms_abc_store
);
static
DEVICE_ATTR
(
msn_abc
,
SYSFS_PERMISSIONS
,
ms_abc_show
,
ms_abc_store
);
static
DEVICE_ATTR
(
ms0_powerdown
,
SYSFS_PERMISSIONS
,
ms_powerdown_show
,
ms_powerdown_store
);
static
DEVICE_ATTR
(
ms1_powerdown
,
SYSFS_PERMISSIONS
,
ms_powerdown_show
,
ms_powerdown_store
);
static
DEVICE_ATTR
(
ms_power_down
,
SYSFS_PERMISSIONS
,
ms_pwr_states_show
,
ms_pwr_states_store
);
static
DEVICE_ATTR
(
ms2_powerdown
,
SYSFS_PERMISSIONS
,
ms_powerdown_show
,
ms_powerdown_store
);
static
DEVICE_ATTR
(
ms_power_up
,
SYSFS_PERMISSIONS
,
ms_pwr_states_show
,
ms_pwr_states_store
);
static
DEVICE_ATTR
(
ms3_powerdown
,
SYSFS_PERMISSIONS
,
ms_powerdown_show
,
ms_powerdown_store
);
static
DEVICE_ATTR
(
ms_reset
,
SYSFS_PERMISSIONS
&
SYSFS_WRITEONLY
,
NULL
,
ms_reset_store
);
static
DEVICE_ATTR
(
ms_reset
,
SYSFS_PERMISSIONS
&
SYSFS_WRITEONLY
,
NULL
,
ms_reset_store
);
static
struct
attribute
*
multisynth_attrs
[]
=
{
static
struct
attribute
*
multisynth_attrs
[]
=
{
...
@@ -806,10 +813,8 @@ static struct attribute *multisynth_attrs[] = {
...
@@ -806,10 +813,8 @@ static struct attribute *multisynth_attrs[] = {
&
dev_attr_ms3_abc
.
attr
,
&
dev_attr_ms3_abc
.
attr
,
&
dev_attr_msn_p123
.
attr
,
&
dev_attr_msn_p123
.
attr
,
&
dev_attr_msn_abc
.
attr
,
&
dev_attr_msn_abc
.
attr
,
&
dev_attr_ms0_powerdown
.
attr
,
&
dev_attr_ms_power_down
.
attr
,
&
dev_attr_ms1_powerdown
.
attr
,
&
dev_attr_ms_power_up
.
attr
,
&
dev_attr_ms2_powerdown
.
attr
,
&
dev_attr_ms3_powerdown
.
attr
,
&
dev_attr_ms_reset
.
attr
,
&
dev_attr_ms_reset
.
attr
,
NULL
NULL
};
};
...
@@ -971,6 +976,9 @@ static const struct attribute_group dev_attr_output_group = {
...
@@ -971,6 +976,9 @@ static const struct attribute_group dev_attr_output_group = {
.
name
=
"output_clocks"
,
.
name
=
"output_clocks"
,
};
};
/* output drivers */
/* output drivers */
/* NOTE: state of the outputs changes with clock only, changing "dis_low" to "dis_high" does not work when disabled.
* Going through "dis_always_on" works
*/
#ifdef GENERATE_EXTRA
#ifdef GENERATE_EXTRA
static
DEVICE_ATTR
(
drv0_powerdown
,
SYSFS_PERMISSIONS
,
drv_powerdown_show
,
drv_powerdown_store
);
static
DEVICE_ATTR
(
drv0_powerdown
,
SYSFS_PERMISSIONS
,
drv_powerdown_show
,
drv_powerdown_store
);
static
DEVICE_ATTR
(
drv1_powerdown
,
SYSFS_PERMISSIONS
,
drv_powerdown_show
,
drv_powerdown_store
);
static
DEVICE_ATTR
(
drv1_powerdown
,
SYSFS_PERMISSIONS
,
drv_powerdown_show
,
drv_powerdown_store
);
...
@@ -1105,12 +1113,15 @@ static const struct attribute_group dev_attr_output_extra_group = {
...
@@ -1105,12 +1113,15 @@ static const struct attribute_group dev_attr_output_extra_group = {
/* root directory */
/* root directory */
static
DEVICE_ATTR
(
outputs
,
SYSFS_PERMISSIONS
&
SYSFS_READONLY
,
output_description_show
,
NULL
);
static
DEVICE_ATTR
(
outputs
,
SYSFS_PERMISSIONS
&
SYSFS_READONLY
,
output_description_show
,
NULL
);
static
DEVICE_ATTR
(
status
,
SYSFS_PERMISSIONS
&
SYSFS_READONLY
,
status_show
,
NULL
);
static
struct
attribute
*
root_dev_attrs
[]
=
{
static
struct
attribute
*
root_dev_attrs
[]
=
{
&
dev_attr_pre_init
.
attr
,
&
dev_attr_pre_init
.
attr
,
&
dev_attr_pre_init_clear
.
attr
,
&
dev_attr_pre_init_clear
.
attr
,
&
dev_attr_post_init
.
attr
,
&
dev_attr_post_init
.
attr
,
&
dev_attr_outputs
.
attr
,
&
dev_attr_outputs
.
attr
,
NULL
&
dev_attr_status
.
attr
,
NULL
};
};
static
const
struct
attribute_group
dev_attr_root_group
=
{
static
const
struct
attribute_group
dev_attr_root_group
=
{
.
attrs
=
root_dev_attrs
,
.
attrs
=
root_dev_attrs
,
...
@@ -1162,8 +1173,8 @@ static int make_config_out(struct device *dev)
...
@@ -1162,8 +1173,8 @@ static int make_config_out(struct device *dev)
/* add outputs disabled states (write only) */
/* add outputs disabled states (write only) */
for
(
iout
=
0
;
out_dis_states
[
iout
];
iout
++
)
{
for
(
iout
=
0
;
out_dis_states
[
iout
];
iout
++
)
{
dev_attrs
[
index
].
attr
.
name
=
out_dis_states
[
iout
];
dev_attrs
[
index
].
attr
.
name
=
out_dis_states
[
iout
];
dev_attrs
[
index
].
attr
.
mode
=
SYSFS_PERMISSIONS
&
SYSFS_WRITEONLY
;
dev_attrs
[
index
].
attr
.
mode
=
SYSFS_PERMISSIONS
;
dev_attrs
[
index
].
show
=
NULL
;
dev_attrs
[
index
].
show
=
out_dis_states_show
;
dev_attrs
[
index
].
store
=
out_dis_states_store
;
dev_attrs
[
index
].
store
=
out_dis_states_store
;
pattrs
[
index
]
=&
(
dev_attrs
[
index
].
attr
);
pattrs
[
index
]
=&
(
dev_attrs
[
index
].
attr
);
index
++
;
index
++
;
...
@@ -1171,8 +1182,8 @@ static int make_config_out(struct device *dev)
...
@@ -1171,8 +1182,8 @@ static int make_config_out(struct device *dev)
/* add outputs enable (write only) */
/* add outputs enable (write only) */
for
(
iout
=
0
;
out_en_states
[
iout
];
iout
++
)
{
for
(
iout
=
0
;
out_en_states
[
iout
];
iout
++
)
{
dev_attrs
[
index
].
attr
.
name
=
out_en_states
[
iout
];
dev_attrs
[
index
].
attr
.
name
=
out_en_states
[
iout
];
dev_attrs
[
index
].
attr
.
mode
=
SYSFS_PERMISSIONS
&
SYSFS_WRITEONLY
;
dev_attrs
[
index
].
attr
.
mode
=
SYSFS_PERMISSIONS
;
dev_attrs
[
index
].
show
=
NULL
;
dev_attrs
[
index
].
show
=
out_en_states_show
;
dev_attrs
[
index
].
store
=
out_en_states_store
;
dev_attrs
[
index
].
store
=
out_en_states_store
;
pattrs
[
index
]
=&
(
dev_attrs
[
index
].
attr
);
pattrs
[
index
]
=&
(
dev_attrs
[
index
].
attr
);
index
++
;
index
++
;
...
@@ -1180,14 +1191,13 @@ static int make_config_out(struct device *dev)
...
@@ -1180,14 +1191,13 @@ static int make_config_out(struct device *dev)
/* add outputs enable (write only) */
/* add outputs enable (write only) */
for
(
iout
=
0
;
out_pwr_states
[
iout
];
iout
++
)
{
for
(
iout
=
0
;
out_pwr_states
[
iout
];
iout
++
)
{
dev_attrs
[
index
].
attr
.
name
=
out_pwr_states
[
iout
];
dev_attrs
[
index
].
attr
.
name
=
out_pwr_states
[
iout
];
dev_attrs
[
index
].
attr
.
mode
=
SYSFS_PERMISSIONS
&
SYSFS_WRITEONLY
;
dev_attrs
[
index
].
attr
.
mode
=
SYSFS_PERMISSIONS
;
dev_attrs
[
index
].
show
=
NULL
;
dev_attrs
[
index
].
show
=
out_pwr_states_show
;
dev_attrs
[
index
].
store
=
out_pwr_states_store
;
dev_attrs
[
index
].
store
=
out_pwr_states_store
;
pattrs
[
index
]
=&
(
dev_attrs
[
index
].
attr
);
pattrs
[
index
]
=&
(
dev_attrs
[
index
].
attr
);
index
++
;
index
++
;
}
}
/* add outputs (readonly) */
/* add outputs (readonly) */
for
(
iout
=
0
;
out_names
[
iout
];
iout
++
)
{
for
(
iout
=
0
;
out_names
[
iout
];
iout
++
)
{
dev_attrs
[
index
].
attr
.
name
=
out_names
[
iout
];
dev_attrs
[
index
].
attr
.
name
=
out_names
[
iout
];
...
@@ -1212,10 +1222,19 @@ static int make_config_out(struct device *dev)
...
@@ -1212,10 +1222,19 @@ static int make_config_out(struct device *dev)
return
retval
;
return
retval
;
}
}
static
ssize_t
status_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
int
status
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
status
=
get_status
(
client
)))
<
0
)
return
status
;
return
sprintf
(
buf
,
"%d input clock: %s, feedback clock: %s, PLL lock: %s, calibration: %s
\n
"
,
status
,(
status
&
0x4
)
?
"LOST"
:
"OK"
,(
status
&
0x8
)
?
"LOST"
:
"OK"
,(
status
&
0x10
)
?
"LOST"
:
"OK"
,(
status
&
0x10
)
?
"IN PROGRESS"
:
"DONE"
);
}
static
ssize_t
output_description_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
output_description_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
i
,
i1
,
rc
,
len
=
0
,
show_number
;
int
i
,
i1
,
rc
,
len
=
0
,
show_number
,
ms
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
for
(
i
=
0
;
out_names
[
i
];
i
++
)
if
(
strcmp
(
attr
->
attr
.
name
,
out_names
[
i
])
==
0
)
break
;
for
(
i
=
0
;
out_names
[
i
];
i
++
)
if
(
strcmp
(
attr
->
attr
.
name
,
out_names
[
i
])
==
0
)
break
;
if
(
!
out_names
[
i
])
return
-
EINVAL
;
if
(
!
out_names
[
i
])
return
-
EINVAL
;
if
(
i
==
4
)
{
/* all outputs */
if
(
i
==
4
)
{
/* all outputs */
...
@@ -1249,7 +1268,16 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib
...
@@ -1249,7 +1268,16 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib
if
(((
rc
=
get_out_route
(
client
,
buf
,
i
)))
<
0
)
return
rc
;
if
(((
rc
=
get_out_route
(
client
,
buf
,
i
)))
<
0
)
return
rc
;
buf
+=
rc
;
buf
+=
rc
;
len
+=
rc
;
len
+=
rc
;
/* Show MSx power state only if it is used fro the output */
if
(((
ms
=
get_out_ms
(
client
,
i
)))
>=
0
){
rc
=
sprintf
(
buf
,
", "
);
buf
+=
rc
;
len
+=
rc
;
if
(((
rc
=
get_ms_powerup_state
(
dev
,
buf
,
i
)))
<
0
)
return
rc
;
buf
+=
rc
;
len
+=
rc
;
}
rc
=
sprintf
(
buf
,
", disabled state: "
);
rc
=
sprintf
(
buf
,
", disabled state: "
);
buf
+=
rc
;
buf
+=
rc
;
len
+=
rc
;
len
+=
rc
;
...
@@ -1270,8 +1298,7 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib
...
@@ -1270,8 +1298,7 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib
if
(((
rc
=
get_enabled_state
(
dev
,
buf
,
i
)))
<
0
)
return
rc
;
if
(((
rc
=
get_enabled_state
(
dev
,
buf
,
i
)))
<
0
)
return
rc
;
buf
+=
rc
;
buf
+=
rc
;
len
+=
rc
;
len
+=
rc
;
/* show spread spectum settings */
//show spread spectum settings
rc
=
sprintf
(
buf
,
", "
);
rc
=
sprintf
(
buf
,
", "
);
buf
+=
rc
;
buf
+=
rc
;
len
+=
rc
;
len
+=
rc
;
...
@@ -1289,7 +1316,7 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib
...
@@ -1289,7 +1316,7 @@ static ssize_t output_description_show (struct device *dev, struct device_attrib
static
ssize_t
output_route_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
output_route_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
chn
,
rc
,
len
=
0
;
int
chn
,
rc
,
len
=
0
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
if
(((
rc
=
get_out_route
(
client
,
buf
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
get_out_route
(
client
,
buf
,
chn
)))
<
0
)
return
rc
;
buf
+=
rc
;
buf
+=
rc
;
...
@@ -1303,7 +1330,7 @@ static ssize_t output_route_show(struct device *dev, struct device_attribute *at
...
@@ -1303,7 +1330,7 @@ static ssize_t output_route_show(struct device *dev, struct device_attribute *at
static
ssize_t
output_route_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
output_route_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
chn
,
rc
;
int
chn
,
rc
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
if
(((
rc
=
set_out_route
(
client
,
buf
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_out_route
(
client
,
buf
,
chn
)))
<
0
)
return
rc
;
return
count
;
return
count
;
...
@@ -1315,7 +1342,7 @@ static ssize_t output_route_store(struct device *dev, struct device_attribute *a
...
@@ -1315,7 +1342,7 @@ static ssize_t output_route_store(struct device *dev, struct device_attribute *a
static
int
get_output_description
(
struct
device
*
dev
,
char
*
buf
,
int
chn
)
static
int
get_output_description
(
struct
device
*
dev
,
char
*
buf
,
int
chn
)
{
{
int
drv_type
,
drv_vdd
,
drv_trim
,
drv_invert
,
i
;
int
drv_type
,
drv_vdd
,
drv_trim
,
drv_invert
,
i
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
i
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
i
;
if
(((
i
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
i
;
if
(((
drv_type
=
get_drv_type
(
client
,
chn
)))
<
0
)
return
drv_type
;
if
(((
drv_type
=
get_drv_type
(
client
,
chn
)))
<
0
)
return
drv_type
;
if
(((
drv_vdd
=
get_drv_vdd
(
client
,
chn
)))
<
0
)
return
drv_vdd
;
if
(((
drv_vdd
=
get_drv_vdd
(
client
,
chn
)))
<
0
)
return
drv_vdd
;
...
@@ -1336,7 +1363,7 @@ static int get_out_frequency_txt(struct device *dev, char *buf, int chn)
...
@@ -1336,7 +1363,7 @@ static int get_out_frequency_txt(struct device *dev, char *buf, int chn)
{
{
int
rc
;
int
rc
;
u64
out_freq
[
3
];
u64
out_freq
[
3
];
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
rc
=
get_out_frequency
(
client
,
out_freq
,
chn
)))
<
0
)
return
sprintf
(
buf
,
"Not set"
);
if
(((
rc
=
get_out_frequency
(
client
,
out_freq
,
chn
)))
<
0
)
return
sprintf
(
buf
,
"Not set"
);
if
(
out_freq
[
1
]
==
0
)
return
sprintf
(
buf
,
"%lld Hz"
,
out_freq
[
0
]);
if
(
out_freq
[
1
]
==
0
)
return
sprintf
(
buf
,
"%lld Hz"
,
out_freq
[
0
]);
return
sprintf
(
buf
,
"%lld-%lld/%lld Hz"
,
out_freq
[
0
],
out_freq
[
1
],
out_freq
[
2
]);
return
sprintf
(
buf
,
"%lld-%lld/%lld Hz"
,
out_freq
[
0
],
out_freq
[
1
],
out_freq
[
2
]);
...
@@ -1357,7 +1384,7 @@ static ssize_t output_config_store(struct device *dev, struct device_attribute *
...
@@ -1357,7 +1384,7 @@ static ssize_t output_config_store(struct device *dev, struct device_attribute *
static
int
configure_output_driver
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
)
static
int
configure_output_driver
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
)
{
{
int
i
,
rc
;
int
i
,
rc
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
dev_dbg
(
dev
,
"name=%s chn=%d"
,
name
,
chn
);
dev_dbg
(
dev
,
"name=%s chn=%d"
,
name
,
chn
);
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
...
@@ -1393,7 +1420,7 @@ static int si5338_sysfs_register(struct device *dev)
...
@@ -1393,7 +1420,7 @@ static int si5338_sysfs_register(struct device *dev)
static
ssize_t
invalidate_cache_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
invalidate_cache_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
invalidate_cache
(
client
);
invalidate_cache
(
client
);
return
count
;
return
count
;
}
}
...
@@ -1412,14 +1439,14 @@ static ssize_t raw_address_store(struct device *dev, struct device_attribute *at
...
@@ -1412,14 +1439,14 @@ static ssize_t raw_address_store(struct device *dev, struct device_attribute *at
static
ssize_t
raw_data_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
raw_data_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
int
data
=
read_reg
(
client
,
clientdata
->
reg_addr
);
int
data
=
read_reg
(
client
,
clientdata
->
reg_addr
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
}
}
static
ssize_t
raw_data_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
raw_data_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
int
data
;
int
data
;
sscanf
(
buf
,
"%du"
,
&
data
);
sscanf
(
buf
,
"%du"
,
&
data
);
...
@@ -1441,14 +1468,14 @@ static ssize_t raw_hex_address_store(struct device *dev, struct device_attribute
...
@@ -1441,14 +1468,14 @@ static ssize_t raw_hex_address_store(struct device *dev, struct device_attribute
static
ssize_t
raw_hex_data_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
raw_hex_data_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
int
data
=
read_reg
(
client
,
clientdata
->
reg_addr
);
int
data
=
read_reg
(
client
,
clientdata
->
reg_addr
);
return
sprintf
(
buf
,
"0x%02x
\n
"
,
data
);
return
sprintf
(
buf
,
"0x%02x
\n
"
,
data
);
}
}
static
ssize_t
raw_hex_data_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
raw_hex_data_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
int
data
;
int
data
;
sscanf
(
buf
,
"%x"
,
&
data
);
sscanf
(
buf
,
"%x"
,
&
data
);
...
@@ -1459,7 +1486,7 @@ static ssize_t raw_hex_data_store(struct device *dev, struct device_attribute *a
...
@@ -1459,7 +1486,7 @@ static ssize_t raw_hex_data_store(struct device *dev, struct device_attribute *a
static
ssize_t
raw_hex_all_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
raw_hex_all_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
low_addr
=
0
,
reg
,
data
,
rc
,
len
=
0
,
count
=
PAGE_SIZE
;
int
low_addr
=
0
,
reg
,
data
,
rc
,
len
=
0
,
count
=
PAGE_SIZE
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
// struct si5338_data_t *clientdata= i2c_get_clientdata(client);
// struct si5338_data_t *clientdata= i2c_get_clientdata(client);
for
(
reg
=
low_addr
;
reg
<=
LAST_REG
;
reg
++
)
if
(
count
>
10
){
for
(
reg
=
low_addr
;
reg
<=
LAST_REG
;
reg
++
)
if
(
count
>
10
){
if
((
reg
&
0xf
)
==
0
){
if
((
reg
&
0xf
)
==
0
){
...
@@ -1498,7 +1525,7 @@ static ssize_t raw_hex_adwe_show (struct device *dev, struct device_attribute *a
...
@@ -1498,7 +1525,7 @@ static ssize_t raw_hex_adwe_show (struct device *dev, struct device_attribute *a
static
ssize_t
raw_hex_adwe_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
raw_hex_adwe_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
const
char
hex_digits
[]
=
"0123456789abcdefABCDEF"
;
const
char
hex_digits
[]
=
"0123456789abcdefABCDEF"
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
int
adwe
,
rc
=
0
;
int
adwe
,
rc
=
0
;
int
left
=
count
,
num_bytes
;
int
left
=
count
,
num_bytes
;
...
@@ -1524,7 +1551,7 @@ static ssize_t raw_hex_adwe_store(struct device *dev, struct device_attribute *a
...
@@ -1524,7 +1551,7 @@ static ssize_t raw_hex_adwe_store(struct device *dev, struct device_attribute *a
static
ssize_t
input_xtal_freq_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
input_xtal_freq_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
const
char
*
txt
[]
=
{
"8MHz..11Mhz"
,
"11MHz..19Mhz"
,
"19MHz..26Mhz"
,
"26MHz..30Mhz"
};
const
char
*
txt
[]
=
{
"8MHz..11Mhz"
,
"11MHz..19Mhz"
,
"19MHz..26Mhz"
,
"26MHz..30Mhz"
};
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
data
=
read_field
(
client
,
AWE_XTAL_FREQ
);
int
data
=
read_field
(
client
,
AWE_XTAL_FREQ
);
return
sprintf
(
buf
,
"%s
\n
"
,(
data
>=
0
)
?
txt
[
data
]
:
"error"
);
return
sprintf
(
buf
,
"%s
\n
"
,(
data
>=
0
)
?
txt
[
data
]
:
"error"
);
}
}
...
@@ -1532,28 +1559,28 @@ static ssize_t input_xtal_freq_txt_show (struct device *dev, struct device_attri
...
@@ -1532,28 +1559,28 @@ static ssize_t input_xtal_freq_txt_show (struct device *dev, struct device_attri
static
ssize_t
in_frequency12_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
in_frequency12_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
s64
freq
=
get_in_frequency
(
client
,
0
);
s64
freq
=
get_in_frequency
(
client
,
0
);
if
(
freq
<
0
)
return
-
EINVAL
;
if
(
freq
<
0
)
return
-
EINVAL
;
return
sprintf
(
buf
,
"%lld
\n
"
,
freq
);
return
sprintf
(
buf
,
"%lld
\n
"
,
freq
);
}
}
static
ssize_t
in_frequency3_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
in_frequency3_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
s64
freq
=
get_in_frequency
(
client
,
1
);
s64
freq
=
get_in_frequency
(
client
,
1
);
if
(
freq
<
0
)
return
-
EINVAL
;
if
(
freq
<
0
)
return
-
EINVAL
;
return
sprintf
(
buf
,
"%lld
\n
"
,
freq
);
return
sprintf
(
buf
,
"%lld
\n
"
,
freq
);
}
}
static
ssize_t
in_frequency4_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
in_frequency4_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
s64
freq
=
get_in_frequency
(
client
,
2
);
s64
freq
=
get_in_frequency
(
client
,
2
);
if
(
freq
<
0
)
return
-
EINVAL
;
if
(
freq
<
0
)
return
-
EINVAL
;
return
sprintf
(
buf
,
"%lld
\n
"
,
freq
);
return
sprintf
(
buf
,
"%lld
\n
"
,
freq
);
}
}
static
ssize_t
in_frequency56_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
in_frequency56_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
s64
freq
=
get_in_frequency
(
client
,
3
);
s64
freq
=
get_in_frequency
(
client
,
3
);
if
(
freq
<
0
)
return
-
EINVAL
;
if
(
freq
<
0
)
return
-
EINVAL
;
return
sprintf
(
buf
,
"%lld
\n
"
,
freq
);
return
sprintf
(
buf
,
"%lld
\n
"
,
freq
);
...
@@ -1562,7 +1589,7 @@ static ssize_t in_frequency12_store(struct device *dev, struct device_attribute
...
@@ -1562,7 +1589,7 @@ static ssize_t in_frequency12_store(struct device *dev, struct device_attribute
{
{
int
rc
;
int
rc
;
u64
freq
;
u64
freq
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
0
)))
<
0
)
return
rc
;
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
0
)))
<
0
)
return
rc
;
return
count
;
return
count
;
...
@@ -1571,7 +1598,7 @@ static ssize_t in_frequency12xo_store(struct device *dev, struct device_attribut
...
@@ -1571,7 +1598,7 @@ static ssize_t in_frequency12xo_store(struct device *dev, struct device_attribut
{
{
int
rc
;
int
rc
;
u64
freq
;
u64
freq
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
4
)))
<
0
)
return
rc
;
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
4
)))
<
0
)
return
rc
;
return
count
;
return
count
;
...
@@ -1580,7 +1607,7 @@ static ssize_t in_frequency3_store(struct device *dev, struct device_attribute *
...
@@ -1580,7 +1607,7 @@ static ssize_t in_frequency3_store(struct device *dev, struct device_attribute *
{
{
int
rc
;
int
rc
;
u64
freq
;
u64
freq
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
1
)))
<
0
)
return
rc
;
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
1
)))
<
0
)
return
rc
;
return
count
;
return
count
;
...
@@ -1589,7 +1616,7 @@ static ssize_t in_frequency4_store(struct device *dev, struct device_attribute *
...
@@ -1589,7 +1616,7 @@ static ssize_t in_frequency4_store(struct device *dev, struct device_attribute *
{
{
int
rc
;
int
rc
;
u64
freq
;
u64
freq
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
2
)))
<
0
)
return
rc
;
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
2
)))
<
0
)
return
rc
;
return
count
;
return
count
;
...
@@ -1598,7 +1625,7 @@ static ssize_t in_frequency56_store(struct device *dev, struct device_attribute
...
@@ -1598,7 +1625,7 @@ static ssize_t in_frequency56_store(struct device *dev, struct device_attribute
{
{
int
rc
;
int
rc
;
u64
freq
;
u64
freq
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
sscanf
(
buf
,
"%lld"
,
&
freq
);
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
3
)))
<
0
)
return
rc
;
if
(((
rc
=
set_in_frequency
(
client
,
freq
,
3
)))
<
0
)
return
rc
;
return
count
;
return
count
;
...
@@ -1607,7 +1634,7 @@ static ssize_t in_frequency56_store(struct device *dev, struct device_attribute
...
@@ -1607,7 +1634,7 @@ static ssize_t in_frequency56_store(struct device *dev, struct device_attribute
static
ssize_t
in_p12_div_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
in_p12_div_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
div
,
chn
;
int
div
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
)
+
1
;
chn
=
get_chn_from_name
(
attr
->
attr
.
name
)
+
1
;
if
(((
div
=
get_in_pdiv
(
client
,
chn
)))
<
0
)
return
div
;
if
(((
div
=
get_in_pdiv
(
client
,
chn
)))
<
0
)
return
div
;
return
sprintf
(
buf
,
"%d
\n
"
,
div
);
return
sprintf
(
buf
,
"%d
\n
"
,
div
);
...
@@ -1615,7 +1642,7 @@ static ssize_t in_p12_div_show (struct device *dev, struct device_attribute *att
...
@@ -1615,7 +1642,7 @@ static ssize_t in_p12_div_show (struct device *dev, struct device_attribute *att
static
ssize_t
in_p12_div_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
in_p12_div_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
div
,
rc
,
chn
;
int
div
,
rc
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
)
+
1
;
chn
=
get_chn_from_name
(
attr
->
attr
.
name
)
+
1
;
sscanf
(
buf
,
"%d"
,
&
div
);
sscanf
(
buf
,
"%d"
,
&
div
);
if
(((
rc
=
set_in_pdiv
(
client
,
div
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_in_pdiv
(
client
,
div
,
chn
)))
<
0
)
return
rc
;
...
@@ -1625,13 +1652,13 @@ static ssize_t in_p12_div_store(struct device *dev, struct device_attribute *att
...
@@ -1625,13 +1652,13 @@ static ssize_t in_p12_div_store(struct device *dev, struct device_attribute *att
static
ssize_t
in_mux_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
in_mux_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
;
int
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_in_mux
(
client
)))
<
0
)
return
data
;
if
(((
data
=
get_in_mux
(
client
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
}
}
static
ssize_t
in_mux_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
in_mux_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
data
,
rc
;
int
data
,
rc
;
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_in_mux
(
client
,
data
)))
<
0
)
return
rc
;
if
(((
rc
=
set_in_mux
(
client
,
data
)))
<
0
)
return
rc
;
...
@@ -1641,20 +1668,20 @@ static ssize_t in_mux_txt_show (struct device *dev, struct device_attribute *att
...
@@ -1641,20 +1668,20 @@ static ssize_t in_mux_txt_show (struct device *dev, struct device_attribute *att
{
{
const
char
*
mux_txt
[]
=
{
"IN1/IN2(diff)"
,
"IN3(single ended)"
,
"IN1/IN2(xtal)"
};
const
char
*
mux_txt
[]
=
{
"IN1/IN2(diff)"
,
"IN3(single ended)"
,
"IN1/IN2(xtal)"
};
int
data
;
int
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_in_mux
(
client
)))
<
0
)
return
data
;
if
(((
data
=
get_in_mux
(
client
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%s
\n
"
,
mux_txt
[
data
]);
return
sprintf
(
buf
,
"%s
\n
"
,
mux_txt
[
data
]);
}
}
static
ssize_t
fb_mux_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
fb_mux_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
;
int
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_fb_mux
(
client
)))
<
0
)
return
data
;
if
(((
data
=
get_fb_mux
(
client
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
}
}
static
ssize_t
fb_mux_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
fb_mux_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
data
,
rc
;
int
data
,
rc
;
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_fb_mux
(
client
,
data
)))
<
0
)
return
rc
;
if
(((
rc
=
set_fb_mux
(
client
,
data
)))
<
0
)
return
rc
;
...
@@ -1664,7 +1691,7 @@ static ssize_t fb_mux_txt_show (struct device *dev, struct device_attribute *att
...
@@ -1664,7 +1691,7 @@ static ssize_t fb_mux_txt_show (struct device *dev, struct device_attribute *att
{
{
const
char
*
mux_fb_txt
[]
=
{
"IN5/IN6(diff)"
,
"IN4(single ended)"
,
"No clock"
};
const
char
*
mux_fb_txt
[]
=
{
"IN5/IN6(diff)"
,
"IN4(single ended)"
,
"No clock"
};
int
data
;
int
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_fb_mux
(
client
)))
<
0
)
return
data
;
if
(((
data
=
get_fb_mux
(
client
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%s
\n
"
,
mux_fb_txt
[
data
]);
return
sprintf
(
buf
,
"%s
\n
"
,
mux_fb_txt
[
data
]);
}
}
...
@@ -1672,13 +1699,13 @@ static ssize_t fb_mux_txt_show (struct device *dev, struct device_attribute *att
...
@@ -1672,13 +1699,13 @@ static ssize_t fb_mux_txt_show (struct device *dev, struct device_attribute *att
static
ssize_t
in_pfd_ref_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
in_pfd_ref_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
;
int
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_in_pfd_ref_fb
(
client
,
0
)))
<
0
)
return
data
;
if
(((
data
=
get_in_pfd_ref_fb
(
client
,
0
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
}
}
static
ssize_t
in_pfd_ref_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
in_pfd_ref_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
data
,
rc
;
int
data
,
rc
;
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_in_pfd_ref_fb
(
client
,
data
,
0
)))
<
0
)
return
rc
;
if
(((
rc
=
set_in_pfd_ref_fb
(
client
,
data
,
0
)))
<
0
)
return
rc
;
...
@@ -1688,7 +1715,7 @@ static ssize_t in_pfd_ref_txt_show (struct device *dev, struct device_attribute
...
@@ -1688,7 +1715,7 @@ static ssize_t in_pfd_ref_txt_show (struct device *dev, struct device_attribute
{
{
const
char
*
pfd_ref_txt
[]
=
{
"p1div_in(refclk)"
,
"p2div_in(fbclk)"
,
"p1div_out(refclk)"
,
"p2div_out(fbclk)"
,
"xoclk"
,
"noclk"
};
const
char
*
pfd_ref_txt
[]
=
{
"p1div_in(refclk)"
,
"p2div_in(fbclk)"
,
"p1div_out(refclk)"
,
"p2div_out(fbclk)"
,
"xoclk"
,
"noclk"
};
int
data
;
int
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_in_pfd_ref_fb
(
client
,
0
)))
<
0
)
return
data
;
if
(((
data
=
get_in_pfd_ref_fb
(
client
,
0
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%s
\n
"
,
pfd_ref_txt
[
data
]);
return
sprintf
(
buf
,
"%s
\n
"
,
pfd_ref_txt
[
data
]);
}
}
...
@@ -1696,13 +1723,13 @@ static ssize_t in_pfd_ref_txt_show (struct device *dev, struct device_attribute
...
@@ -1696,13 +1723,13 @@ static ssize_t in_pfd_ref_txt_show (struct device *dev, struct device_attribute
static
ssize_t
fb_external_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
fb_external_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
;
int
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_fb_external
(
client
)))
<
0
)
return
data
;
if
(((
data
=
get_fb_external
(
client
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
}
}
static
ssize_t
fb_external_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
fb_external_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
data
,
rc
;
int
data
,
rc
;
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_fb_external
(
client
,
data
)))
<
0
)
return
rc
;
if
(((
rc
=
set_fb_external
(
client
,
data
)))
<
0
)
return
rc
;
...
@@ -1712,13 +1739,13 @@ static ssize_t fb_external_store(struct device *dev, struct device_attribute *at
...
@@ -1712,13 +1739,13 @@ static ssize_t fb_external_store(struct device *dev, struct device_attribute *at
static
ssize_t
in_pfd_fb_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
in_pfd_fb_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
;
int
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_in_pfd_ref_fb
(
client
,
1
)))
<
0
)
return
data
;
if
(((
data
=
get_in_pfd_ref_fb
(
client
,
1
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
}
}
static
ssize_t
in_pfd_fb_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
in_pfd_fb_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
data
,
rc
;
int
data
,
rc
;
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_in_pfd_ref_fb
(
client
,
data
,
1
)))
<
0
)
return
rc
;
if
(((
rc
=
set_in_pfd_ref_fb
(
client
,
data
,
1
)))
<
0
)
return
rc
;
...
@@ -1728,21 +1755,21 @@ static ssize_t in_pfd_fb_txt_show (struct device *dev, struct device_attribute *
...
@@ -1728,21 +1755,21 @@ static ssize_t in_pfd_fb_txt_show (struct device *dev, struct device_attribute *
{
{
const
char
*
pfd_fb_txt
[]
=
{
"p2div_in(fbclk)"
,
"p1div_in(refclk)"
,
"p2div_out(fbclk)"
,
"p1div_out(refclk)"
,
"reserved"
,
"noclk"
};
const
char
*
pfd_fb_txt
[]
=
{
"p2div_in(fbclk)"
,
"p1div_in(refclk)"
,
"p2div_out(fbclk)"
,
"p1div_out(refclk)"
,
"reserved"
,
"noclk"
};
int
data
;
int
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_in_pfd_ref_fb
(
client
,
1
)))
<
0
)
return
data
;
if
(((
data
=
get_in_pfd_ref_fb
(
client
,
1
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%s
\n
"
,
pfd_fb_txt
[
data
]);
return
sprintf
(
buf
,
"%s
\n
"
,
pfd_fb_txt
[
data
]);
}
}
static
ssize_t
pll_ref_frequency_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
pll_ref_frequency_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
s64
pll_in_freq
=
get_pll_in_frequency
(
client
);
s64
pll_in_freq
=
get_pll_in_frequency
(
client
);
if
(
pll_in_freq
<
0
)
return
(
int
)
pll_in_freq
;
if
(
pll_in_freq
<
0
)
return
(
int
)
pll_in_freq
;
return
sprintf
(
buf
,
"%lld
\n
"
,
pll_in_freq
);
return
sprintf
(
buf
,
"%lld
\n
"
,
pll_in_freq
);
}
}
static
ssize_t
pll_fb_frequency_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
pll_fb_frequency_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
s64
pll_fb_freq
=
get_pll_fb_frequency
(
client
);
s64
pll_fb_freq
=
get_pll_fb_frequency
(
client
);
if
(
pll_fb_freq
<
0
)
return
(
int
)
pll_fb_freq
;
if
(
pll_fb_freq
<
0
)
return
(
int
)
pll_fb_freq
;
return
sprintf
(
buf
,
"%lld
\n
"
,
pll_fb_freq
);
return
sprintf
(
buf
,
"%lld
\n
"
,
pll_fb_freq
);
...
@@ -1751,7 +1778,7 @@ static ssize_t ms_p123_show(struct device *dev, struct device_attribute *attr, c
...
@@ -1751,7 +1778,7 @@ static ssize_t ms_p123_show(struct device *dev, struct device_attribute *attr, c
{
{
int
rc
,
chn
;
int
rc
,
chn
;
u32
p123
[
3
];
u32
p123
[
3
];
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(
attr
->
attr
.
name
[
2
]
==
'n'
)
chn
=
4
;
/* exception for msn */
if
(
attr
->
attr
.
name
[
2
]
==
'n'
)
chn
=
4
;
/* exception for msn */
if
(((
rc
=
get_ms_p123
(
client
,
p123
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
get_ms_p123
(
client
,
p123
,
chn
)))
<
0
)
return
rc
;
...
@@ -1763,7 +1790,7 @@ static ssize_t ms_p123_store(struct device *dev, struct device_attribute *attr,
...
@@ -1763,7 +1790,7 @@ static ssize_t ms_p123_store(struct device *dev, struct device_attribute *attr,
int
rc
,
chn
;
int
rc
,
chn
;
u32
p123
[
3
];
u32
p123
[
3
];
int
num_items
;
int
num_items
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(
attr
->
attr
.
name
[
2
]
==
'n'
)
chn
=
4
;
/* exception for msn */
if
(
attr
->
attr
.
name
[
2
]
==
'n'
)
chn
=
4
;
/* exception for msn */
num_items
=
sscanf
(
buf
,
"%u %u %u"
,
&
p123
[
0
],
&
p123
[
1
],
&
p123
[
2
]);
num_items
=
sscanf
(
buf
,
"%u %u %u"
,
&
p123
[
0
],
&
p123
[
1
],
&
p123
[
2
]);
...
@@ -1782,7 +1809,7 @@ static ssize_t ms_abc_show(struct device *dev, struct device_attribute *attr, ch
...
@@ -1782,7 +1809,7 @@ static ssize_t ms_abc_show(struct device *dev, struct device_attribute *attr, ch
int
rc
,
chn
;
int
rc
,
chn
;
u32
p123
[
3
];
u32
p123
[
3
];
u64
ms
[
3
];
u64
ms
[
3
];
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(
chn
<
0
)
chn
=
4
;
/* exception for msn - should have no digits*/
if
(
chn
<
0
)
chn
=
4
;
/* exception for msn - should have no digits*/
if
(((
rc
=
get_ms_p123
(
client
,
p123
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
get_ms_p123
(
client
,
p123
,
chn
)))
<
0
)
return
rc
;
...
@@ -1795,7 +1822,7 @@ static ssize_t ms_abc_store(struct device *dev, struct device_attribute *attr, c
...
@@ -1795,7 +1822,7 @@ static ssize_t ms_abc_store(struct device *dev, struct device_attribute *attr, c
u32
p123
[
3
];
u32
p123
[
3
];
u64
ms
[
3
];
u64
ms
[
3
];
int
num_items
;
int
num_items
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(
chn
<
0
)
chn
=
4
;
/* exception for msn - should have no digits*/
if
(
chn
<
0
)
chn
=
4
;
/* exception for msn - should have no digits*/
num_items
=
sscanf
(
buf
,
"%lld %lld %lld"
,
&
ms
[
0
],
&
ms
[
1
],
&
ms
[
2
]);
num_items
=
sscanf
(
buf
,
"%lld %lld %lld"
,
&
ms
[
0
],
&
ms
[
1
],
&
ms
[
2
]);
...
@@ -1813,27 +1840,58 @@ static ssize_t ms_abc_store(struct device *dev, struct device_attribute *attr, c
...
@@ -1813,27 +1840,58 @@ static ssize_t ms_abc_store(struct device *dev, struct device_attribute *attr, c
return
count
;
return
count
;
}
}
static
ssize_t
ms_p
owerdown_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
ms_p
wr_states_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
chn
,
i
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
char
*
cp
=
buf
;
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
data
=
get_ms_powerdown
(
client
,
chn
)))
<
0
)
return
data
;
for
(
chn
=
0
;
chn
<
4
;
chn
++
){
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
for
(
i
=
0
;
ms_pwr_states
[
i
];
i
++
)
if
(
strcmp
(
attr
->
attr
.
name
,
ms_pwr_states
[
i
])
==
0
)
{
if
(
i
==
get_ms_powerdown
(
client
,
chn
)){
buf
+=
sprintf
(
buf
,
" %d"
,
chn
);
break
;
}
}
}
buf
+=
sprintf
(
buf
,
"
\n
"
);
return
buf
-
cp
;
}
}
static
ssize_t
ms_powerdown_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
ms_pwr_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
data
,
rc
,
chn
;
int
chn
,
num_bytes
,
rc
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
while
((
rc
=
sscanf
(
buf
,
"%d%n"
,
&
chn
,
&
num_bytes
))){
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
dev_dbg
(
dev
,
"buf=%s rc==%d chn=%d num_bytes=%d"
,
buf
,
rc
,
chn
,
num_bytes
);
sscanf
(
buf
,
"%d"
,
&
data
);
buf
+=
num_bytes
;
if
(((
rc
=
set_ms_powerdown
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_ms_pwr_states
(
dev
,
attr
->
attr
.
name
,
chn
)))
<
0
)
return
rc
;
}
return
count
;
return
count
;
}
}
static
int
set_ms_pwr_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
)
{
int
i
,
rc
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
dev_dbg
(
dev
,
"name=%s chn=%d"
,
name
,
chn
);
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
for
(
i
=
0
;
ms_pwr_states
[
i
];
i
++
)
if
(
strcmp
(
name
,
ms_pwr_states
[
i
])
==
0
)
{
if
(((
rc
=
set_ms_powerdown
(
client
,
i
,
chn
)))
<
0
)
return
rc
;
return
0
;
}
return
-
EINVAL
;
}
static
int
get_ms_powerup_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
)
{
int
index
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
index
=
get_ms_powerdown
(
client
,
chn
)))
<
0
)
return
index
;
return
sprintf
(
buf
,
ms_pwr_states
[
index
]);
}
static
ssize_t
ms_reset_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
ms_reset_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
reset_ms
(
client
,
10
);
reset_ms
(
client
,
10
);
return
count
;
return
count
;
}
}
...
@@ -1841,7 +1899,7 @@ static ssize_t ms_reset_store(struct device *dev, struct device_attribute *attr,
...
@@ -1841,7 +1899,7 @@ static ssize_t ms_reset_store(struct device *dev, struct device_attribute *attr,
static
ssize_t
ss_change_freq_mode_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
ss_change_freq_mode_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
mode
;
int
mode
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
mode
=
clientdata
->
ss_on_freq_change
;
mode
=
clientdata
->
ss_on_freq_change
;
switch
(
mode
)
{
switch
(
mode
)
{
...
@@ -1856,7 +1914,7 @@ static ssize_t ss_change_freq_mode_show(struct device *dev, struct device_attrib
...
@@ -1856,7 +1914,7 @@ static ssize_t ss_change_freq_mode_show(struct device *dev, struct device_attrib
static
ssize_t
ss_change_freq_mode_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
ss_change_freq_mode_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
num_items
,
mode
;
int
num_items
,
mode
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
struct
si5338_data_t
*
clientdata
=
i2c_get_clientdata
(
client
);
num_items
=
sscanf
(
buf
,
"%d"
,
&
mode
);
num_items
=
sscanf
(
buf
,
"%d"
,
&
mode
);
if
(
num_items
&&
(
mode
>=
0
)
&&
(
mode
<=
3
)){
if
(
num_items
&&
(
mode
>=
0
)
&&
(
mode
<=
3
)){
...
@@ -1879,13 +1937,13 @@ static ssize_t ss_vals_store(struct device *dev, struct device_attribute *attr,
...
@@ -1879,13 +1937,13 @@ static ssize_t ss_vals_store(struct device *dev, struct device_attribute *attr,
{
{
int
chn
,
rc
,
state
,
num_items
;
int
chn
,
rc
,
state
,
num_items
;
u32
rate
,
amp
;
u32
rate
,
amp
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
chn
=
get_chn_from_name
(
attr
->
attr
.
name
)))
<
0
)
return
chn
;
if
(((
chn
=
get_chn_from_name
(
attr
->
attr
.
name
)))
<
0
)
return
chn
;
/* get current values */
/* get current values */
if
(((
state
=
get_ss_state
(
client
,
chn
)))
<
0
)
return
state
;
if
(((
state
=
get_ss_state
(
client
,
chn
)))
<
0
)
return
state
;
if
(((
rate
=
get_ss_down_rate
(
client
,
chn
)))
<
0
)
return
rate
;
if
(((
rate
=
get_ss_down_rate
(
client
,
chn
)))
<
0
)
return
rate
;
if
(((
amp
=
get_ss_down_amplitude
(
client
,
chn
)))
<
0
)
return
amp
;
if
(((
amp
=
get_ss_down_amplitude
(
client
,
chn
)))
<
0
)
return
amp
;
num_items
=
sscanf
(
buf
,
"%d %d %d"
,
&
state
,
&
rate
,
&
amp
);
num_items
=
sscanf
(
buf
,
"%d %d %d"
,
&
state
,
&
amp
,
&
rate
);
if
(
num_items
>
1
){
if
(
num_items
>
1
){
if
(((
rc
=
store_ss_down_parameters
(
client
,
rate
,
amp
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
store_ss_down_parameters
(
client
,
rate
,
amp
,
chn
)))
<
0
)
return
rc
;
}
}
...
@@ -1910,7 +1968,7 @@ static ssize_t ss_regs_hex_show(struct device *dev, struct device_attribute *att
...
@@ -1910,7 +1968,7 @@ static ssize_t ss_regs_hex_show(struct device *dev, struct device_attribute *att
int
chn
,
rc
;
int
chn
,
rc
;
u32
regs
[
7
];
u32
regs
[
7
];
u32
*
updown_reg
,
*
up_regs
,
*
down_regs
;
u32
*
updown_reg
,
*
up_regs
,
*
down_regs
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
updown_reg
=&
regs
[
0
];
updown_reg
=&
regs
[
0
];
down_regs
=&
regs
[
1
];
down_regs
=&
regs
[
1
];
up_regs
=&
regs
[
4
];
up_regs
=&
regs
[
4
];
...
@@ -1926,7 +1984,7 @@ static ssize_t ss_regs_hex_store(struct device *dev, struct device_attribute *at
...
@@ -1926,7 +1984,7 @@ static ssize_t ss_regs_hex_store(struct device *dev, struct device_attribute *at
int
chn
,
rc
,
num_items
;
int
chn
,
rc
,
num_items
;
u32
regs
[
7
];
u32
regs
[
7
];
u32
*
updown_reg
,
*
up_regs
,
*
down_regs
;
u32
*
updown_reg
,
*
up_regs
,
*
down_regs
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
updown_reg
=&
regs
[
0
];
updown_reg
=&
regs
[
0
];
down_regs
=&
regs
[
1
];
down_regs
=&
regs
[
1
];
up_regs
=&
regs
[
4
];
up_regs
=&
regs
[
4
];
...
@@ -1943,16 +2001,10 @@ static ssize_t ss_regs_hex_store(struct device *dev, struct device_attribute *at
...
@@ -1943,16 +2001,10 @@ static ssize_t ss_regs_hex_store(struct device *dev, struct device_attribute *at
return
count
;
return
count
;
}
}
static
ssize_t
pre_init_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
pre_init_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
rc
,
clear_all
;
int
rc
,
clear_all
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
clear_all
=
strstr
(
attr
->
attr
.
name
,
"clear"
)
?
1
:
0
;
clear_all
=
strstr
(
attr
->
attr
.
name
,
"clear"
)
?
1
:
0
;
if
(((
rc
=
pre_init
(
client
,
clear_all
)))
<
0
)
return
rc
;
if
(((
rc
=
pre_init
(
client
,
clear_all
)))
<
0
)
return
rc
;
return
count
;
return
count
;
...
@@ -1960,7 +2012,7 @@ static ssize_t pre_init_store(struct device *dev, struct device_attribute *attr,
...
@@ -1960,7 +2012,7 @@ static ssize_t pre_init_store(struct device *dev, struct device_attribute *attr,
static
ssize_t
post_init_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
post_init_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
rc
,
timeout
=
0
;
int
rc
,
timeout
=
0
;
sscanf
(
buf
,
"%d"
,
&
timeout
);
sscanf
(
buf
,
"%d"
,
&
timeout
);
if
(
timeout
<=
0
)
timeout
=
INIT_TIMEOUT
;
if
(
timeout
<=
0
)
timeout
=
INIT_TIMEOUT
;
...
@@ -1972,7 +2024,7 @@ static ssize_t pll_freq_show(struct device *dev, struct device_attribute *attr,
...
@@ -1972,7 +2024,7 @@ static ssize_t pll_freq_show(struct device *dev, struct device_attribute *attr,
{
{
int
rc
;
int
rc
;
u64
pll_freq
[
3
];
u64
pll_freq
[
3
];
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
rc
=
get_pll_freq
(
client
,
pll_freq
)))
<
0
)
return
rc
;
if
(((
rc
=
get_pll_freq
(
client
,
pll_freq
)))
<
0
)
return
rc
;
return
sprintf
(
buf
,
"%lld %lld %lld
\n
"
,
pll_freq
[
0
],
pll_freq
[
1
],
pll_freq
[
2
]);
return
sprintf
(
buf
,
"%lld %lld %lld
\n
"
,
pll_freq
[
0
],
pll_freq
[
1
],
pll_freq
[
2
]);
...
@@ -1980,7 +2032,7 @@ static ssize_t pll_freq_show(struct device *dev, struct device_attribute *attr,
...
@@ -1980,7 +2032,7 @@ static ssize_t pll_freq_show(struct device *dev, struct device_attribute *attr,
static
ssize_t
pll_freq_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
pll_freq_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
rc
,
int_div
,
by_out
;
int
rc
,
int_div
,
by_out
;
u64
freq
[
3
];
u64
freq
[
3
];
int
num_items
;
int
num_items
;
...
@@ -2007,7 +2059,7 @@ static ssize_t pll_ms_freq_show(struct device *dev, struct device_attribute *att
...
@@ -2007,7 +2059,7 @@ static ssize_t pll_ms_freq_show(struct device *dev, struct device_attribute *att
{
{
int
rc
,
chn
;
int
rc
,
chn
;
u64
ms_freq
[
3
];
u64
ms_freq
[
3
];
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
rc
=
get_pll_ms_freq
(
client
,
ms_freq
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
get_pll_ms_freq
(
client
,
ms_freq
,
chn
)))
<
0
)
return
rc
;
return
sprintf
(
buf
,
"%lld %lld %lld
\n
"
,
ms_freq
[
0
],
ms_freq
[
1
],
ms_freq
[
2
]);
return
sprintf
(
buf
,
"%lld %lld %lld
\n
"
,
ms_freq
[
0
],
ms_freq
[
1
],
ms_freq
[
2
]);
...
@@ -2017,7 +2069,7 @@ static ssize_t pll_ms_freq_store(struct device *dev, struct device_attribute *at
...
@@ -2017,7 +2069,7 @@ static ssize_t pll_ms_freq_store(struct device *dev, struct device_attribute *at
int
rc
,
chn
,
int_div
;
int
rc
,
chn
,
int_div
;
u64
freq
[
3
];
u64
freq
[
3
];
int
num_items
;
int
num_items
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
int_div
=
(
strstr
(
attr
->
attr
.
name
,
"_fract"
))
?
0
:
1
;
/* if includes 'fract' - 0, not - 1 */
int_div
=
(
strstr
(
attr
->
attr
.
name
,
"_fract"
))
?
0
:
1
;
/* if includes 'fract' - 0, not - 1 */
num_items
=
sscanf
(
buf
,
"%lld %lld %lld"
,
&
freq
[
0
],
&
freq
[
1
],
&
freq
[
2
]);
num_items
=
sscanf
(
buf
,
"%lld %lld %lld"
,
&
freq
[
0
],
&
freq
[
1
],
&
freq
[
2
]);
...
@@ -2033,14 +2085,14 @@ static ssize_t pll_ms_freq_store(struct device *dev, struct device_attribute *at
...
@@ -2033,14 +2085,14 @@ static ssize_t pll_ms_freq_store(struct device *dev, struct device_attribute *at
static
ssize_t
out_source_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
out_source_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
out_src
,
chn
;
int
out_src
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
out_src
=
get_out_source
(
client
,
chn
)))
<
0
)
return
out_src
;
if
(((
out_src
=
get_out_source
(
client
,
chn
)))
<
0
)
return
out_src
;
return
sprintf
(
buf
,
"%d
\n
"
,
out_src
);
return
sprintf
(
buf
,
"%d
\n
"
,
out_src
);
}
}
static
ssize_t
out_source_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
out_source_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
rc
,
chn
;
int
rc
,
chn
;
int
out_src
;
int
out_src
;
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
...
@@ -2051,7 +2103,7 @@ static ssize_t out_source_store(struct device *dev, struct device_attribute *att
...
@@ -2051,7 +2103,7 @@ static ssize_t out_source_store(struct device *dev, struct device_attribute *att
static
ssize_t
out_source_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
out_source_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
out_src
,
chn
;
int
out_src
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
out_src
=
get_out_source
(
client
,
chn
)))
<
0
)
return
out_src
;
if
(((
out_src
=
get_out_source
(
client
,
chn
)))
<
0
)
return
out_src
;
switch
(
out_src
){
switch
(
out_src
){
...
@@ -2071,7 +2123,7 @@ static ssize_t out_source_freq_show(struct device *dev, struct device_attribute
...
@@ -2071,7 +2123,7 @@ static ssize_t out_source_freq_show(struct device *dev, struct device_attribute
{
{
int
rc
,
chn
;
int
rc
,
chn
;
u64
out_source_freq
[
3
];
u64
out_source_freq
[
3
];
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
rc
=
get_output_src_frequency
(
client
,
out_source_freq
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
get_output_src_frequency
(
client
,
out_source_freq
,
chn
)))
<
0
)
return
rc
;
return
sprintf
(
buf
,
"%lld %lld %lld
\n
"
,
out_source_freq
[
0
],
out_source_freq
[
1
],
out_source_freq
[
2
]);
return
sprintf
(
buf
,
"%lld %lld %lld
\n
"
,
out_source_freq
[
0
],
out_source_freq
[
1
],
out_source_freq
[
2
]);
...
@@ -2080,14 +2132,14 @@ static ssize_t out_source_freq_show(struct device *dev, struct device_attribute
...
@@ -2080,14 +2132,14 @@ static ssize_t out_source_freq_show(struct device *dev, struct device_attribute
static
ssize_t
out_div_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
out_div_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
div
,
chn
;
int
div
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
div
=
get_out_div
(
client
,
chn
)))
<
0
)
return
div
;
if
(((
div
=
get_out_div
(
client
,
chn
)))
<
0
)
return
div
;
return
sprintf
(
buf
,
"%d
\n
"
,
div
);
return
sprintf
(
buf
,
"%d
\n
"
,
div
);
}
}
static
ssize_t
out_div_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
out_div_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
div
,
rc
,
chn
;
int
div
,
rc
,
chn
;
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
sscanf
(
buf
,
"%d"
,
&
div
);
sscanf
(
buf
,
"%d"
,
&
div
);
...
@@ -2099,7 +2151,7 @@ static ssize_t out_freq_show(struct device *dev, struct device_attribute *attr,
...
@@ -2099,7 +2151,7 @@ static ssize_t out_freq_show(struct device *dev, struct device_attribute *attr,
{
{
int
rc
,
chn
;
int
rc
,
chn
;
u64
out_freq
[
3
];
u64
out_freq
[
3
];
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
rc
=
get_out_frequency
(
client
,
out_freq
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
get_out_frequency
(
client
,
out_freq
,
chn
)))
<
0
)
return
rc
;
return
sprintf
(
buf
,
"%lld %lld %lld
\n
"
,
out_freq
[
0
],
out_freq
[
1
],
out_freq
[
2
]);
return
sprintf
(
buf
,
"%lld %lld %lld
\n
"
,
out_freq
[
0
],
out_freq
[
1
],
out_freq
[
2
]);
...
@@ -2110,7 +2162,7 @@ static ssize_t out_freq_store(struct device *dev, struct device_attribute *attr,
...
@@ -2110,7 +2162,7 @@ static ssize_t out_freq_store(struct device *dev, struct device_attribute *attr,
int
rc
,
int_div
,
chn
;
int
rc
,
int_div
,
chn
;
u64
freq
[
3
];
u64
freq
[
3
];
int
num_items
;
int
num_items
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
int_div
=
(
strstr
(
attr
->
attr
.
name
,
"_fract"
))
?
0
:
1
;
/* if filename contains '_fract' - 0, not - 1 */
int_div
=
(
strstr
(
attr
->
attr
.
name
,
"_fract"
))
?
0
:
1
;
/* if filename contains '_fract' - 0, not - 1 */
...
@@ -2125,7 +2177,7 @@ static ssize_t out_freq_store(struct device *dev, struct device_attribute *attr,
...
@@ -2125,7 +2177,7 @@ static ssize_t out_freq_store(struct device *dev, struct device_attribute *attr,
static
ssize_t
out_div_by_freq_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
out_div_by_freq_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
int
rc
,
chn
;
int
rc
,
chn
;
u64
freq
[
3
];
u64
freq
[
3
];
int
num_items
;
int
num_items
;
...
@@ -2139,7 +2191,22 @@ static ssize_t out_div_by_freq_store(struct device *dev, struct device_attribute
...
@@ -2139,7 +2191,22 @@ static ssize_t out_div_by_freq_store(struct device *dev, struct device_attribute
return
count
;
return
count
;
}
}
static
ssize_t
out_pwr_states_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
int
chn
,
i
;
char
*
cp
=
buf
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
for
(
chn
=
0
;
chn
<
4
;
chn
++
){
for
(
i
=
0
;
out_pwr_states
[
i
];
i
++
)
if
(
strcmp
(
attr
->
attr
.
name
,
out_pwr_states
[
i
])
==
0
)
{
if
(
i
==
get_drv_powerdown
(
client
,
chn
)){
buf
+=
sprintf
(
buf
,
" %d"
,
chn
);
break
;
}
}
}
buf
+=
sprintf
(
buf
,
"
\n
"
);
return
buf
-
cp
;
}
static
ssize_t
out_pwr_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
out_pwr_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
...
@@ -2155,7 +2222,7 @@ static ssize_t out_pwr_states_store(struct device *dev, struct device_attribute
...
@@ -2155,7 +2222,7 @@ static ssize_t out_pwr_states_store(struct device *dev, struct device_attribute
static
int
set_out_pwr_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
)
static
int
set_out_pwr_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
)
{
{
int
i
,
rc
;
int
i
,
rc
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
dev_dbg
(
dev
,
"name=%s chn=%d"
,
name
,
chn
);
dev_dbg
(
dev
,
"name=%s chn=%d"
,
name
,
chn
);
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
for
(
i
=
0
;
out_pwr_states
[
i
];
i
++
)
if
(
strcmp
(
name
,
out_pwr_states
[
i
])
==
0
)
{
for
(
i
=
0
;
out_pwr_states
[
i
];
i
++
)
if
(
strcmp
(
name
,
out_pwr_states
[
i
])
==
0
)
{
...
@@ -2168,11 +2235,28 @@ static int set_out_pwr_states(struct device *dev, const char * name, int chn)
...
@@ -2168,11 +2235,28 @@ static int set_out_pwr_states(struct device *dev, const char * name, int chn)
static
int
get_powerup_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
)
static
int
get_powerup_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
)
{
{
int
index
;
int
index
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
index
=
get_drv_powerdown
(
client
,
chn
)))
<
0
)
return
index
;
if
(((
index
=
get_drv_powerdown
(
client
,
chn
)))
<
0
)
return
index
;
return
sprintf
(
buf
,
out_pwr_states
[
index
]);
return
sprintf
(
buf
,
out_pwr_states
[
index
]);
}
}
static
ssize_t
out_en_states_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
int
chn
,
i
;
char
*
cp
=
buf
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
for
(
chn
=
0
;
chn
<
4
;
chn
++
){
for
(
i
=
0
;
out_en_states
[
i
];
i
++
)
if
(
strcmp
(
attr
->
attr
.
name
,
out_en_states
[
i
])
==
0
)
{
if
(
i
==
get_drv_disable
(
client
,
chn
)){
buf
+=
sprintf
(
buf
,
" %d"
,
chn
);
break
;
}
}
}
buf
+=
sprintf
(
buf
,
"
\n
"
);
return
buf
-
cp
;
}
static
ssize_t
out_en_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
out_en_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
chn
,
num_bytes
,
rc
;
int
chn
,
num_bytes
,
rc
;
...
@@ -2187,7 +2271,7 @@ static ssize_t out_en_states_store(struct device *dev, struct device_attribute *
...
@@ -2187,7 +2271,7 @@ static ssize_t out_en_states_store(struct device *dev, struct device_attribute *
static
int
set_out_en_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
)
static
int
set_out_en_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
)
{
{
int
i
,
rc
;
int
i
,
rc
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
dev_dbg
(
dev
,
"name=%s chn=%d"
,
name
,
chn
);
dev_dbg
(
dev
,
"name=%s chn=%d"
,
name
,
chn
);
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
for
(
i
=
0
;
out_en_states
[
i
];
i
++
)
if
(
strcmp
(
name
,
out_en_states
[
i
])
==
0
)
{
for
(
i
=
0
;
out_en_states
[
i
];
i
++
)
if
(
strcmp
(
name
,
out_en_states
[
i
])
==
0
)
{
...
@@ -2200,11 +2284,27 @@ static int set_out_en_states(struct device *dev, const char * name, int chn)
...
@@ -2200,11 +2284,27 @@ static int set_out_en_states(struct device *dev, const char * name, int chn)
static
int
get_enabled_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
)
static
int
get_enabled_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
)
{
{
int
index
;
int
index
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
index
=
get_drv_disable
(
client
,
chn
)))
<
0
)
return
index
;
if
(((
index
=
get_drv_disable
(
client
,
chn
)))
<
0
)
return
index
;
return
sprintf
(
buf
,
out_en_states
[
index
]);
return
sprintf
(
buf
,
out_en_states
[
index
]);
}
}
static
ssize_t
out_dis_states_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
int
chn
,
i
;
char
*
cp
=
buf
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
for
(
chn
=
0
;
chn
<
4
;
chn
++
){
for
(
i
=
0
;
out_dis_states
[
i
];
i
++
)
if
(
strcmp
(
attr
->
attr
.
name
,
out_dis_states
[
i
])
==
0
)
{
if
(
i
==
get_drv_disabled_state
(
client
,
chn
)){
buf
+=
sprintf
(
buf
,
" %d"
,
chn
);
break
;
}
}
}
buf
+=
sprintf
(
buf
,
"
\n
"
);
return
buf
-
cp
;
}
static
ssize_t
out_dis_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
out_dis_states_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
chn
,
num_bytes
,
rc
;
int
chn
,
num_bytes
,
rc
;
...
@@ -2219,7 +2319,7 @@ static ssize_t out_dis_states_store(struct device *dev, struct device_attribute
...
@@ -2219,7 +2319,7 @@ static ssize_t out_dis_states_store(struct device *dev, struct device_attribute
static
int
set_out_dis_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
)
static
int
set_out_dis_states
(
struct
device
*
dev
,
const
char
*
name
,
int
chn
)
{
{
int
i
,
rc
;
int
i
,
rc
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
dev_dbg
(
dev
,
"name=%s chn=%d"
,
name
,
chn
);
dev_dbg
(
dev
,
"name=%s chn=%d"
,
name
,
chn
);
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
for
(
i
=
0
;
out_dis_states
[
i
];
i
++
)
if
(
strcmp
(
name
,
out_dis_states
[
i
])
==
0
)
{
for
(
i
=
0
;
out_dis_states
[
i
];
i
++
)
if
(
strcmp
(
name
,
out_dis_states
[
i
])
==
0
)
{
...
@@ -2231,15 +2331,16 @@ static int set_out_dis_states(struct device *dev, const char * name, int chn)
...
@@ -2231,15 +2331,16 @@ static int set_out_dis_states(struct device *dev, const char * name, int chn)
static
int
get_disabled_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
)
static
int
get_disabled_state
(
struct
device
*
dev
,
char
*
buf
,
int
chn
)
{
{
int
index
;
int
index
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
index
=
get_drv_disabled_state
(
client
,
chn
)))
<
0
)
return
index
;
if
(((
index
=
get_drv_disabled_state
(
client
,
chn
)))
<
0
)
return
index
;
return
sprintf
(
buf
,
out_dis_states
[
index
]);
return
sprintf
(
buf
,
out_dis_states
[
index
]);
}
}
#ifdef GENERATE_EXTRA
#ifdef GENERATE_EXTRA
static
ssize_t
drv_powerdown_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_powerdown_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_powerdown
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_powerdown
(
client
,
chn
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
...
@@ -2247,7 +2348,7 @@ static ssize_t drv_powerdown_show (struct device *dev, struct device_attribute *
...
@@ -2247,7 +2348,7 @@ static ssize_t drv_powerdown_show (struct device *dev, struct device_attribute *
static
ssize_t
drv_powerdown_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
drv_powerdown_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
data
,
rc
,
chn
;
int
data
,
rc
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_drv_powerdown
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_drv_powerdown
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
...
@@ -2256,7 +2357,7 @@ static ssize_t drv_powerdown_store(struct device *dev, struct device_attribute *
...
@@ -2256,7 +2357,7 @@ static ssize_t drv_powerdown_store(struct device *dev, struct device_attribute *
static
ssize_t
drv_disable_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_disable_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_disable
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_disable
(
client
,
chn
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
...
@@ -2264,7 +2365,7 @@ static ssize_t drv_disable_show (struct device *dev, struct device_attribute *at
...
@@ -2264,7 +2365,7 @@ static ssize_t drv_disable_show (struct device *dev, struct device_attribute *at
static
ssize_t
drv_disable_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
drv_disable_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
data
,
rc
,
chn
;
int
data
,
rc
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_drv_disable
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_drv_disable
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
...
@@ -2273,7 +2374,7 @@ static ssize_t drv_disable_store(struct device *dev, struct device_attribute *at
...
@@ -2273,7 +2374,7 @@ static ssize_t drv_disable_store(struct device *dev, struct device_attribute *at
static
ssize_t
drv_disabled_state_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_disabled_state_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_disabled_state
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_disabled_state
(
client
,
chn
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
...
@@ -2281,7 +2382,7 @@ static ssize_t drv_disabled_state_show (struct device *dev, struct device_attrib
...
@@ -2281,7 +2382,7 @@ static ssize_t drv_disabled_state_show (struct device *dev, struct device_attrib
static
ssize_t
drv_disabled_state_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
drv_disabled_state_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
data
,
rc
,
chn
;
int
data
,
rc
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_drv_disabled_state
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_drv_disabled_state
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
...
@@ -2290,7 +2391,7 @@ static ssize_t drv_disabled_state_store(struct device *dev, struct device_attrib
...
@@ -2290,7 +2391,7 @@ static ssize_t drv_disabled_state_store(struct device *dev, struct device_attrib
static
ssize_t
drv_invert_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_invert_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_invert
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_invert
(
client
,
chn
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
...
@@ -2298,7 +2399,7 @@ static ssize_t drv_invert_show (struct device *dev, struct device_attribute *att
...
@@ -2298,7 +2399,7 @@ static ssize_t drv_invert_show (struct device *dev, struct device_attribute *att
static
ssize_t
drv_invert_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
drv_invert_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
data
,
rc
,
chn
;
int
data
,
rc
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_drv_invert
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_drv_invert
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
...
@@ -2307,7 +2408,7 @@ static ssize_t drv_invert_store(struct device *dev, struct device_attribute *att
...
@@ -2307,7 +2408,7 @@ static ssize_t drv_invert_store(struct device *dev, struct device_attribute *att
static
ssize_t
drv_invert_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_invert_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_invert
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_invert
(
client
,
chn
)))
<
0
)
return
data
;
switch
(
data
)
{
switch
(
data
)
{
...
@@ -2322,7 +2423,7 @@ static ssize_t drv_invert_txt_show (struct device *dev, struct device_attribute
...
@@ -2322,7 +2423,7 @@ static ssize_t drv_invert_txt_show (struct device *dev, struct device_attribute
static
ssize_t
drv_type_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_type_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_type
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_type
(
client
,
chn
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
...
@@ -2330,7 +2431,7 @@ static ssize_t drv_type_show (struct device *dev, struct device_attribute *attr,
...
@@ -2330,7 +2431,7 @@ static ssize_t drv_type_show (struct device *dev, struct device_attribute *attr,
static
ssize_t
drv_type_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
drv_type_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
data
,
rc
,
chn
;
int
data
,
rc
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_drv_type
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_drv_type
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
...
@@ -2340,7 +2441,7 @@ static ssize_t drv_type_store(struct device *dev, struct device_attribute *attr,
...
@@ -2340,7 +2441,7 @@ static ssize_t drv_type_store(struct device *dev, struct device_attribute *attr,
static
ssize_t
drv_type_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_type_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_type
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_type
(
client
,
chn
)))
<
0
)
return
data
;
switch
(
data
)
{
switch
(
data
)
{
...
@@ -2359,7 +2460,7 @@ static ssize_t drv_type_txt_show (struct device *dev, struct device_attribute *a
...
@@ -2359,7 +2460,7 @@ static ssize_t drv_type_txt_show (struct device *dev, struct device_attribute *a
static
ssize_t
drv_vdd_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_vdd_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_vdd
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_vdd
(
client
,
chn
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
...
@@ -2367,7 +2468,7 @@ static ssize_t drv_vdd_show (struct device *dev, struct device_attribute *attr,
...
@@ -2367,7 +2468,7 @@ static ssize_t drv_vdd_show (struct device *dev, struct device_attribute *attr,
static
ssize_t
drv_vdd_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
drv_vdd_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
data
,
rc
,
chn
;
int
data
,
rc
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_drv_vdd
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_drv_vdd
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
...
@@ -2376,7 +2477,7 @@ static ssize_t drv_vdd_store(struct device *dev, struct device_attribute *attr,
...
@@ -2376,7 +2477,7 @@ static ssize_t drv_vdd_store(struct device *dev, struct device_attribute *attr,
static
ssize_t
drv_vdd_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_vdd_txt_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_vdd
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_vdd
(
client
,
chn
)))
<
0
)
return
data
;
switch
(
data
)
{
switch
(
data
)
{
...
@@ -2390,7 +2491,7 @@ static ssize_t drv_vdd_txt_show (struct device *dev, struct device_attribute *at
...
@@ -2390,7 +2491,7 @@ static ssize_t drv_vdd_txt_show (struct device *dev, struct device_attribute *at
static
ssize_t
drv_trim_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
static
ssize_t
drv_trim_show
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
{
int
data
,
chn
;
int
data
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_trim
(
client
,
chn
)))
<
0
)
return
data
;
if
(((
data
=
get_drv_trim
(
client
,
chn
)))
<
0
)
return
data
;
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
return
sprintf
(
buf
,
"%d
\n
"
,
data
);
...
@@ -2399,7 +2500,7 @@ static ssize_t drv_trim_show (struct device *dev, struct device_attribute *attr,
...
@@ -2399,7 +2500,7 @@ static ssize_t drv_trim_show (struct device *dev, struct device_attribute *attr,
static
ssize_t
drv_auto_trim_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
drv_auto_trim_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
data
,
rc
,
chn
;
int
data
,
rc
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
update_drv_trim
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
update_drv_trim
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
...
@@ -2408,7 +2509,7 @@ static ssize_t drv_auto_trim_store(struct device *dev, struct device_attribute *
...
@@ -2408,7 +2509,7 @@ static ssize_t drv_auto_trim_store(struct device *dev, struct device_attribute *
static
ssize_t
drv_trim_any_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
static
ssize_t
drv_trim_any_store
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
{
int
data
,
rc
,
chn
;
int
data
,
rc
,
chn
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
sscanf
(
buf
,
"%d"
,
&
data
);
sscanf
(
buf
,
"%d"
,
&
data
);
if
(((
rc
=
set_drv_trim_any
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
set_drv_trim_any
(
client
,
data
,
chn
)))
<
0
)
return
rc
;
...
@@ -2419,7 +2520,7 @@ static ssize_t drv_txt_show (struct device *dev, struct device_attribute *attr,
...
@@ -2419,7 +2520,7 @@ static ssize_t drv_txt_show (struct device *dev, struct device_attribute *attr,
{
{
int
chn
;
int
chn
;
char
*
data
;
char
*
data
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
chn
=
get_chn_from_name
(
attr
->
attr
.
name
);
/* uses first digit in the name */
if
(((
data
=
get_drv_txt
(
client
,
chn
)))
==
NULL
)
return
-
EINVAL
;
if
(((
data
=
get_drv_txt
(
client
,
chn
)))
==
NULL
)
return
-
EINVAL
;
return
sprintf
(
buf
,
"%s
\n
"
,
data
);
return
sprintf
(
buf
,
"%s
\n
"
,
data
);
...
@@ -2588,7 +2689,7 @@ static int get_ss_vals(struct device *dev, char * buf, int chn)
...
@@ -2588,7 +2689,7 @@ static int get_ss_vals(struct device *dev, char * buf, int chn)
{
{
int
state
;
int
state
;
u32
rate
,
amp
;
u32
rate
,
amp
;
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
if
(((
state
=
get_ss_state
(
client
,
chn
)))
<
0
)
return
state
;
if
(((
state
=
get_ss_state
(
client
,
chn
)))
<
0
)
return
state
;
if
(((
amp
=
get_ss_down_amplitude
(
client
,
chn
)))
<
0
)
return
amp
;
if
(((
amp
=
get_ss_down_amplitude
(
client
,
chn
)))
<
0
)
return
amp
;
if
(((
rate
=
get_ss_down_rate
(
client
,
chn
)))
<
0
)
return
rate
;
if
(((
rate
=
get_ss_down_rate
(
client
,
chn
)))
<
0
)
return
rate
;
...
@@ -3013,6 +3114,19 @@ static int set_out_source(struct i2c_client *client, int chn, int src)
...
@@ -3013,6 +3114,19 @@ static int set_out_source(struct i2c_client *client, int chn, int src)
}
}
return
write_field
(
client
,
(
u8
)
src
,
awe_rdiv_in
[
chn
]);
return
write_field
(
client
,
(
u8
)
src
,
awe_rdiv_in
[
chn
]);
}
}
static
int
get_out_ms
(
struct
i2c_client
*
client
,
int
chn
)
{
int
rc
,
out_src
;
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
if
(((
out_src
=
get_out_source
(
client
,
chn
)))
<
0
)
return
out_src
;
switch
(
out_src
){
case
5
:
return
0
;
case
6
:
return
chn
;
}
return
-
1
;
}
/* Examples:
/* Examples:
* "IN12:2:4"
* "IN12:2:4"
* "XO:1:1"
* "XO:1:1"
...
@@ -3489,7 +3603,7 @@ static int get_ms_powerdown(struct i2c_client *client, int chn)
...
@@ -3489,7 +3603,7 @@ static int get_ms_powerdown(struct i2c_client *client, int chn)
{
{
int
rc
;
int
rc
;
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
return
read_field
(
client
,
awe_
drv
_powerdown
[
chn
]);
return
read_field
(
client
,
awe_
ms
_powerdown
[
chn
]);
}
}
static
int
set_ms_powerdown
(
struct
i2c_client
*
client
,
int
typ
,
int
chn
)
static
int
set_ms_powerdown
(
struct
i2c_client
*
client
,
int
typ
,
int
chn
)
...
@@ -3497,7 +3611,7 @@ static int set_ms_powerdown(struct i2c_client *client, int typ, int chn)
...
@@ -3497,7 +3611,7 @@ static int set_ms_powerdown(struct i2c_client *client, int typ, int chn)
int
rc
;
int
rc
;
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
if
(((
rc
=
_verify_output_channel
(
client
,
chn
)))
<
0
)
return
rc
;
if
(
typ
)
typ
=
1
;
if
(
typ
)
typ
=
1
;
return
write_field
(
client
,
(
u8
)
typ
,
awe_
drv
_powerdown
[
chn
]);
return
write_field
(
client
,
(
u8
)
typ
,
awe_
ms
_powerdown
[
chn
]);
}
}
static
int
ms_to_p123
(
u64
*
ms
,
u32
*
p123
)
static
int
ms_to_p123
(
u64
*
ms
,
u32
*
p123
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment