Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
62f9a57c
Commit
62f9a57c
authored
Sep 05, 2013
by
Guenter Roeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hwmon: (jc42) Convert to use devm_hwmon_device_register_with_groups
Signed-off-by:
Guenter Roeck
<
linux@roeck-us.net
>
parent
38f150fe
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
25 additions
and
36 deletions
+25
-36
drivers/hwmon/jc42.c
drivers/hwmon/jc42.c
+25
-36
No files found.
drivers/hwmon/jc42.c
View file @
62f9a57c
...
...
@@ -163,7 +163,7 @@ static struct jc42_chips jc42_chips[] = {
/* Each client has this additional data */
struct
jc42_data
{
struct
device
*
hwmon_dev
;
struct
i2c_client
*
client
;
struct
mutex
update_lock
;
/* protect register access */
bool
extended
;
/* true if extended range supported */
bool
valid
;
...
...
@@ -193,21 +193,21 @@ MODULE_DEVICE_TABLE(i2c, jc42_id);
static
int
jc42_suspend
(
struct
device
*
dev
)
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
jc42_data
*
data
=
i2c_get_clientdata
(
client
);
struct
jc42_data
*
data
=
dev_get_drvdata
(
dev
);
data
->
config
|=
JC42_CFG_SHUTDOWN
;
i2c_smbus_write_word_swapped
(
client
,
JC42_REG_CONFIG
,
data
->
config
);
i2c_smbus_write_word_swapped
(
data
->
client
,
JC42_REG_CONFIG
,
data
->
config
);
return
0
;
}
static
int
jc42_resume
(
struct
device
*
dev
)
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
jc42_data
*
data
=
i2c_get_clientdata
(
client
);
struct
jc42_data
*
data
=
dev_get_drvdata
(
dev
);
data
->
config
&=
~
JC42_CFG_SHUTDOWN
;
i2c_smbus_write_word_swapped
(
client
,
JC42_REG_CONFIG
,
data
->
config
);
i2c_smbus_write_word_swapped
(
data
->
client
,
JC42_REG_CONFIG
,
data
->
config
);
return
0
;
}
...
...
@@ -317,15 +317,14 @@ static ssize_t set_##value(struct device *dev, \
struct device_attribute *attr, \
const char *buf, size_t count) \
{ \
struct i2c_client *client = to_i2c_client(dev); \
struct jc42_data *data = i2c_get_clientdata(client); \
struct jc42_data *data = dev_get_drvdata(dev); \
int err, ret = count; \
long val; \
if (kstrtol(buf, 10, &val) < 0) \
if (kstrtol(buf, 10, &val) < 0)
\
return -EINVAL; \
mutex_lock(&data->update_lock); \
data->value = jc42_temp_to_reg(val, data->extended); \
err = i2c_smbus_write_word_swapped(
client, reg, data->value);
\
err = i2c_smbus_write_word_swapped(
data->client, reg, data->value);
\
if (err < 0) \
ret = err; \
mutex_unlock(&data->update_lock); \
...
...
@@ -344,8 +343,7 @@ static ssize_t set_temp_crit_hyst(struct device *dev,
struct
device_attribute
*
attr
,
const
char
*
buf
,
size_t
count
)
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
jc42_data
*
data
=
i2c_get_clientdata
(
client
);
struct
jc42_data
*
data
=
dev_get_drvdata
(
dev
);
unsigned
long
val
;
int
diff
,
hyst
;
int
err
;
...
...
@@ -368,7 +366,7 @@ static ssize_t set_temp_crit_hyst(struct device *dev,
mutex_lock
(
&
data
->
update_lock
);
data
->
config
=
(
data
->
config
&
~
JC42_CFG_HYST_MASK
)
|
(
hyst
<<
JC42_CFG_HYST_SHIFT
);
err
=
i2c_smbus_write_word_swapped
(
client
,
JC42_REG_CONFIG
,
err
=
i2c_smbus_write_word_swapped
(
data
->
client
,
JC42_REG_CONFIG
,
data
->
config
);
if
(
err
<
0
)
ret
=
err
;
...
...
@@ -430,8 +428,7 @@ static umode_t jc42_attribute_mode(struct kobject *kobj,
struct
attribute
*
attr
,
int
index
)
{
struct
device
*
dev
=
container_of
(
kobj
,
struct
device
,
kobj
);
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
jc42_data
*
data
=
i2c_get_clientdata
(
client
);
struct
jc42_data
*
data
=
dev_get_drvdata
(
dev
);
unsigned
int
config
=
data
->
config
;
bool
readonly
;
...
...
@@ -452,6 +449,7 @@ static const struct attribute_group jc42_group = {
.
attrs
=
jc42_attributes
,
.
is_visible
=
jc42_attribute_mode
,
};
__ATTRIBUTE_GROUPS
(
jc42
);
/* Return 0 if detection is successful, -ENODEV otherwise */
static
int
jc42_detect
(
struct
i2c_client
*
client
,
struct
i2c_board_info
*
info
)
...
...
@@ -487,14 +485,16 @@ static int jc42_detect(struct i2c_client *client, struct i2c_board_info *info)
static
int
jc42_probe
(
struct
i2c_client
*
client
,
const
struct
i2c_device_id
*
id
)
{
struct
jc42_data
*
data
;
int
config
,
cap
,
err
;
struct
device
*
dev
=
&
client
->
dev
;
struct
device
*
hwmon_dev
;
struct
jc42_data
*
data
;
int
config
,
cap
;
data
=
devm_kzalloc
(
dev
,
sizeof
(
struct
jc42_data
),
GFP_KERNEL
);
if
(
!
data
)
return
-
ENOMEM
;
data
->
client
=
client
;
i2c_set_clientdata
(
client
,
data
);
mutex_init
(
&
data
->
update_lock
);
...
...
@@ -515,29 +515,18 @@ static int jc42_probe(struct i2c_client *client, const struct i2c_device_id *id)
}
data
->
config
=
config
;
/* Register sysfs hooks */
err
=
sysfs_create_group
(
&
dev
->
kobj
,
&
jc42_group
);
if
(
err
)
return
err
;
data
->
hwmon_dev
=
hwmon_device_register
(
dev
);
if
(
IS_ERR
(
data
->
hwmon_dev
))
{
err
=
PTR_ERR
(
data
->
hwmon_dev
);
goto
exit_remove
;
}
hwmon_dev
=
devm_hwmon_device_register_with_groups
(
dev
,
client
->
name
,
data
,
jc42_groups
);
if
(
IS_ERR
(
hwmon_dev
))
return
PTR_ERR
(
hwmon_dev
);
return
0
;
exit_remove:
sysfs_remove_group
(
&
dev
->
kobj
,
&
jc42_group
);
return
err
;
}
static
int
jc42_remove
(
struct
i2c_client
*
client
)
{
struct
jc42_data
*
data
=
i2c_get_clientdata
(
client
);
hwmon_device_unregister
(
data
->
hwmon_dev
);
sysfs_remove_group
(
&
client
->
dev
.
kobj
,
&
jc42_group
);
/* Restore original configuration except hysteresis */
if
((
data
->
config
&
~
JC42_CFG_HYST_MASK
)
!=
...
...
@@ -553,8 +542,8 @@ static int jc42_remove(struct i2c_client *client)
static
struct
jc42_data
*
jc42_update_device
(
struct
device
*
dev
)
{
struct
i2c_client
*
client
=
to_i2c_client
(
dev
);
struct
jc42_data
*
data
=
i2c_get_clientdata
(
client
)
;
struct
jc42_data
*
data
=
dev_get_drvdata
(
dev
);
struct
i2c_client
*
client
=
data
->
client
;
struct
jc42_data
*
ret
=
data
;
int
val
;
...
...
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